使用ODU恢復被truncate表的資料

abstractcyj發表於2015-05-13
ODU是國內Oracle資料庫大牛老熊的一個資料恢復工具。下載了一個windows版本,玩了一下恢復被truncate表的資料

建立測試用的表空間:
create tablespace mytbs datafile 'C:\ORACLE\ORADATA\ORCL\mytbs.dbf' size 10m autoextend off;

建立測試表以及資料:
create table test_recovery tablespace mytbs as
select rownum rn, dbms_random.value(1, 200000) col from dual connect by rownum <= 100;


將表truncate:
truncate table test_recovery;

觸發檢查點,將資料寫入資料檔案:
 alter system checkpoint;


將表空間offline
alter tablespace mytbs offline;

將system表空間資料檔案以及測試所用表空間資料檔案拷貝至ODU的data目錄

以下是ODU的control.txt檔案的內容:
#ts    #fno   #rfno     filename                                          block_size    bigfile
0 1 1 C:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF           8192
5 2 10 C:\ORACLE\ORADATA\ORCL\EXAMPLE01.DBF           8192
1 3 3 C:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF           8192
6 4 4 C:\ORACLE\ORADATA\ORCL\MYTBS.DBF           8192
2 5 5 C:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF           8192
4 6 6 C:\ORACLE\ORADATA\ORCL\USERS01.DBF           8192

這裡的資訊,可以查詢v$datafile檢視

開啟odu.exe

unload dict 
--資料字典相關

scan extent   tablespace 6

unload table sys.test_recovery object auto


ODU> scan extent tablespace 6


scan extent start: 2015-05-13 14:23:10
scanning extent...
scanning extent finished.
scan extent completed: 2015-05-13 14:23:10


ODU> unload table sys.test_recovery object auto
Auto mode truncated table.


Unloading table: TEST_RECOVERY,object ID: 93118
Unloading segment,storage(Obj#=93118 DataObj#=93118 TS#=6 File#=4 Block#=130 Clu
ster=0)
100 rows unloaded


之後,資料會被生成在data資料夾之下,可以用sqlldr匯入




sqlldr匯入:
sqlldr  userid='sys/sys as sysdba' control=SYS_TEST_RECOVERY.ctl



恢復完成

參考:
http://www.laoxiong.net/odu_recover_truncated_table.html
http://blog.csdn.net/tianlesoftware/article/details/6775394

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-1652634/,如需轉載,請註明出處,否則將追究法律責任。

相關文章