AUL(MyDUL) Oracle及Oracle ASM數據恢複,原本是想下Windows版本的,這linux 版本的留著備用吧
最近重做係統,忘記備份oracle中的數據,好在我的數據庫文件存放目錄不在係統盤,找到數據庫文件存放目錄,發現一堆dbf文件,現在要從這1G+的文件中恢複我珍貴的兩張表的數據。dbf數據文件如下圖:
(1)下載aul工具,官網:http://www.mydul.net/,右側有下載鏈接,我使用的是AUL6 for Windows,工具體積不大,zip包1.6M,一個exe文件+一個dll。
(2)解壓aul6.zip,在aul6.exe同級目錄下建兩個文件,1.cfg和2.cfg,1.cfg中使用的兩個dbf是oracle係統的dbf,2.cfg中使用的dbf是新建數據庫中存放數據的dbf,其不含有表名/結構等信息,僅存放裸數據。
1.cfg:
0 0 F:\backup\orcl\SYSTEM01.DBF
0 0 F:\backup\orcl\UNDOTBS01.DBF
2.cfg:
0 0 F:\backup\orcl\DOTR.DBF
(3)運行aul6.exe,自動進入cmd命令行模式。
(4)輸入命令:open 1.cfg,回車,正常情況,係統會如下顯示:
依次輸入下列命令,每輸完一條命令,回車執行:
unloadtable user$;
unloadtable obj$;
unloadtable tab$;
unloadtable col$;
執行完畢後,aul6.exe同級目錄下會生產四個文件:aulusr.txt, aulobj.txt,aultab.txt, aulcol.txt,每個文件大小均不為0。
(5)打開aulusr.txt,查看以前數據表的用戶是否存在,正常結果是存在。若忘記以前數據表的用戶名,則打開aulobj.txt,找到你要恢複的數據表表名,該表名的左側的數字即用戶名編號,根據編號在aulusr.txt中找到用戶名。如:
Aulobj.txt:57356,62,ACCOUNT_MANAGE,,2,
Aulusr.txt:62,MINI,
待恢複數據表表名為ACCOUNT_MANAGE,用戶名為mini。
(6)執行命令:open 2.cfg,回車,正常情況,效果應與打開1.cfg時效果相同,輸出數據塊大小、數量等信息。
(7)執行命令:list table mini to mini.txt;回車,生成所有待導出數據表腳本,此處mini即數據表的用戶名。在aul6.exe同級目錄下找到mini.txt,正常情況該文件大小不為0,打開,找到待恢複的數據表,把其它記錄(大多為係統表)全部刪除,保存,將文件擴展名改為sql。如下圖:
(8)執行命令:@mini.sql; 執行完後,aul6.exe同級目錄下一個表會生成3個文件,如:
ACCOUNT_MANAGE.txt 數據文件
ACCOUNT_MANAGE_sqlldr.ctl 裝載控製文件
ACCOUNT_MANAGE_syntax.sql 創建表腳步
該三個文件大小均不為0,若僅txt文件大小為0,則說明2.cfg中dbf文件選取錯誤,修改為其它dbf文件,重新執行步驟6及以後步驟(我在此處卡了好久,開始用USERS01.dbf,txt大小為0,改為TEMP01.dbf,還是為0,改為DOTR.dbf,txt中終於有數據了)。此時,可以打開txt和sql文件,驗證是否是待恢複的數據。至此,數據已全部導出來了,下麵將其導入到當前數據庫中。
(9)打開plsql,連接一個數據庫,執行ACCOUNT_MANAGE_syntax.sql中腳本,可能會報“exit;為無效語句錯誤”,無需理會,待所有sql腳步執行完畢,查看plsql左側樹形結構中tables節點下是否生成待恢複的表。
(10)使用oracle自帶的sqlldr命令裝載文本數據,新開cmd窗口,將路徑切換到aul6.exe同級目錄下,執行命令:sqlldr system/admin control=ACCOUNT_MANAGE_sqlldr.ctl;回車,system/admin為你當前數據庫的用戶名/密碼,需與plsql登錄時用戶名/密碼相同。正常情況命令執行結束時會輸出邏輯記錄計數,表示插入了多少條記錄,且在aul6.exe同級目錄下生成日誌文件account_manage_sqlldr.log,包含執行結果的詳細信息。
(11)在plsql中驗證待恢複的數據表中數據是否已導入成功,若未成功,則重新操作。
(1)aul,又名mydul,oracle及oracle asm數據恢複工具,官網提供試用版,建議從官網下載,國內站點提供的資源中部分帶毒,差點害的我再次重做係統。
(2)dbf文件主要分類:
system01.dbf:記錄係統運行信息,包含所有數據庫字典,PL/SQL程序代碼及其他係統信息
undotbs01.dbf:存放回退信息,即DML操作後的舊數據信息
sysaux01.dbf:system文件的輔助文件,存放支持oracle係統活動的多種工具如logminer
users01.dbf:新建用戶未指定存儲空間是,默認數據存放在該文件中
example01.dbf:存放示例數據信息
(3)想恢複數據,步驟8很重要,該步驟中生成的txt文件,即是待恢複的裸數據文件,實際上,得到txt數據文件,數據恢複就基本結束了,後續操作不過是再現它的使用狀態(將其導入到數據庫中)。我在此處卡了好久,開始用USERS01.dbf,txt大小為0,改為TEMP01.dbf,還是為0,改為DOTR.dbf,txt中終於有數據了。在此必須要感謝一位兄長,抱著試一試的態度,我逐次將2.cfg中的dbf文件名替換為其它dbf,直至數據正確生成。試一試的態度 便是他教給我的。
(4)步驟9、10為導入數據方式,如果待恢複的數據表比較多,可以寫個腳本,以實現批量導入sql
76.4M / 03-25
55M / 06-05
237.9M / 04-13
140.5M / 03-06
900.9M / 03-02
96.2M / 07-06
311.2M / 07-06
335M / 07-06
200M / 07-06
413.8M / 07-06
353.9M / 06-05
131.8M / 04-13
230.8M / 03-03
195.6M / 03-03
165.4M / 03-03
45.6M / 09-08
665.2M / 07-06
2.84G / 07-06
93M / 07-06
338.3M / 07-06
1.38G / 07-26
488.3M / 07-16
109.8M / 06-03
142M / 01-08
1.2M / 11-23
548.8M / 04-13
1.6M / 04-13
1.48G / 03-18
646.6M / 03-03
133.7M / 03-03
325.8M / 06-07
60M / 04-29
254M / 04-25
659M / 04-23
1M / 12-26
253.4M / 12-08
253M / 12-08
1.19G / 11-16
110.5M / 04-23
26.7M / 03-16
488.3M / 07-16
248.9M / 12-08
248.9M / 12-08
201.2M / 04-13
100.6M / 03-06
148.9M / 03-06
1.12G / 07-06
1.25G / 07-06
9.48G / 07-06
50KB / 07-06
116.2M / 04-10
1.92G / 04-17
201.5M / 04-13
7.31G / 07-01
94.3M / 07-06
2.48G / 07-06
7.63G / 07-06
1M / 07-06
778.1M / 07-06
509.7M / 07-06
561.8M / 07-11
1.32G / 01-19
72M / 07-06
548.7M / 07-06
1.00G / 07-06
9.13G / 07-06
126.2M / 07-06
72M / 07-06
105.1M / 07-06
132M / 07-06