Oracle10g 中的回收站(Recycle Bin)
相關命令:
SQL>SHOW recyclebin
如果直接清空所有的Recycle Bin中的物件:
SQL> PURGE RECYCLEBIN;
Recyclebin purged.
SQL> SELECT object_name, original_name FROM user_recyclebin;
no rows selected
SQL>
清除指定表:
SQL>PURGE table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
恢復表,用回閃表的功能:
SQL>FLASHBACK TABLE foo TO BEFORE DROP;
在Oracle 10g資料庫中,引入了一個回收站(Recycle Bin)的資料庫物件。
回收站,從原理上來說就是一個資料字典表,放置使用者Drop掉的資料庫物件資訊。使用者進行Drop操作的物件並沒有被資料庫刪除,仍然會佔用空間。除非是由於使用者手工進行Purge或者因為儲存空間不夠而被資料庫清掉。資料庫有了這樣的功能,能夠減少很多不必要的麻煩。常常看到開發人員誤把表刪除,急急忙忙找DBA 來想辦法的情況。相信隨著10G的大範圍應用,這種情形應該比較少見了,我們可以充分利用10g的閃回(FLASHBACK,閃回,回閃?)功能來避免大量的人工誤操作。
DBA管理上的相關資訊可以從USER_recyclebin(DBA_recyclebin)中獲取。
為了便於測試,我們建立了一個表空間Foo,大小為1M,建立了一個使用者Foo,預設的表空間為Foo.
SQL> CONNECT foo/foo;
Connected.
SQL> SELECT table_name FROM user_tables;
no rows selected
SQL>
SQL> DESC user_recyclebin
Name Null? Type
----------------------------------------- -------- -------------------
OBJECT_NAME NOT NULL VARCHAR2(30)
ORIGINAL_NAME VARCHAR2(32)
OPERATION VARCHAR2(9)
TYPE VARCHAR2(25)
TS_NAME VARCHAR2(30)
CREATETIME VARCHAR2(19)
DROPTIME VARCHAR2(19)
DROPSCN NUMBER
PARTITION_NAME VARCHAR2(32)
CAN_UNDROP VARCHAR2(3)
CAN_PURGE VARCHAR2(3)
RELATED NOT NULL NUMBER
BASE_OBJECT NOT NULL NUMBER
PURGE_OBJECT NOT NULL NUMBER
SPACE NUMBER
SQL>
user_recyclebin大多是自解釋的,相對比較容易理解.
SQL> SELECT object_name FROM user_recyclebin;
no rows selected
SQL>
SQL> SELECT object_name FROM user_recyclebin;
no rows selected
SQL> CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL> SELECT table_name FROM user_tables;
TABLE_NAME
----------------------------------------------
FOO
SQL> DROP TABLE foo;
Table dropped.
SQL> SELECT table_name FROM user_tables;
no rows selected
SQL> SHOW recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE 2004-10-30:14:37:39
SQL>
SQL*Plus命令SHOW recyclebin等價於這條SQL:
SQL> SELECT original_name, object_name, TYPE, droptime FROM user_recyclebin;
ORIGINAL_NAME OBJECT_NAME TYPE DROPTIME
--------------- ------------------------------ ---------- --------------------
FOO BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE 2004-10-30:14:37:39
SQL>
SQL> DESC "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
Name Null? Type
----------------------------------------- -------- ----------------
DUMMY VARCHAR2(1)
SQL>
當一個表被刪除並移動到"回收站"中,它的名字要進行一些轉換。這樣的目的顯而易見是為了避免同類物件名稱的重複。(這一點和Windows作業系統的回收站不同,Windows中的回收站經過了特殊的處理,作業系統檔案可以重名。)
轉換後的名字格式如下:
BIN$unique_id$version
其中BIN代表RecycleBin
unique_id是資料庫中該物件的唯一標誌,26個字元長度
version表示該物件的版本號
注:在10g beta 版本中,名字格式如下:
RB$$objn$object_type$version
其中的RB,代表Recycle Bin. objn為表的目錄物件號. object_type表示物件型別. version表示版本號. 由資料庫指定。
下面我們驗證一下回收站裡資料庫物件名字的唯一性:
SQL> CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL> SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------------------------------------
FOO
SQL> DROP TABLE foo;
Table dropped.
SQL> SHOW recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO BIN$VL+ZsqVlQF6R2nYnwAqtvw==$0 TABLE 2004-10-30:15:01:42
FOO BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE 2004-10-30:14:37:39
SQL>
能看出來,雖然源表名字相同,在回收站裡的物件名字是不同的。
針對Recycle Bin物件的操作
已經放到回收站裡的表是不能用drop 命令刪除的(注意物件名字上的雙引號):
SQL> DROP table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
2 /
DROP table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
*
ERROR at line 1:
ORA-38301: can not perform. DDL/DML over objects in Recycle Bin
SQL>
如果要清掉該物件,使用purge命令:
SQL> PURGE table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
2 /
Table purged.
SQL> SELECT object_name, original_name FROM user_recyclebin;
OBJECT_NAME ORIGINAL_NAME
------------------------------ ---------------
BIN$VL+ZsqVlQF6R2nYnwAqtvw==$0 FOO
SQL>
物件已經清掉。如果直接清空所有的Recycle Bin中的物件:
SQL> PURGE RECYCLEBIN;
Recyclebin purged.
SQL> SELECT object_name, original_name FROM user_recyclebin;
no rows selected
SQL>
恢復表,用回閃表的功能:
SQL> FLASHBACK TABLE foo TO BEFORE DROP;
Flashback complete.
SQL>SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------------------------------------
FOO
SQL>
注:在10g Beta版本中,使用Undrop命令來做到這一點.
有的時候,可能同一個名字的表被刪除到回收站中:
SQL> DROP TABLE FOO;
Table dropped.
SQL> SHOW RECYCLEBIN
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE 2004-10-30:15:18:03
SQL> CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL> DROP TABLE foo;
Table dropped.
SQL> SHOW RECYCLEBIN
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO BIN$J63QaUaKTmC1glat+imjeg==$0 TABLE 2004-10-30:15:18:50
FOO BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE 2004-10-30:15:18:03
SQL> FLASHBACK TABLE FOO TO BEFORE DROP;
Flashback complete.
SQL> SHOW RECYCLEBIN
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE 2004-10-30:15:18:03
SQL>
預設的恢復是第一個被刪除的FOO表。如果要恢復指定的表,可以在FLASHBACK TABLE 後面加上指定的RECYCLEBIN 引數指定其他的名字:
SQL> FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP;
FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP
*
ERROR at line 1:
ORA-38312: original name is used by an existing object
SQL> FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP
2 RENAME TO foo2;
Flashback complete.
SQL>
參考資訊
Oracle Database Administrator's Guide 10g Release 1 (10.1) Part Number B10739-01
http://hi.baidu.com/apache_org/blog/item/b0a13aa4c3abaef79152ee11.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-607137/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle中的回收站(Recycle Bin)Oracle
- Oracle10g新特性:Recycle Bin回收站Oracle
- Oracle 10 Recycle Bin回收站(轉)Oracle
- 【新炬網路名師大講堂】Oracle中的回收站(Recycle Bin)Oracle
- oracle recycle bin 研究Oracle
- win10中recycle.bin什麼意思_win10中recycle.bin怎樣刪除Win10
- 使用Network Recycle Bin啟用對映網路驅動器上的回收站
- How to purge the Oracle Database Recycle BinOracleDatabase
- 10g 回收站(RECYCLE BIN)導致查詢表空間的利用率時很慢
- How To Search and Restore files from Site Collection Recycle BinREST
- oracle10g 清除回收站中垃圾表Oracle
- ORA-38301:can not perform DDL/DML over objects in Recycle BinORMObject
- Oracle OCP 1Z0 053 Q374(Recycle Bin)Oracle
- [20190920]Asynchronous Global Index Maintenance and Recycle Bin.txtIndexAINaN
- Oracle10g的回收站(recyclebin)和自由空間管理Oracle
- Oracle10g的回收站(recyclebin)和自由空間管理(zt)Oracle
- linux中/bin ,/sbin ,/sur/bin, /sur/sbin的區別Linux
- CRS bin資料夾中的程式
- Oracle 10G 中的回收站Oracle 10g
- Oracle 10G 中的"回收站"Oracle 10g
- linux中/bin和/sbin和/usr/bin和/usr/sbinLinux
- python中#!/usr/bin/python與#!/usr/bin/env python的區別Python
- Oracle 10G 中的"回收站"(轉)Oracle 10g
- 回收站功能在 Linux 中的實現Linux
- Oracle 的 KEEP pool, RECYCLE pool和DEFAULT poolOracle
- 關於糾結的recycle pool的設定
- Alert Log中回收站物件操作告警物件
- Oracle10g 回收站及徹底刪除table : drop table xx purge 以及flashbackOracle
- 71、shell中crontab中執行命令的特殊性,/bin/sh
- oracle10g中的asm的配置(轉)OracleASM
- oracle10g中的bigfile tablespaceOracle
- Oracle10g 回收站及徹底刪除table : drop table xx purge 以及drop flashOracle
- FTP 中ascii 和bin 的區別和使用方法FTPASCII
- Android去掉SrollView、GrdiView、RecycleAndroidView
- Oracle 中$ORACLE_HOME/bin/oracle檔案Oracle
- shell指令碼頭,#!/bin/sh與#!/bin/bash的區別.指令碼
- /usr/bin/python與/usr/bin/env python的區別Python
- #!/usr/bin/env python與#!/usr/bin/python的區別Python