日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle Database 10g:删除表

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 之前的版本一樣。

轉載于:https://blog.51cto.com/gjbxx110/271768

總結

以上是生活随笔為你收集整理的Oracle Database 10g:删除表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。