ORACLE恢復刪除的表數據


1、oracle中有recyclebin表,用來保存用戶刪除的表的相關信息,相當於回收站。在recyclebin打開的情況下,用戶drop掉的對象並沒有被數據庫刪除,仍然會占用空間,除非用戶手工進行purge或因為存儲空間不夠而被數據庫清掉。

show parameter recyclebin;
--運行該SQL可以知道recyclebin這個表是否是開啟的

a、recycle bin有dba_recyclebin和user_recyclebin兩種視圖

     dba_recyclebin放置所有用戶drop掉的對象,不含system表空間,包含以下字段

OWNER                --drop掉的對象所屬的用戶
OBJECT_NAME          --對象名,命名規范是BIN$unique_id$version,BIN代表RecycleBin,unique_id是數據庫中該對象的唯一標志,24個字符長度,version表示該對象的版本號
ORIGINAL_NAME        --原始表名
OPERATION            --操作,有drop
TYPE                 --類型,有index、table、lob、lob index
TS_NAME              --用戶類型,有TS_ODS、USERS
CREATETIME           --創建時間
DROPTIME             --drop時間
DROPSCN              --drop的scn號
PARTITION_NAME       
CAN_UNDROP        
CAN_PURGE          
RELATED               
BASE_OBJECT      
PURGE_OBJECT    
SPACE                 

user_recyclebin放置當前用戶drop掉的對象,字段比 dba_recyclebin少了一個OWNER

 

b、利用flashback還原回收站內容

語法:FLASHBACK TABLE [已刪除TABLE名|”RECYCLEBIN中的名字”] TO BEFORE DROP;

flashback table "BIN$KI5DFtx9TnyUTUiZIuC8YA==$0" to before drop;
--這里是OBJECT_NAME,也可以是ORIGINAL_NAME

--再把這個表刪除了通過ORIGINAL_NAME恢復也是一樣的
flashback table sell to before drop;
--這里是ORIGINAL_NAME

 

 

c、如果有幾個的ORIGINAL_NAME都是一樣的,通過ORIGINAL_NAME恢復,只能恢復最后被drop掉的對象;若想明確某個對象就通過OBJECT_NAME恢復。

如果在數據庫中存在和回收站相同對象名的表時,恢復回收站的對象時需要rename對選哪個名。如數據庫中存在一個表名為atest,回收站中也存在一個atest

 flashback table atest to before drop;
--flashback table "BIN$6b6dC4BIR9CZLSfGZWvrVQ==$0" to before drop;
--使用object_name或origin_name都會出現錯誤

flashback table atest to before drop rename to atest_bak;
--atest是原始名,atest_bak是重新的命名

 

 

d、清空回收站,之后不可以通過回收站恢復清空的數據

purge table stest;
--清空某個特定對象,stest是表名

 

purge user_recyclebin;
--purge dba_recyclebin;需要改用戶擁有系統權限,否則不允許清空

 

 參考文章https://blog.csdn.net/u010098331/article/details/50782395

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM