以前AUL要恢复IOT, 总是指导人家看这篇文章, 因为IOT表对象本身是没有数据段的, 而是在索引中存放数据, 因此AUL需要先从OBJ$中找出表对象, 从COL$中取得表结构信息, 再从IND$中取得IOT表的主键索引信息和段的信息, 这是理想的情况. 因为用标准C语言来处理这些复杂的关系太累了, 所以没有实现, 如果这个IOT是分区的, 则可能还要复杂, 因为TABPART$和INDPART$也会被卷进来, 如果再有子分区呢?

    不过昨天晚上对非分区的IOT表作了一点改进, 因为创建非分区的IOT表时, 索引对象的ID总是表对象的ID再加上一, 有这种规律存在, 就可以稍作改进. DESC命令还是不能显示准确的信息.

AUL> desc sys.t_iottest

Storage(OBJ#=0 OBJD=0 TS=0 FILE=0 BLOCK=0 CLUSTER=0)
No. SEQ INT Column Name              Type
--- --- --- ------------------------ ----------------
  1   1   1 OBJID                    NUMBER(38) NOT NULL
  2   2   2 OBJNAME                  VARCHAR2(30)

    在AULOBJ.TXT文件中找一下这个测试的IOT表的信息吧.

C:\MYDUL>grep T_IOTTEST aulobj.txt
10136,0,T_IOTTEST,,2
10137,0,PK_T_IOTTEST,,1

    再在AUL中来直接进行恢复看看? 这下简单多了.

AUL> UNLOAD TABLE SYS.T_IOTTEST;
2007-08-17 10:14:20
Unload OBJD=10137 FILE=1 BLOCK=28569 CLUSTER=0 ...
2|C_OBJ#
3|I_OBJ#
4|TAB$
5|CLU$
......

    WindowsLinux上的软件已经更新.