此次更新内容:
1, 更改"UNLOAD OBJECT"命令的默认列类型为"RAW",原先为跳过没有指定的列.
2, 提高"SCAN TABLE"命令中列类型自动猜测的准确度.
3, 改变"SCAN TABLE"命令实现的逻辑过程, 获得更好更全的输出.
现在我们在一个2M的表空间中创建一个小表,如下所示:
CREATE TABLE TEST
(
COL1 CHAR(10),
COL2 VARCHAR2(10),
COL3 DATE, COL4 NUMBER,
COL5 BINARY_FLOAT,
COL6 BINARY_DOUBLE
);
INSERT INTO TEST VALUES('A','A1',SYSDATE,1.11,1.0,1.0);
INSERT INTO TEST VALUES('B','B1',SYSDATE,2.11,2.0,2.02);
INSERT INTO TEST VALUES('C','C1',SYSDATE,3.11,3.0,3.02);
INSERT INTO TEST VALUES('D','D1',SYSDATE,4.11,4.0,4.02);
INSERT INTO TEST VALUES('E','E1',SYSDATE,5.11,5.0,5.02);
接下来我们用不带列类型信息的"UNLOAD OBJECT"命令来恢复数据, 可以看到打出了所有列的二进制值:
AUL> open db10g.cfg
* ts# fno rfn ver bsize blocks filename
- ---- ---- ---- --- ----- ---------- -----------------------------------
Y 5 5 5 a2 8192 256 C:\ORACLE\ORADATA\AULTEST01.DBF
AUL> SCAN HEADER
2006-08-11 22:59:29
RDBA=0x0140000b(5/11),type=0x23,fmt=0xa2,seq=0x02,flag=0x04
seg/obj=0x000026ef=9967
2006-08-11 22:59:29
AUL> UNLOAD OBJECT 9967;
2006-08-11 22:59:45
41202020202020202020,4131,786a080b17012d,c1020c,bf800000,bff000...
42202020202020202020,4231,786a080b17013c,c1030c,c0000000,c00028...
43202020202020202020,4331,786a080b17020d,c1040c,c0400000,c00828...
44202020202020202020,4431,786a080b17021c,c1050c,c0800000,c01014...
45202020202020202020,4531,786a080b170227,c1060c,c0a00000,c01414...
2006-08-11 22:59:45
接下来测试一下"SCAN TABLE"命令,这个命令可以用来恢复没有SYSTEM表空间的文件, 可以下载我做实验用的2M表空间文件做测试, 如下所示:
AUL> SCAN TABLE
2006-08-11 23:02:20
RDBA=0x0140000f(5/15),type=0x06,fmt=0xa2,seq=0x07,flag=0x06
seg/obj=0x000026ef=9967,csc=0x0000.000996dc,itc=2,typ=1 - DATA
tab#= 0 nrow= 5 offs= 0
41202020202020202020,4131,786a080b17012d,c1020c,bf800000,bff000...
42202020202020202020,4231,786a080b17013c,c1030c,c0000000,c00028...
43202020202020202020,4331,786a080b17020d,c1040c,c0400000,c00828...
44202020202020202020,4431,786a080b17021c,c1050c,c0800000,c01014...
45202020202020202020,4531,786a080b170227,c1060c,c0a00000,c01414...
Column Count=6
CMD:UNLOAD OBJECT 9967 CLUSTER 0 COLUMN VARCHAR VARCHAR DATE NUMBER BINARY_FLOAT BINARY_DOUBLE
2006-08-11 23:02:20
AUL> UNLOAD OBJECT 9967 CLUSTER 0 COLUMN VARCHAR VARCHAR DATE NUMBER BINARY_FLOAT BINARY_DOUBLE;
2006-08-11 23:07:03
A ,A1,2006-08-11 22:00:44,1.11,1.000000,1.000000
B ,B1,2006-08-11 22:00:59,2.11,2.000000,2.020000
C ,C1,2006-08-11 22:01:12,3.11,3.000000,3.020000
D ,D1,2006-08-11 22:01:27,4.11,4.000000,4.020000
E ,E1,2006-08-11 22:01:38,5.11,5.000000,5.020000
2006-08-11 23:07:03
在AUL/MyDUL最新版中, 没有SYSTEM的恢复也是如此简单, 下载试试吧?