分享ORACLE數據庫恢復神器之ODU、DUL和AUL工具。
ODU:ORACLE DATABASE UNLOADER
DUL:DATA UNLOADER
AUL:也稱MyDUL
關於三種工具說明:
(1)Oracle 的內部工具是DUL(Data UnLoader)。這個需要Oracle 的支持。
(2)老熊寫的ODU 網址:http://www.oracleodu.com/en/
(3)d.c.b.a (支付寶 樓方鑫)寫的AUL. 網址:http://www.anysql.net/download
ODU之前是免費的, 現在老熊和dbsnake在維護ODU,需要購買才能使用。
d.c.b.a的AUL是用C語言寫的, 免費版本最大只支持2個,最大256M的datafile。 如果是更大的datafile,也是需要購買授權。
1、DUL
DUL不是一個商用化的產品,Oracle不賣、不提供也不支持它的使用。DUL只有在Oracle的內部網 站才可以下載到,因此也只有Oracle 的Supporter才能下載到有這個工具,如果與Oracle的Supporter熟悉,沒准他私底下會給你一個,這個工具也因此有一些流落到民間,被一些人收入囊中,奉為珍寶。
不同的平台、不同版本的數據庫都有相應的DUL軟件,9.x 及之前DUL是沒有License限制的,也就是有這個工具可以無限制的使用,不過最新的DUL在這方面已經改進了,kamus說最新DUL拿到手只能用一個月。
獲得DUL有以下幾種途徑:
如果你是Oracle的Supporter,可以在內部網站下載,地址為:
http ://www.nl.oracle.com/support/dul/
如果你有Oracle的Supporter的朋友可以向他們要一個,itpub也幾位斑竹都到 Oracle了,如coolyl、kamus、lunar。一些dul流落到民間,可以向有這軟件的朋友要一個,不過他們一定要有你需要的那個。
DUL 支持分區表、索引組織表(IOT)這些選項,支持標准的數據類型及據結構,具體如下:
支持行鏈接和行遷移
支持哈希和索引cluster
支持NULL列
支持LONG、RAW、DATE、NUMBER、ROWID
支持多free list group
支持多字節字符集
支持LOB 類型列,不過需要注意的是,有LOB類型列的表在做DUL時輸出需要為SQL*Loader格式。
DUL有什么限制和危險
DUL 畢竟是一個大小幾百K的一個小工具而已,而Oracle功能越來越復雜,也因而有一些是DUL不支持或做的不完備的。前面已經提到,你的數據庫可以是啟動不了的,但是要Unload的數據的據文件、數據塊是保證是好的, 為DUL在Unload過程中會對數據塊做檢驗,檢驗讀到的數據塊是不是塊的,是不是屬於正確的段。如果發現壞塊,DUL會在屏幕顯示出錯誤信息,同時將報錯信息寫到日志。
DUL支持多級別安全標簽(MLSLABEL) , 支持VARRAY,OBJECT類型列,也支持嵌套表。DUL在Unload過程中不會考慮到數據庫一致性,它假定所有數據文件中的數據都是已經提交了的,沒有了數據一致性的校驗DUL實際做的是臟讀,這是DUL比較大的缺點。不過關於這一點也是有點好處的,可以用此恢復TRUNCATE/DROP誤操作的表。
DUL 的輸出格式
以.dmp為輸同格式時每表生成一個文件(owner_tablename.dmp) ,以sql*loader為輸出格式時每表生成兩個文件(owner_tablename.ctl和 owner_tablename.dat) 。如果設定了FILE 參數,生成的文件名將 會為FILEnnn.ext,如果你的操作系統不支持長文件名,FILE參此時才會用到。
2、ODU
ODU全稱為Oracle Database Unloader,是由OracleODU開發的類似於Oracle的DUL的一款恢復軟件,用於直接從Oracle數據庫的數據文件中獲取表數據。在各種原因造成的數據庫不能打開時,用於搶救數據,最大限度地減少數據丟失。在一些實際的恢復案例中,DUL並不能將所有的重要數據都恢復出來(或者恢復出來的CLOB數據是亂碼),但ODU卻可以。
獲取ODU地址
ODU最新正式版:
Windows版本:odu_421_win32.zip
Linux版本:odu_421_linux_x86.tar.gz
AIX版本:odu_421_aix53.tar.gz
HP PA-RISC版本:odu_414_hppa.tar.gz
HP IA64版本:odu_414_hp_ia64.tar.gz
Solaris SPARC版本:odu_421_sol_sparc.zip
ODU最新試用版:
Windows版本:odu_trial_413_win32.zip
Linux x86版本:odu_trial_413_linux_x86.tar.gz
AIX版本:odu_trial_413_aix53.tar.gz
HP PA-RISC版本:odu_trial_412_hppa.tar.gz
HP IA64版本:odu_trial_412_hp_ia64.tar.gz
Solaris SPARC版本:odu_trial_413_sol_sparc.zip
ODU正式版和試用版的區別:試用版僅用於測試、學習和驗證,只能恢復SYSTEM表空間下的數據,對於其他表空間的數據,僅恢復少量的數據以驗證數據可恢復。而正式版在獲取LICENSE后能夠恢復所有能夠恢復的數據。
在使用IE瀏覽器下載ODU軟件時,IE瀏覽器可能會將安裝包的tar.gz擴展名自動改為tar.tar,對於這樣的改變,請將文件的擴展名改回為tar.gz。
ODU的主要功能點:
(1)不需要運行Oracle數據庫軟件,ODU直接讀取數據庫文件解析數據。
(2)支持ASM,能夠直接從ASM磁盤中導出數據,即使相關的磁盤組不能成功mount
(3)支持從ASM中直接抽取出數據文件和其他任意存儲在ASM中的文件(包括控制文件、日志文件和歸檔日志等),即使相關的磁盤組不能成功mount
(4)支持的Oracle數據庫版本包括7,8i,9i,10g,11g
(5)支持多種平台的數據庫,包括AIX、LINUX、HPUX、SOLARIS、WINDOWS等。能夠在一個平台上導出其他平台的數據,比如在Windows 32位系統上,使用AIX系統上的數據文件導出數據。
(6)支持的數據類型包括:NUMBER, CHAR, VARCHAR2, NCHAR,NVARHCAR2, LONG, DATE, RAW, LONG RAW, BLOB, CLOB, TIMESTAMP (9i+) , BINARY FLOAT, BINARY DOUBLE (10g+)
(7)全面支持LOB字段:
支持CLOB、NCLOB和BLOB,CLOB支持Big Endian和Little Endian字節序
支持LOB分區,子分區
支持同一個表中,不同LOB列使用不同CHUNK SIZE的情況
CLOB數據可以導出到與其他列相同的文件中,或存儲到單獨的文件
LOB列在沒有SYSTEM表空間的情況下仍然能夠導出
LOB列在相關的lob index損壞的情況下依然能夠導出
(8)支持各種表,包括普通的HEAP表,IOT表和聚簇(CLUSTER)表
(9)支持IOT表:
(10)支持普通IOT表的導出
(11)支持壓縮IOT表的導出
(12)支持IOT表溢出段
(13)支持IOT表分區(包括子分區)
(14)只能在有SYSTEM表空間時才能導出IOT表
(15) 支持壓縮表
(16)支持表被truncate后的數據恢復
(17)支持表被drop后的數據恢復
(18)在有SYSTEM表空間的情況下,自動獲取數據字典信息
(19)支持在沒有SYSTEM表空間和數據字典損壞的情況下恢復數據,在沒有數據字典可用時,ODU能夠自動判斷數據的類型
(20)支持10g及以上的大文件(BigFile)表空間
(21)全面支持64位系統,支持超過4G大小的數據文件。
(22)支持復制操作系統命令不能復制的壞文件
(23)支持同一個庫中不同塊大小的數據文件。
(24)支持多種字符集之間的轉換,能夠正確的轉換CLOB、NCLOB、NVARCHAR2列類型的數據到指定的字符集。
(25)自動檢測數據文件的表空間號和文件號
(26)導出的數據格式包括純文本和DMP文件兩種。以純文本導出時,能夠自動生成建表的SQL語句和SQL*Loader導入所需的control文件
(27)模擬Oracle的dump塊功能,能夠dump數據文件中的數據塊
(28)支持DESC表,以顯示表的列定義
(29)支持列出表的分區和子分區
ODU目前不支持的功能:
(1)11g的SecureFiles
(2)使用Oracle TDE加密的數據
3、AUL
AUL是 AnySQL UnLoader 的簡寫,和DUL具有相同的功能,可以離開Oracle的運行環境將數據文件中的數據讀取出來存成文本文件或DMP格式的文件。
AUL功能特點功能特點:
AUL 支持 Oracle 8/8i/9i/10g 四個版本,而對 Oracle7並不提供支持。
支持表、聚族(Cluster)及索引組織表(IOT)的恢復
支持的數據類型有:NUMBER、DATE、CHAR、VARCHAR2、RAW、LONG、LONG、RAW、BINARY_FLOAT、BINARY_DOUBLE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、CLOB 及 BLOB,基本上覆蓋了我們最常用的數據類型,為恢復提供了可靠的保障。
可以恢復成文本方式及 DMP(Oracle 8.1.7 版本)格式。
采用標准C語言寫成,運行速度極快,很容易可以移植到各種不同的平台,
現在已經順利編譯的平台有 Windows、Linux、AIX 和 Solaris (Sparc)。
支持跨平台的恢復,如用Windows下的 AUL 軟件來恢復損壞的Solaris平台下的Oracle 數據庫文件.
支持 CLOB及 BLOB,支持不同的CHUNK SIZE,但同一個表的各個 CLOB 的CHUNK SIZE 必須相同。
什么情況下使用
當你的數據庫損壞,並且沒有備份或備份已經不可用,在償試其他所有辦法均 失敗的情況下,可以考慮使用AUL 來恢復你的數據。AUL 可以將數據從數據文件中讀取出來,但絕不是去修復損壞的數據文件,你需要將恢復出來的數據重新導入或
用 SQL Loader 裝載到新的數據庫中。當你遇到下面的情形時,你可以考慮用AUL進行最后的數據恢復:
行最后的數據恢復:
(1)丟失系統表空間文件.
(2)系統表空間文件損壞.
(3)表空間刪除了但數據文件還存在.
(4)表被刪除但那部份空間還沒有被重用.
(5)使用權用"reuse storage"選項截斷(TRUNCATE)表.
(6)表被截斷, 但釋放出來的空間還沒有被其他對象重用.
從上面可以看出,當你不小心刪除或截斷了表又沒有備份時,首先要做的是停所有的數據庫應用,將表所在的數據文件作冷備份,以防止釋放出來的空間被覆,如果被新的記錄覆蓋了,那么無論誰都沒有辦法幫你恢復失去的數據了。從過去兩年的情況看,這樣的人為錯誤居然占多數。
AUL不完全免費
AUL 不是開源的,也不是完全免費的。為什么說他不是完全免費的呢?免費的AUL只能打開最多四個數據文件,並且每個文件只能讀取最前面的512MB 內容。
AUL的下載地址:
特別提示:
以上所列的三種工具,不到必不得以不要輕易嘗試,以上操作要慎重,否則后果更加嚴重。對於DBA來說,備份是基礎,且不能大意。牢記。
參考:
《Lfie is DUL without it》楊寶秋著
《AnySQL Unloader用戶指南》 樓方鑫著
《ODU使用指南》 熊軍著
http://www.mydul.net/cn/