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