ORACLE AUL 工具
這是一個由網路強人開發出來的軟體,可直接讀取DBF檔案內的資料,使發生狀況時把災害降到最小
網站: http://www.mydul.net/cn/index.html
是半免費軟體,沒有購買 licence 最多允許同時打開10個 DBF檔案 ,並且只能訪問前512MB 內容
我們都知道 Truncate table 並不是把資料完全刪除,而是重置了 metadata 及 Dictionary 的資訊,此時 Table 內的資料並沒有消失,只是等待被Oracle 回收利用或重新分配,就是為什麼Truncate 比 delete 還快的原因就在這了。
要做到有效的恢復,在操作人員誤執行Truncate table 後 ,必須立刻阻止對Table 任何的異動( 可以tablespace offline 或 db shutdown )
接下來示範一下如何把 Truncate 後的資料救回
AUL測試版本:6
1.truncate table
SQL> select * from vincentyuan.tw100;
NAME
-----------------------------------------------
1
1
1
1
1
1
1
2
3
SQL> truncate table vincentyuan.tw100;
Table truncated.
SQL>
2.使用AUL
先建立一個文字檔 test.cfg ,有system.dbf 與 要恢復 table 所在的dbf
0 0 D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
0 0 D:\ORACLE\ORADATA\ORCL\TEST1.DBF
開啟AUL6.EXE,並執行 test.cfg
並讀取表結構與用戶等相關資訊
輸入
UNLOAD TABLE USER$; UNLOAD TABLE OBJ$; UNLOAD TABLE TAB$; UNLOAD TABLE COL$;
查看 table 的編號
掃描一下空間分配資訊,掃描結果會存在 AULEXT.TXT 裡
在Truncate table 時重置了第一個block,下一個block 就是原本的資料,所以我們這邊選擇下一個block (原本在130),要是在找不到可以試試下下個block,成功後可以找到原來的資料編號
解析出 Table 資料
接下來把資料儲存在 Tw100.txt 裡
就可以發現AUL目錄下有 三個檔案 TW100_sqlldr.ctl、tw100.txt、TW100_syntax.sql
DBA就可以利用sqlldr 把資料匯進去
想當然的真實情況不可能這麼簡單,肯定比範例來得複雜與棘手,例如在 Truncate 後立刻被 insert 資料進去,找不到原來的資料編碼,這種情況下作者不保證AUL能100%完全恢復
好的DBA是建立完善的備份機制與策略,不能把AUL當作第一考慮使用的工具
沒有留言:
張貼留言