IOT表中段的命名规律, 以及AUL对IOT的支持

    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
......

    感觉上有点不方便, 太复杂了.

发表留言: