Oracle Database 10g:删除表
生活随笔
收集整理的這篇文章主要介紹了
Oracle Database 10g:删除表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用 Oracle Database 10g 中的閃回表特性,可以毫不費力地恢復被意外刪除的表
以下是一個不該發生卻經常發生的情況:用戶刪除了一個非常重要的表 — 當然是意外地刪除 — 并需要盡快地恢復。(在某些時候,這個不幸的用戶可能就是 DBA!)
Oracle9i Database 推出了閃回查詢選項的概念,以便檢索過去某個時間點的數據,但它不能閃回 DDL 操作,如刪除表的操作。唯一的恢復方法是在另一個數據庫中使用表空間的時間點恢復,然后使用導出/導入或其他方法,在當前數據庫中重新創建表。這一過程需要 DBA 進行大量工作并且耗費寶貴的時間,更不用說還要使用另一個數據庫進行克隆。
請使用 Oracle Database 10g 中的閃回表特性,它使得被刪除表的恢復過程如同執行幾條語句一樣簡單。讓我們來看該特性是如何工作的。
刪除那個表!
首先,讓我們查看當前模式中的表。
SQL> select * from tab;
TNAME? ?? ?? ?? ?? ?? ???TABTYPE??CLUSTERID
------------------------? ?? ?? ???--------------- ----------
recycletest? ?? ?? ?? ???TABLE
現在,我們意外地刪除了該表:
SQL> drop table recycletest;
Table dropped.
現在讓我們來查看該表的狀態。
SQL> select * from tab;
TNAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TABTYPE??CLUSTERID
------------------------------? ?? ?? ?? ?? ?? ???-------------??---------------
BIN$04LhcpndanfgMAAAAAANPw==$0? ?? ?TABLE
表 RECYCLETEST 已不存在,但是請注意出現新表 BIN$04LhcpndanfgMAAAAAANPw=$0。這就是所發生的事情:被刪除的表 recycletest并沒有完全消失,而是重命名為一個由系統定義的名稱。它存在于同一個表空間中,具有與原始表相同的結構。如果在該表上定義了索引或觸發器,則它們也被重命名,使用與表相同的命名規則。任何相關源(如過程)都失效;原始表的觸發器和索引被改為放置在重命名的表 BIN$04LhcpndanfgMAAAAAANPw=$0 上,保持被刪除表的完整對象結構。
表及其相關對象被放置在一個稱為“回收站”的邏輯容器中,它類似于您 PC 機中的回收站。但是,對象并沒有從它們原先所在的表空間中刪除;它們仍然占用那里的空間。回收站只是一個列出被刪除對象目錄的邏輯結構。在 SQL*Plus 提示符處使用以下命令來查看其內容(您需要使用 SQL*Plus 10.1 來進行此操作):
SQL> show recyclebin
ORIGINAL NAME? ? RECYCLEBIN NAME? ?? ?? ?? ?? ? OBJECT TYPE??DROP TIME
---------------- ------------------------------ ------------ ------------------
recycletest? ?? ?BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE? ?? ???2004-02-16:21:13:31
結果顯示了表的原始名稱 RECYCLETEST,并顯示了回收站中的新名稱,該名稱與我們看到的刪除后所創建的新表名稱相同。(注意:確切的名稱可能因平臺不同而不同。)為恢復該表,您所需要做的就是使用 FLASHBACK TABLE 命令:
SQL> flashback table recycletest to before drop;
FLASHBACK COMPLETE.
SQL> select * from tab;
TNAME? ?? ?? ?? ?? ?? ?? ?? ???TABTYPE??CLUSTERID
------------------------------? ?? ?? ?? ? -------------??- ----------
RECYCLETEST? ?? ?? ?? ?? ?? ???TABLE
瞧!表毫不費力地恢復了。如果現在查看回收站,它將是空的。
記住,將表放在回收站里并不在原始表空間中釋放空間。要釋放空間,您需要使用以下命令清空回收站:
purge recyclebin;
但是如果您希望完全刪除該表而不需要使用閃回特性,該怎么辦?在這種情況下,可以使用以下命令永久刪除該表:
drop table recycletest purge;
此命令不會將表重命名為回收站中的名稱,而是永久刪除該表,就象 10g 之前的版本一樣。
以下是一個不該發生卻經常發生的情況:用戶刪除了一個非常重要的表 — 當然是意外地刪除 — 并需要盡快地恢復。(在某些時候,這個不幸的用戶可能就是 DBA!)
Oracle9i Database 推出了閃回查詢選項的概念,以便檢索過去某個時間點的數據,但它不能閃回 DDL 操作,如刪除表的操作。唯一的恢復方法是在另一個數據庫中使用表空間的時間點恢復,然后使用導出/導入或其他方法,在當前數據庫中重新創建表。這一過程需要 DBA 進行大量工作并且耗費寶貴的時間,更不用說還要使用另一個數據庫進行克隆。
請使用 Oracle Database 10g 中的閃回表特性,它使得被刪除表的恢復過程如同執行幾條語句一樣簡單。讓我們來看該特性是如何工作的。
刪除那個表!
首先,讓我們查看當前模式中的表。
SQL> select * from tab;
TNAME? ?? ?? ?? ?? ?? ???TABTYPE??CLUSTERID
------------------------? ?? ?? ???--------------- ----------
recycletest? ?? ?? ?? ???TABLE
現在,我們意外地刪除了該表:
SQL> drop table recycletest;
Table dropped.
現在讓我們來查看該表的狀態。
SQL> select * from tab;
TNAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TABTYPE??CLUSTERID
------------------------------? ?? ?? ?? ?? ?? ???-------------??---------------
BIN$04LhcpndanfgMAAAAAANPw==$0? ?? ?TABLE
表 RECYCLETEST 已不存在,但是請注意出現新表 BIN$04LhcpndanfgMAAAAAANPw=$0。這就是所發生的事情:被刪除的表 recycletest并沒有完全消失,而是重命名為一個由系統定義的名稱。它存在于同一個表空間中,具有與原始表相同的結構。如果在該表上定義了索引或觸發器,則它們也被重命名,使用與表相同的命名規則。任何相關源(如過程)都失效;原始表的觸發器和索引被改為放置在重命名的表 BIN$04LhcpndanfgMAAAAAANPw=$0 上,保持被刪除表的完整對象結構。
表及其相關對象被放置在一個稱為“回收站”的邏輯容器中,它類似于您 PC 機中的回收站。但是,對象并沒有從它們原先所在的表空間中刪除;它們仍然占用那里的空間。回收站只是一個列出被刪除對象目錄的邏輯結構。在 SQL*Plus 提示符處使用以下命令來查看其內容(您需要使用 SQL*Plus 10.1 來進行此操作):
SQL> show recyclebin
ORIGINAL NAME? ? RECYCLEBIN NAME? ?? ?? ?? ?? ? OBJECT TYPE??DROP TIME
---------------- ------------------------------ ------------ ------------------
recycletest? ?? ?BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE? ?? ???2004-02-16:21:13:31
結果顯示了表的原始名稱 RECYCLETEST,并顯示了回收站中的新名稱,該名稱與我們看到的刪除后所創建的新表名稱相同。(注意:確切的名稱可能因平臺不同而不同。)為恢復該表,您所需要做的就是使用 FLASHBACK TABLE 命令:
SQL> flashback table recycletest to before drop;
FLASHBACK COMPLETE.
SQL> select * from tab;
TNAME? ?? ?? ?? ?? ?? ?? ?? ???TABTYPE??CLUSTERID
------------------------------? ?? ?? ?? ? -------------??- ----------
RECYCLETEST? ?? ?? ?? ?? ?? ???TABLE
瞧!表毫不費力地恢復了。如果現在查看回收站,它將是空的。
記住,將表放在回收站里并不在原始表空間中釋放空間。要釋放空間,您需要使用以下命令清空回收站:
purge recyclebin;
但是如果您希望完全刪除該表而不需要使用閃回特性,該怎么辦?在這種情況下,可以使用以下命令永久刪除該表:
drop table recycletest purge;
此命令不會將表重命名為回收站中的名稱,而是永久刪除該表,就象 10g 之前的版本一樣。
轉載于:https://blog.51cto.com/gjbxx110/271768
總結
以上是生活随笔為你收集整理的Oracle Database 10g:删除表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十年,我的计算机生涯
- 下一篇: ccna实验配置个人总结