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