想象你有一天,你的ORACLE數(shù)據(jù)庫直接垮掉,沒有任何征兆,縱然你有良好的習(xí)慣,定期備份??墒?,如果備份文件不起作用?我的天,不能想象。看一下以下幾個(gè)苛刻的情況吧。
- 完全丟失系統(tǒng)表空間
- 系統(tǒng)表空間有壞塊
- 表空間被刪除,但數(shù)據(jù)文件還存在
- 表被刪除后,馬上停止操作,空間未被重用
- 表被清空(Truncate)后馬上停止操作,空間未被重用
- 一個(gè)表空間丟失了部份文件,或文件中有壞塊,無法自我修復(fù)
- Oracle ASM存貯損壞,或Oracle ASM磁盤損壞
- 其他無法正常打開數(shù)據(jù)庫或無法查詢數(shù)據(jù)的情況
AUL,你值得擁有。
以下是事件還原記錄.
1 下載AUL,[這里](鏈接: https://pan.baidu.com/s/15EGkTOfTcP5Ft_lpFskXqA) 提取碼: ab49
2 解壓aul6.zip,在aul6.exe同級(jí)目錄下建兩個(gè)文件,1.cfg和2.cfg,1.cfg中使用的兩個(gè)dbf是oracle系統(tǒng)的dbf,2.cfg中使用的dbf是你的表空間數(shù)據(jù)庫中存放數(shù)據(jù)的dbf,其不含有表名/結(jié)構(gòu)等信息,僅存放裸數(shù)據(jù)。
1.cfg

2.cfg

DBF文件說明
dbf文件主要分類:
system01.dbf:記錄系統(tǒng)運(yùn)行信息,包含所有數(shù)據(jù)庫字典,PL/SQL程序代碼及其他系統(tǒng)信息
undotbs01.dbf:存放回退信息,即DML操作后的舊數(shù)據(jù)信息
sysaux01.dbf:system文件的輔助文件,存放支持oracle系統(tǒng)活動(dòng)的多種工具如logminer
users01.dbf:新建用戶未指定存儲(chǔ)空間是,默認(rèn)數(shù)據(jù)存放在該文件中
3 解壓dbf文件頭信息
3.1 運(yùn)行aul6.exe,自動(dòng)進(jìn)入cmd命令行模式。
3.2 輸入命令:open 1.cfg,回車,正常情況,系統(tǒng)會(huì)如下顯示:

3.3 依次輸入下列命令,每輸完一條命令,回車執(zhí)行:
unload table user$;
unload table obj$;
unload table tab$;
unload table col$;
3.4 完成之后,會(huì)產(chǎn)生如下四個(gè)文件

里面有你想恢復(fù)的用戶,表等信息。比如我們找到的用戶為test。
3.5 生成待解壓的執(zhí)行腳本,執(zhí)行命令:open 2.cfg,回車,正常情況,效果應(yīng)與打開1.cfg時(shí)效果相同,輸出數(shù)據(jù)塊大小、數(shù)量等信息。

4 解壓數(shù)據(jù)庫表結(jié)構(gòu),數(shù)據(jù)信息
執(zhí)行命令:list table test to test.txt;回車,生成所有待導(dǎo)出數(shù)據(jù)表腳本,此處test即數(shù)據(jù)表的用戶名。在aul6.exe同級(jí)目錄下找到test.txt,正常情況該文件大小不為0,打開,找到待恢復(fù)的數(shù)據(jù)表,把其它記錄(大多為系統(tǒng)表)全部刪除,保存,將文件擴(kuò)展名改為sql。如下圖:

5 執(zhí)行命令:@test.sql; 執(zhí)行完后

這個(gè)就是解壓之后的數(shù)據(jù)表,其中以_sqlldr.ctl結(jié)尾的是描述表結(jié)構(gòu)信息,以_syntax.sql結(jié)尾的就是創(chuàng)建表的腳本,以txt結(jié)尾的就是這個(gè)表的數(shù)據(jù)(這個(gè)很關(guān)鍵 )
6 恢復(fù)數(shù)據(jù)
6.1 打開plsql,連接一個(gè)目標(biāo)數(shù)據(jù)庫,執(zhí)行所有以_syntax.sql 結(jié)尾的文件,先創(chuàng)建表.確認(rèn)創(chuàng)建OK之后查看左邊PL/SQL的菜單,相關(guān)表有沒有真正創(chuàng)建成功。
6.2 使用oracle自帶的sqlldr命令裝載文本數(shù)據(jù),新開cmd窗口,將路徑切換到aul6.exe同級(jí)目錄下,執(zhí)行命令:
sqlldr test/123456@orcl control=C:\aul6\TEST_TABLE_sqlldr.ctl

如果有多個(gè)表,就重復(fù)多次,只是表名不一樣了。
當(dāng)你遇到開頭的極端情況(很不幸,我是其中的一員),并且沒有有效備份(客戶有備份動(dòng)作,備份不起作用的情況也遇到過)用來恢復(fù)數(shù)據(jù)時(shí), AUL(MyDUL)往往是你最后的機(jī)會(huì). 他們的一直堅(jiān)持的原則就是“拯救數(shù)據(jù),幫助客戶”!謝謝你,AUL.