通过试验, 发现LOB的一个CHUNK中的所有块必须是在一个Extent中的, 并且是连续的, 不相信的话你可以试试能不能指定CHUNK的大小的值为大于表的Next Extent的值? 基于这个规律, 在AUL 4中增加了对CHUNK的有限支持. 下面上用于测试的两张表, 只有一个字段, 为CLOB类型, 表中只有有一条记录, 内容相同:
SQL> SELECT TABLE_NAME,COLUMN_NAME,CHUNK FROM USER_LOBS;
TABLE_NAME COLUMN_NAME CHUNK
--------------- ------------ ----------
T_CHUNK2 COL1 32768
T_CHUNK1 COL1 16384
接下来用新增的CHUNK选项指定表中所有LOB的CHUNK大小, 单位是数据块, 默认值是1, 从这儿我们可以看出如果一个表中有多个LOB字段, 且CHUNK大小不一样, AUL 4现在还是不支持的. 下面我们将LOB内容导出成独立的文件:
AUL> set clob_edian big
Current CLOB_EDIAN is : BIG
AUL> set lob_storage 1
Current LOB_STORAGE is : 1-FILE
AUL> set lob_convert 1
Current LOB_CONVERT is : 1-GBK
AUL> unload table anysql.t_chunk1 chunk 2;
2006-12-19 12:58:18
Unload OBJD=9986 FILE=4 BLOCK=5243 CLUSTER=0 ...
LOB_0100147C_1FE8.dat
2006-12-19 12:58:18
AUL> unload table anysql.t_chunk2 chunk 4;
2006-12-19 12:58:25
Unload OBJD=9989 FILE=4 BLOCK=5523 CLUSTER=0 ...
LOB_01001594_1FE8.dat
2006-12-19 12:58:25
上面的命令生成了两个文件: LOB_0100147C_1FE8.dat和LOB_01001594_1FE8.dat, 下面在OS上看一下文件大小, 并和原始数据进行文本比较:
C:\MYDUL>DIR LOB*
Volume in drive C has no label.
Volume Serial Number is 5CF4-08FE
Directory of C:\MYDUL
2006-12-19 12:58 63,681 LOB_0100147C_1FE8.dat
2006-12-19 12:58 63,681 LOB_01001594_1FE8.dat
2 File(s) 127,362 bytes
0 Dir(s) 9,507,389,440 bytes free
C:\MYDUL>diff LOB_0100147C_1FE8.dat c:\anysql\tnsnames.ora
C:\MYDUL>diff LOB_01001594_1FE8.dat c:\anysql\tnsnames.ora
C:\MYDUL>
希望可以在将来完全解决CHUNK的问题.
留言 (3)
期待ing.
Posted by jametong | Dec 19, 2006 1:37 PM
有点缺限会更美, 暂时告一段落了.
除非是有Bug, 否则不动了.
Posted by anysql | Dec 19, 2006 1:44 PM
分区表的LOB还不支持, 还是有很多东西没有搞定啊.
Posted by anysql | Dec 19, 2006 6:01 PM