AUL do support IOT table, but need some extra steps to modify dictionary information unloaded by AUL. Let's start with two demo tables:
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;
If we don't specify the constraint name of primary key constraint of IOT table, the data segment name looks like "SYS_IOT_TOP_objid". If we specify a constraint name, the constraint name would be the segment name of IOT table. And the object id of the IOT index should be equal to object id of table plus 1. I will test the partitioned IOT tables later. Then I query the object id and the IOT segment name from the database with SQL*Plus, as following:
OBJECT_ID OBJECT_NAME
---------- ------------------------------
10077 SYS_IOT_TOP_10076
10076 T_IOT
10078 T_IOT2
10079 PK_T_IOT2
The problem existing is that AUL cannot match the table name to the IOT segment name, and then cannot get the data object id of IOT tables. So we need to modify the rows in AULTAB.TXT file for the IOT segment, we need to change the object id (first column) of IOT segment, it should be equal to IOT table's object 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
I will copy the a row, and then change the object id of IOT segment to 10076 (the IOT table's object id).
C:\MYDUL>grep 10077 AULTAB.TXT
10077,10077,4,4,2451
10076,10077,4,4,2451
Then we could start to recovery with 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
......
It seems complex, I should change it. But make change is not easy, maybe later I will make it perfect.