AUL(MyDUL)工具简介
从2005年开始,AUL (MyDUL)已经为全球不同国家及地区的众多客户恢复了数十TB计的Oracle数据,从损坏的Oracle 8, Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g及Oracle ASM上为客户快速恢复数据. AUL(MyDUL)可以脱离Oracle运行环境,直接从数据文件中读取记录,与官方工具Oracle DUL具有同等功效并且功能更加丰富。当你遇到下列极端情况,并且没有有效备份(客户有备份动作,备份不起作用的情况也遇到过)用来恢复数据时, AUL(MyDUL)是往往是你最后的机会. 一直坚持“拯救数据,帮助客户”的原则!在最新版本AUL 6中, 可以直接访问Oracle ASM来恢复数据,或从Oracle ASM中将数据文件拷贝出来。
-
1. 完全丢失系统表空间
-
2. 系统表空间有坏块
-
3. 表空间被删除,但数据文件还存在
-
4. 表被删除后,马上停止操作,空间未被重用
-
5. 表被清空(Truncate)后马上停止操作,空间未被重用
-
6. 一个表空间丢失了部份文件,或文件中有坏块,无法自我修复
-
7. Oracle ASM存贮损坏,或Oracle ASM磁盘损坏
-
8. 其他无法正常打开数据库或无法查询数据的情况
AUL(MyDUL)功能列表
-
支持Oracle 8/8i/9i/10g/10g/11g等不同版本
-
直接访问Oracle ASM存贮,无需先将文件拷出来
-
从损坏的Oracle ASM中拷出数据文件到文件系统
-
支持普通表(Table)/聚族(Cluster)/索引组织表(IOT)
-
数据类型支持
-
NUMBER
-
DATE
-
CHAR
-
NCHAR
-
VARCHAR2
-
NVARCHAR2
-
RAW
-
LONG
-
LONG RAW
-
BINARY_FLOAT
-
BINARY_DOUBLE
-
TIMESTAMP
-
TIMESTAMP WITH TIME ZONE
-
可以将数据恢复成格式化文本文件,或者Oracle 8.1.7版本的DMP格式文件
-
在System表空间有效的情况下,可以自动生成SQL*Loader控制文件,方便数据装载
-
使用标准C语方编写,可以运行在Windows (VC6), Linux (gcc), Solaris (gcc)等不同平台上
-
支持跨平台交叉恢复,比如在Windows上也可以恢复AIX下的Oracle数据库
-
CLOB/BLOB支持
-
支持inline-lob, enable storage in row LOB和disable storage in row LOB.
-
支持不同CHUNK大小的CLOB/BLOB,同一个表不同的LOB CHUNK大小不支持.
-
CLOB/BLOB数据可以导出成独立的文件,或者DMP格式文件.
-
集成ICONV库,支持CLOB字符集转换.
-
无System表空间的CLOB/BLOB数据恢复.
-
从AUl 5版本开始支持压缩(Compress)表.
-
从AUl 5版本开始支持压缩(Compress)的索引组织表(IOT).
如果你没有丢失迭制文件, 则可以从视图V$DATABASE查询取得. 否则你需要手工从磁盘中根据存留的文件, 来列出所有的文件.
SQL> col name format a40
SQL> select file#,rfile#,name from v$datafile;
FILE# RFILE# NAME
---------- ---------- ----------------------------------------
1 1 C:\ORACLE\ORADATA\SYSTEM01.DBF
2 2 C:\ORACLE\ORADATA\UNDOTBS01.DBF
3 3 C:\ORACLE\ORADATA\SYSAUX01.DBF
4 4 C:\ORACLE\ORADATA\TEST01.DBF
5 5 C:\ORACLE\ORADATA\AULTEST01.DBF
创建一个AUL/MyDUL使用的配置文件
配置文件是一个文本文件, 你可以用任何文本编辑器编辑. 文件应当包括三个列(文件号,相对文件号,文件名), 中间以空格分隔. 我们将上面的记录拷贝到文件db10g.cfg中就可以了. 如果数据文件的文件头块没有损坏, 文件号和相对文件号这两列的值是无关紧要的, 在打开时会自动读取文件头进行修正; 文件中不能包括空格, 否则请重命令文件去掉空格.
C:\MYDUL>type db10g.cfg
0 0 C:\ORACLE\ORADATA\SYSTEM01.DBF
0 0 C:\ORACLE\ORADATA\UNDOTBS01.DBF
0 0 C:\ORACLE\ORADATA\SYSAUX01.DBF
0 0 C:\ORACLE\ORADATA\TEST01.DBF
0 0 C:\ORACLE\ORADATA\AULTEST01.DBF
在AUL/MyDUL中打开配置文件
AUL/MyDUL从这个配置文件中读取数据文件列表, 成功打开后并读取文件头, 叫正配置文件中错误的"文件号"和"相对文件号". 在这里我们虽然有5个文件, 但由于我们没有使用
正式的许可证号, 免费的许可证只能让我们打开前面的2个文件, 并只能读取每个文件前面的256M.
Register Code: 55E2-4639-864D-F8C3
AUL : AnySQL UnLoader(MyDUL) for Oracle 8/8i/9i/10g, Trial Version 3.1.9
(C) Copyright Lou Fangxin 2005-2006 (AnySQL.net), all rights reserved.
AUL> open db10g.cfg
* ts# fno rfn ver bsize blocks filename
- ---- ---- ---- --- ----- ---------- -----------------------------------
Y 0 1 1 a2 8192 32768 C:\ORACLE\ORADATA\SYSTEM01.DBF
Y 1 2 2 a2 8192 8192 C:\ORACLE\ORADATA\UNDOTBS01.DBF
Y 2 3 3 a2 8192 8192 C:\ORACLE\ORADATA\SYSAUX01.DBF
Y 4 4 4 a2 8192 3072 C:\ORACLE\ORADATA\TEST01.DBF
生成AUL/MyDUL的数据字典
AUL/MyDUL可以根据"SYS.USER$","SYS.OBJ$","SYS.TAB$","SYS.COL$"四个系统表中的记录来生成所需的数据字典, 有数据字典的情况下恢复要容易得多.
AUL> UNLOAD TABLE USER$;
2006-08-04 09:39:00
2006-08-04 09:39:00
AUL> UNLOAD TABLE OBJ$;
2006-08-04 09:39:07
2006-08-04 09:39:08
AUL> UNLOAD TABLE TAB$;
2006-08-04 09:39:12
2006-08-04 09:39:13
AUL> UNLOAD TABLE COL$;
2006-08-04 09:39:17
2006-08-04 09:39:18
AUL> ! dir AUL*.TXT
Volume in drive C has no label.
Volume Serial Number is 5CF4-08FE
使用LIST命令来生成恢复用的角本
命令"LIST TABLE 用户名 TO 角本文件名"可以用来生成恢复某个用户下所有表的AUL/MyDUL命令, 在这儿我省略了"TO 角本文件名", 将所有命令输出到屏幕上.
AUL> LIST TABLE MYDUL
UNLOAD TABLE MYDUL.T_PART TO T_PART.txt;
UNLOAD TABLE MYDUL.T_OBJECT TO T_OBJECT.txt;
UNLOAD TABLE MYDUL.T_LOB TO T_LOB.txt;
UNLOAD TABLE MYDUL.T_CLOB TO T_CLOB.txt;
UNLOAD TABLE MYDUL.T_PART PARTITION P2 TO T_PART_P2.txt;
UNLOAD TABLE MYDUL.T_PART PARTITION P1 TO T_PART_P1.txt;
运行恢复命令来恢复数据
我们来偿试恢复分区表"T_PART", 对于分区表一个分区会有一条命令. 在这儿省略了"TO 文件名", 因此所有记录直接显示在屏幕上.
AUL> UNLOAD TABLE MYDUL.T_PART PARTITION P2;
2006-08-04 09:40:42
Unload OBJD=9928 FILE=4 BLOCK=19 CLUSTER=0 ...
150,1
2006-08-04 09:40:42
AUL> UNLOAD TABLE MYDUL.T_PART PARTITION P1;
2006-08-04 09:40:51
Unload OBJD=9927 FILE=4 BLOCK=11 CLUSTER=0 ...
50,1
2006-08-04 09:40:51
实例:
(1) Dbcfg 文件内容:
1 1 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ETA\SYSTEM01.DBF
2 2 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ETA\UNDOTBS01.DBF
3 3 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ETA\SYSAUX01.DBF
4 4 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ETA\USERS01.DBF
5 5 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ETA\backup.DBF
(2) 字符集:
852 = zhs16gbk
Set charset 852
(3) set licence 注册号
(4)
SET BLOCK_SIZE {2048 | 4096 | 8192 | 16384 | 32768}
SET BYTE_ORDER {BIG | LITTLE}
SET DELETED_ROW {TRUE | FALSE}
SET COMMITED_ONLY {TRUE | FALSE}
SET FIELD_TAG field_tag
SET RECORD_TAG record_tag
SET CACHE_SIZE kbytes (64 - 8192)
SET OUTPUT_STYLE {TXT | DMP}
SET CHARSET charsetid
SET NLSCHARSET charsetid
SET FIXED_CHARSET {true | false}
SET BLOCK_CHECK {0 | 1}
SET HEAD_SIZE header size (default 0)
SET VERBOSE {0 | 1}
SET CLOB_EDIAN {BIG | LITTLE}
SET LOB_CONVERT {0:NONE | 1:GBK | 2:UTF8}
SET LOB_STORAGE {0:INLINE | 1:FILE | 2:NONE}
SET MAXLOBDIR values between 100 and 2000
SET MAXCHAINS integer value
SET BIGFILE {Yes | NO}
SET ICONV_NCHAR from_iconv_charset to_iconv_charset
SET ICONV_NCLOB from_iconv_charset to_iconv_charset
SET ICONV_CLOB from_iconv_charset to_iconv_charset
相关参数可以进行设置
* ts# rfn ver bsize blocks sizemb filename
- ---- ---- --- ----- ---------- -------- -----------------------------------
Y 0 1 a2 8192 62720 0 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ETA\S
YSTEM01.DBF
Y 1 2 a2 8192 12800 0 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ETA\U
NDOTBS01.DBF
Y 2 3 a2 8192 32000 0 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ETA\S
YSAUX01.DBF
Y 4 4 a2 8192 50720 0 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ETA\U
SERS01.DBF
Y 6 5 a2 8192 640000 0 F:\ORADATA\backup.DBF
AUL> unload table user$
2 ;
2014-06-08 13:12:39
2014-06-08 13:12:39
AUL> unload table obj$;
2014-06-08 13:12:49
2014-06-08 13:12:50
AUL> unload table tab$;
2014-06-08 13:13:04
2014-06-08 13:13:04
AUL> unload table col$;
2014-06-08 13:13:15
2014-06-08 13:13:16
AUL>list table system
AUL>list table ics8000