使用PRM-DUL進行ORACLE數(shù)據(jù)庫恢復
在D公司中,一位SA系統(tǒng)管理員不小心誤刪除了某個數(shù)據(jù)庫的SYSTEM表空間所在的數(shù)據(jù)文件,導致整個數(shù)據(jù)庫無法打開且數(shù)據(jù)無法獲取。在沒有備份的情況下,可以使用PRM-DUL工具來接近100%的恢復數(shù)據(jù)。
在D公司中,一位SA系統(tǒng)管理員不小心誤刪除了某個數(shù)據(jù)庫的SYSTEM表空間所在的數(shù)據(jù)文件,導致整個數(shù)據(jù)庫無法打開且數(shù)據(jù)無法獲取。在沒有備份的情況下,可以使用PRM-DUL工具來接近100%的恢復數(shù)據(jù)。
選擇Non-Dictionary模式
當使用No-dictionary模式時,用戶需要指定字符集和國家字符集,因為丟失了SYSTEM表空間后,數(shù)據(jù)庫的字符集信息無法正常獲得,所以需要用戶輸入正確的字符集設置,并安裝必要的語言包。只有這樣才能保證在No-Dictionary模式下正常抽取多國語言。
執(zhí)行SCAN操作
與第一個場景類似,輸入所有可用的數(shù)據(jù)文件(不包括臨時文件),并設置正確的Block Size和OFFSET后,點擊SCAN按鈕。SCAN操作的作用是掃描所有數(shù)據(jù)文件上的Segment Header,并記錄到SEG.DAT和EXT.DAT中。在ORACLE中,一個非分區(qū)表或一個分區(qū)表的每個分區(qū)都對應著一個SEGMENT HEADER數(shù)據(jù)段頭。通過掃描EXTENT MAP信息,可以獲取到該表上的全部記錄。
例如,如果一張非分區(qū)的單表存放在由兩個數(shù)據(jù)文件組成的表空間上,其中SEGMENT HEADER和一半的數(shù)據(jù)存放在A數(shù)據(jù)文件上,另一半數(shù)據(jù)存放在B數(shù)據(jù)文件上。但由于某些原因,SYSTEM表空間和存放SEGMENT HEADER的A數(shù)據(jù)文件都丟失了,只剩下B數(shù)據(jù)文件。此時,如果希望僅恢復B數(shù)據(jù)文件上該表的數(shù)據(jù),則不能依賴于SEGMENT HEADER,而只能依賴于從B數(shù)據(jù)文件上掃描的盤區(qū)圖EXTENT MAP信息。為了同時滿足基于SEGMENT HEADER和EXTENT MAP數(shù)據(jù)的No-Dictionary模式恢復需要,SCAN操作會填充SEG.DAT和EXT.DAT兩個文件,并記錄到DERBY數(shù)據(jù)庫中。
使用Scan Tables From Segments模式
完成SCAN操作后,主界面左側會出現(xiàn)數(shù)據(jù)庫圖標。此時可以選擇兩種模式:Scan Tables From Segments和Scan Tables From Extents。
Scan Tables From Segments模式適用于丟失了SYSTEM表空間,但所有的應用數(shù)據(jù)表空間均存在的情況。而Scan Tables From Extents模式不適用于Dictionary模式的Truncate表數(shù)據(jù)恢復,即丟失了SYSTEM表空間且丟失了SEGMENT HEADER所在的數(shù)據(jù)文件。
優(yōu)先考慮使用Scan Tables From Segments模式,如果發(fā)現(xiàn)該模式下找不到所需的數(shù)據(jù),再考慮使用Scan Tables From Extents模式。
解析字段類型
Scan Tables操作基于SEG.DAT中的SEGMENT HEADER信息來構建數(shù)據(jù)表信息。樹形圖上的每個節(jié)點表示一個數(shù)據(jù)表段,其名字為obj數(shù)據(jù)段上記錄的DATA OBJECT ID。選擇一個節(jié)點并觀察主界面右側邊欄,可以看到智能字段類型解析的結果。
由于丟失了SYSTEM表空間,在No-Dictionary模式下缺乏數(shù)據(jù)表的結構信息,包括字段名和字段類型。PRM采用先進的JAVA類型預判技術來解析字段類型,可以解析多達10種主流數(shù)據(jù)類型。解析準確度超過90%,可以自動解決大部分場景。右側邊欄顯示各字段的含義,包括字段號、取到的行數(shù)、最大長度、NULL的比例,以及將字段解析為字符串、數(shù)字、日期和時間戳的比例。
示例數(shù)據(jù)分析
根據(jù)智能字段類型解析的結果,可以解析10條數(shù)據(jù)并顯示解析結果。這些示例數(shù)據(jù)可以幫助用戶了解實際存放在數(shù)據(jù)段中的數(shù)據(jù)情況。如果數(shù)據(jù)段上的記錄條數(shù)不足10條,則會顯示所有記錄。
如果還有字段類型無法確定,PRM會嘗試使用各種字段類型來解析,并呈現(xiàn)給用戶,以便用戶自行判斷。目前PRM還不支持的類型包括XDB.XDB$RAW_LIST_T、XMLTYPE和用戶自定義類型等。
數(shù)據(jù)搭橋
PRM生成的UNLOAD語句僅作為系統(tǒng)內(nèi)部使用和PRM開發(fā)團隊以及ParnassusData支持工程師使用。在Non-Dictionary模式下,可以采用常規(guī)和數(shù)據(jù)搭橋模式。區(qū)別在于非字典模式下數(shù)據(jù)搭橋時,用戶可以自行執(zhí)行字段的類型。如果用戶知道表設計時的結構,可以自行選擇正確的Column Type類型,以便PRM將表數(shù)據(jù)順利搭橋到目標數(shù)據(jù)庫。