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
查詢回收站中的物件,但是必須要用”"指定正確回收站中的物件名
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
我們可以看出,恢復的表是最後被刪除的,但是這個表不是我們實際需要的,怎麼辦?
還可以使用回收站中的物件名:
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;
回收站(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
查詢回收站中的物件,但是必須要用”"指定正確回收站中的物件名
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
我們可以看出,恢復的表是最後被刪除的,但是這個表不是我們實際需要的,怎麼辦?
還可以使用回收站中的物件名:
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-1320182/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle10g 中的回收站(Recycle Bin)Oracle
- Oracle 10 Recycle Bin回收站(轉)Oracle
- Oracle10g新特性:Recycle Bin回收站Oracle
- 【新炬網路名師大講堂】Oracle中的回收站(Recycle Bin)Oracle
- oracle recycle bin 研究Oracle
- How to purge the Oracle Database Recycle BinOracleDatabase
- win10中recycle.bin什麼意思_win10中recycle.bin怎樣刪除Win10
- 使用Network Recycle Bin啟用對映網路驅動器上的回收站
- 10g 回收站(RECYCLE BIN)導致查詢表空間的利用率時很慢
- Oracle OCP 1Z0 053 Q374(Recycle Bin)Oracle
- How To Search and Restore files from Site Collection Recycle BinREST
- ORA-38301:can not perform DDL/DML over objects in Recycle BinORMObject
- Oracle 10G 中的回收站Oracle 10g
- Oracle 10G 中的"回收站"Oracle 10g
- Oracle 中$ORACLE_HOME/bin/oracle檔案Oracle
- Oracle 10G 中的"回收站"(轉)Oracle 10g
- [20190920]Asynchronous Global Index Maintenance and Recycle Bin.txtIndexAINaN
- Oracle 的 KEEP pool, RECYCLE pool和DEFAULT poolOracle
- oracle 回收站Oracle
- oracle—回收站Oracle
- Oracle回收站的清理方法Oracle
- 清除oracle的recyclebin回收站Oracle
- oracle回收站的關閉Oracle
- oracle10g 清除回收站中垃圾表Oracle
- oracle 回收站功能Oracle
- Oracle 回收站清理Oracle
- 清除oracle回收站Oracle
- linux中/bin ,/sbin ,/sur/bin, /sur/sbin的區別Linux
- Oracle回收站機制Oracle
- Oracle回收站介紹Oracle
- 【RECYCLEBIN】Oracle回收站詳解Oracle
- oracle回收站,搬運工Oracle
- oracle清空回收站中資料Oracle
- CRS bin資料夾中的程式
- $ORACLE_HOME/bin 下的utilities 解釋Oracle
- linux中/bin和/sbin和/usr/bin和/usr/sbinLinux
- python中#!/usr/bin/python與#!/usr/bin/env python的區別Python
- Oracle回收站及flashback drop(上)Oracle