【新炬網路名師大講堂】Oracle中的回收站(Recycle Bin)
什麼是Recycle Bin
回收站(Recycle Bin)實際上是包含刪除物件資訊的資料字典表。刪除表和其他相關物件,比如索引、約束和巢狀表,實際上沒有被真的刪除,還是繼續佔用空間。直到被從回收站中purged出去,才能從資料庫釋放相關的表空間的空間。
每個使用者可以擁有自己的回收站,當然除非使用者擁有SYSDBA許可權,否則預設都只可以訪問使用者所屬的回收站。
可以透過下列語句,檢視在回收站中自己的物件:
select * from recyclebin;
特別需要注意的是:在sys下drop的表是不記錄recyclebin的。
閃回刪除和回收站的關係
使用Flashback Table命令,可以在無需使用時間點恢復的情況下,還原drop table語句的結果。
由初始化引數REECYCLEBIN用於控制閃回刪除功能是開啟(on)還是關閉(off)。如果是off,則刪除的表不會進入回收站。如果是on,則刪除的表將進入回收站,並且可能可以恢復(取決於是否還被保留)。預設情況下,不管10g和11g中。RECYCLEBIN設定為ON。
如果不啟用回收站,則刪除表時,與該表及其從屬物件關聯的空間會立即變為可回收。
如果啟用了回收站,則刪除表時,與該表及其從屬物件管理的空間不會立即變為可回收。即使該空間確實顯示在dba_free_space中。相反,會在回收站中引用刪除的物件,這些物件仍屬於其各自的所有者。在空間不緊張時,絕不會把回收站物件使用的快樂自動回收。從而可以儘可能長的期限內恢復回收站的物件。
回收站中物件的命名
將刪除的表“移動”到回收站時,將使用系統生成的名稱對該表機器關聯物件和約束條件進行重新命名。
這樣做的好處是避免以下情況:
使用者刪除表後,又用相同的名重建,又再刪除。
兩個使用者使用相同的表名,但又都刪除這些表。
重新命名慣例如下:BIN$unique_id$version。
其中unique_id是該物件的全域性唯一識別符號,包含26個字元,用於在所有資料庫之間的唯一的標識回收站名稱。
而version是資料庫分配的版本號。
回收站:自動回收空間
只要回收站物件使用的空間沒有被回收,就可以使用閃回刪除功能恢復這些物件。
下面是回收站物件的回收策略:
顯式發出purge命令時執行手動清理
空間不足時執行自動清除:物件在回收站中時,DBA_FREE_SPACE也會報告其對應的空間,因為這些空間是可以自動回收的。然後按以下順序使用特定表空間中的空閒空間:
1.與回收站物件不對應的空閒空間
2.與回收站物件對應的空閒空間。在這種情況下,將使用先進先出(FIFO)演算法自動將回收站物件從回收站清理
3.自動分配的空閒空間。
回收站管理
啟停回收站
停用回收站
ALTER SESSION SET recyclebin = OFF;
ALTER SYSTEM SET recyclebin = OFF SCOPE = SPFILE;
啟用回收站
ALTER SESSION SET recyclebin = ON;
ALTER SYSTEM SET recyclebin = ON SCOPE = SPFILE;
注意:上述操作都需要重啟資料庫生效。
檢視和查詢回收站中的物件
試圖 | 描述 |
USER_RECYCLEBIN | 使用者檢視回收站中自身刪除的物件,也可用透過同義詞recyclebin檢視。 |
DBA_RECYCLEBIN | 管理員檢視回收站中所有的刪除物件。 |
檢視回收站中中的物件
select original_name, object_name, ts_name, droptime from dba_recyclebin
或
SQL> show recyclebin –不顯示索引
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
—————- —————————— ———— ——————-
PP BIN$9dV9fqwIE+TgQwEAAH/i4w==$0 TABLE 2014-03-31:00:30:15
PP BIN$9dV9fqwHE+TgQwEAAH/i4w==$0 TABLE 2014-03-31:00:16:25
PP BIN$9dV9fqwGE+TgQwEAAH/i4w==$0 TABLE 2014-03-30:23:21:34
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
—————- —————————— ———— ——————-
PP BIN$9dV9fqwIE+TgQwEAAH/i4w==$0 TABLE 2014-03-31:00:30:15
PP BIN$9dV9fqwHE+TgQwEAAH/i4w==$0 TABLE 2014-03-31:00:16:25
PP BIN$9dV9fqwGE+TgQwEAAH/i4w==$0 TABLE 2014-03-30:23:21:34
查詢回收站中的物件,但是必須要用”"指定正確回收站中的物件名
SQL> select * from “BIN$9dV9fqwGE+TgQwEAAH/i4w==$0″;
回收站:手動回收空間
使用PURGE命令可從回收站中永久地刪除物件。從回收站中清除某個物件時,會從資料庫中永久地刪除該物件及其從屬物件。因此,將無法再使用閃回刪除功能恢復從回收站中清除的物件。
下面是可能使用的一些PURGE命令:
清除指定表和索引
PURGE {TABLE |INDEX }
示範:
purge table ”BIN$9dV9fqwGE+TgQwEAAH/i4w==$0″;
或
purge table table_name;
purge index index_name;
清除駐留在指定表空間中的所有物件(也可能清楚從屬、駐留在其它表空間中的物件)
PURGE TABLESPACE [USER ]
示範:
purge tablespace test;
purge tablespace test user z;
清除屬於當前使用者的所有物件或者清除所有物件(dba_recyclenbin,必須具有足夠的系統許可權或者sysdba許可權)
PURGE [USER_|DBA_]RECYCLEBIN
不使用回收站
drop table [purge];
表空間中的物件不會移到回收站中,且回收站中所屬該表空間的物件也會被清理。
drop tablespace [including contents]
從資料庫中永久地刪除該使用者及其擁有的所有物件。且回收站中所屬的已刪除使用者的所有物件都將被清理。
drop user [cascade]
從回收站回覆表
使用flashback table…to before drop語句從回收站恢復物件。你可以指點回收站中的物件名,也可以指定原始表名。
rename to子句選項可以使恢復的時候重新命名。
語法:
FLASHBACK TABLE TO BEFORE DROP
[RENAME TO ];
示範:
在恢復前,先查詢,所需要的資訊
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
—————- —————————— ———— ——————-
PP BIN$9dV9fqwIE+TgQwEAAH/i4w==$0 TABLE 2014-03-31:00:30:15
PP BIN$9dV9fqwHE+TgQwEAAH/i4w==$0 TABLE 2014-03-31:00:16:25
PP BIN$9dV9fqwGE+TgQwEAAH/i4w==$0 TABLE 2014-03-30:23:21:34
或者
SQL> select object_name, original_name, createtime from recyclebin;
OBJECT_NAME ORIGINAL_NAME CREATETIME
—————————— ——————————– ——————-
BIN$9dV9fqwHE+TgQwEAAH/i4w==$0 PP 2014-03-31:00:16:19
BIN$9dV9fqwGE+TgQwEAAH/i4w==$0 PP 2014-03-30:23:21:28
BIN$9dV9fqwIE+TgQwEAAH/i4w==$0 PP 2014-03-31:00:30:13
使用如下命令恢復表:
flashback table pp to before drop rename to zzz;
SQL> select object_name, original_name, createtime from recyclebin;OBJECT_NAME ORIGINAL_NAME CREATETIME
—————————— ——————————– ——————-
BIN$9dV9fqwHE+TgQwEAAH/i4w==$0 PP 2014-03-31:00:16:19
BIN$9dV9fqwGE+TgQwEAAH/i4w==$0 PP 2014-03-30:23:21:28
—————————— ——————————– ——————-
BIN$9dV9fqwHE+TgQwEAAH/i4w==$0 PP 2014-03-31:00:16:19
BIN$9dV9fqwGE+TgQwEAAH/i4w==$0 PP 2014-03-30:23:21:28
我們可以看出,恢復的表是最後被刪除的,但是這個表不是我們實際需要的,怎麼辦?
還可以使用回收站中的物件名:
flashback table “BIN$9dV9fqwGE+TgQwEAAH/i4w==$0″ to before drop;
恢復依賴物件
注意:恢復刪除的表時,恢復的索引、觸發器和約束條件將保留各自的回收站名稱。因此,建議在閃回刪除表前查詢回收站和DBA_CONSTRAINTS。
1、在閃回之前,必須要先查詢好表的相關資訊
SQL> select object_name, original_name, createtime from recyclebin;
OBJECT_NAME ORIGINAL_NAME CREATETIME
—————————— ——————————– ——————-
BIN$9daqMpoEFoLgQwEAAH/mBQ==$0 IDX_PPP_02 2014-03-31:00:45:01
BIN$9daqMpoFFoLgQwEAAH/mBQ==$0 IDX_PPP_01 2014-03-31:00:45:14
BIN$9daqMpoGFoLgQwEAAH/mBQ==$0 PP 2014-03-31:00:44:32
2、恢復表
SQL> flashback table pp to before drop;
3、查詢在回收站中恢復表對應關聯物件
SQL> select index_name from user_indexes where table_name=’PP’;
INDEX_NAME
——————————
BIN$9daqMpoFFoLgQwEAAH/mBQ==$0
BIN$9daqMpoEFoLgQwEAAH/mBQ==$0
4、重新命名到正確的物件名
alter index “BIN$9daqMpoFFoLgQwEAAH/mBQ==$0″ rename to IDX_PPP_01;
alter index “BIN$9daqMpoEFoLgQwEAAH/mBQ==$0″ rename to IDX_PPP_02;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29960155/viewspace-1371315/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【新炬網路名師大講堂】SOA套件介紹套件
- 【新炬網路名師大講堂】weblogic整合ejbWeb
- 【新炬網路名師大講堂】總結和結論
- 【新炬網路名師大講堂】Oracle Database 12c 新特性總結OracleDatabase
- 【新炬網路名師大講堂】clone oracle 12c pluggable databasesOracleDatabase
- 【新炬網路名師大講堂】svn在linux下的使用Linux
- 【新炬網路名師大講堂】關於LOG FILE SYNC的解惑
- 【新炬網路名師大講堂】Oracle小知識- Oracle KILLED會話的釋放Oracle會話
- 【新炬網路名師大講堂】Oracle 11g rac 刪除節點Oracle
- 【新炬網路名師大講堂】oracle application server之核心技術opmnOracleAPPServer
- 【新炬網路名師大講堂】TUXEDO的配置最佳化之路一UX
- 【新炬網路名師大講堂】TUXEDO的配置最佳化之路二UX
- 【新炬網路名師大講堂】初識mysql的體系結構MySql
- 【新炬網路名師大講堂】關於IMSI/MSISDN/IMEI的介紹
- 【新炬網路名師大講堂】關於Oracle 12c Flex ASM特性的理解OracleFlexASM
- 【新炬網路名師大講堂】Data Guard–物理主備庫切換
- 【新炬網路名師大講堂】cursor: pin S wait on X模擬AI
- 【新炬網路名師大講堂】AIX上的配置網路調優引數AI
- 【新炬網路名師大講堂】GoldenGate的ADD SCHEMATRANDATA命令研究Go
- 【新炬網路名師大講堂】12c新特性:備份CDBs和PDBs
- 【新炬網路名師大講堂】12c新特性:使用RMAN連線CDB
- 【新炬網路名師大講堂】CBO中”與NULL在cardinality計算上的差別Null
- 【新炬網路名師大講堂】j2ee與weblogic簡介Web
- Oracle中的回收站(Recycle Bin)Oracle
- 【新炬網路名師大講堂】RAC環境下SYSDATE返回錯誤時間
- 【新炬網路名師大講堂】不同資料庫取前幾條記錄資料庫
- 【新炬網路名師大講堂】MySQL複製與監控系列文章(1)——篇首MySql
- 【新炬網路名師大講堂】WAS控制檯資料來源資訊無故丟失
- 【新炬網路名師大講堂】有限條件下怎樣做好恢復演練
- 【新炬網路名師大講堂】理解TimesTen錯誤日誌資訊”waiting for latch”AI
- 【新炬網路名師大講堂】DATABASE REPLAY加壓播放引數之SCALE_UP_MULTIPLIERDatabase
- 【新炬網路名師大講堂】12c高可用新特性what-if command evaluation介紹
- 【新炬網路名師大講堂】記一次打PSU遇到的Copy failed的問題AI
- 【新炬網路名師大講堂】11gR203 RAC一個比較嚴重的bug
- 【新炬網路名師大講堂】O2O同步實施涉及的變更V1.0
- 【新炬網路名師大講堂】在AIX機器上使用xlc編譯c的動態庫AI編譯
- 【新炬網路名師大講堂】TimesTen記憶體碎片(高水位)回收步驟詳解記憶體
- 【新炬網路名師大講堂】軟體測試中常見問題與解決辦法