当遇到分区表的LOB字段时, 不能直接进行恢复, 需要修改一下AULOBJ.TXT中的LOB索引分区的名称, 这是由于LOB索引的分区名和表的分区名不同引起的, 而我的程序是假定是具有相同的分区名的. 请看下面的演示, 先创建一个有LOB字段的分区表:
SQL> CREATE TABLE T_HASHLOB (COL1 NUMBER, COL2 CLOB)
2 LOB(COL2) STORE AS (DISABLE STORAGE IN ROW)
3 PARTITION BY HASH(COL1) PARTITIONS 2;
Table created.
接下来插入几条记录, 交提交, 到SYS用户下进行CHECKPOINT. 在AUL 4中重新UNLOAD系统数据字典后, 用DESC来看一下T_HASHLOB表的情况:
AUL> desc anysql.t_hashlob
Storage(OBJ#=0 OBJD=0 TS=0 FILE=0 BLOCK=0 CLUSTER=0)
No. SEQ INT Column Name Type
--- --- --- ------------------- ----------------
1 1 1 COL1 NUMBER
2 2 2 COL2 CLOB (SYS_IL0000010046C00002$$)
接下来要找出表和索引的对象信息, 用grep工具来做吧.
C:\MYDUL>grep -i t_hashlob AULOBJ.TXT
10048,25,T_HASHLOB,SYS_P28,19
10047,25,T_HASHLOB,SYS_P27,19
10046,25,T_HASHLOB,,2
C:\MYDUL>grep -i "SYS_IL0000010046C00002\$\$" AULOBJ.TXT
10054,25,SYS_IL0000010046C00002$$,SYS_IL_P32,20
10053,25,SYS_IL0000010046C00002$$,SYS_IL_P31,20
10052,25,SYS_IL0000010046C00002$$,,1
将LOB索引分区的分区名改成和表一致:
10054,25,SYS_IL0000010046C00002$$,SYS_P28,20
10053,25,SYS_IL0000010046C00002$$,SYS_P27,20
接下来就可以进行恢复了, 只要在UNLOAD命令中加上"PARTITION 分区名"就可以了.
AUL> set lob_convert 1
Current LOB_CONVERT is : 1-GBK
AUL> set clob_edian big
Current CLOB_EDIAN is : BIG
AUL> unload table anysql.t_hashlob partition SYS_P27;
2006-12-25 10:59:01
Unload OBJD=10047 FILE=4 BLOCK=8291 CLUSTER=0 ...
2|part 2
2006-12-25 10:59:02
AUL> unload table anysql.t_hashlob partition SYS_P28;
2006-12-25 10:59:04
Unload OBJD=10048 FILE=4 BLOCK=8299 CLUSTER=0 ...
1|part 1
2006-12-25 10:59:04
程序越来越复杂, 越来越难维护了.
留言 (1)
这个该奖励一支小红花!
Posted by boypoo | Dec 26, 2006 6:56 PM