AUL对于IOT表的恢复是支持的, 但需要手工修改一下生成的字典信息. 首先来看一下IOT表的数据段的命名规律. 考虑下面两个IOT表:
CREATE TABLE T_IOT
(
COL1 NUMBER NOT NULL PRIMARY KEY,
COL2 VARCHAR2(20)
)
ORGANIZATION INDEX;
CREATE TABLE T_IOT2
(
COL1 NUMBER NOT NULL CONSTRAINT PK_T_IOT2 PRIMARY KEY,
COL2 VARCHAR2(20)
)
ORGANIZATION INDEX;
发现如果没有指定主键的约束名, 则命名规律为"SYS_IOT_TOP_表对象ID", 如果指定了约束, 则是约束名, 也可以发现, IOT段的对象ID刚好是表对象的ID再加一(明天测试一下分区的IOT表), 如下所示:
OBJECT_ID OBJECT_NAME
---------- ------------------------------
10077 SYS_IOT_TOP_10076
10076 T_IOT
10078 T_IOT2
10079 PK_T_IOT2
AUL目前无法将表对象和IOT段对象关联起来, 因此无法取得一个IOT表的数据对象ID(Data Object ID), 需要手工修改一下AULTAB.TXT文件, 将IOT段的第一列对象ID改为IOT表的ID, 就可以了:
C:\MYDUL>grep SYS_IOT_TOP_10076 AULOBJ.TXT
10077,25,SYS_IOT_TOP_10076,,1
C:\MYDUL>grep T_IOT AULOBJ.TXT
10076,25,T_IOT,,2
C:\MYDUL>grep 10077 AULTAB.TXT
10077,10077,4,4,2451
需要将AULTAB.TXT中的这一行拷贝一下, 并将第一列改为10076. 如下所示:
C:\MYDUL>grep 10077 AULTAB.TXT
10077,10077,4,4,2451
10076,10077,4,4,2451
接下来就可以用AUL来进行恢复了:
AUL> UNLOAD TABLE ANYSQL.T_IOT;
2007-01-05 21:13:55
Unload OBJD=10077 FILE=4 BLOCK=2451 CLUSTER=0 ...
9771|TIME_DIM
10026|T_IMAGE
10027|SYS_LOB0000010026C00002$$
10046|T_HASHLOB
10047|T_HASHLOB
10048|T_HASHLOB
......
感觉上有点不方便, 太复杂了.