oracle – 如何为分区LOB索引指定INITRANS?
发布时间:2020-12-12 13:14:41 所属栏目:百科 来源:网络整理
导读:我有一个带有BLOB列的分区表.当多个用户从该表中删除每个事务多行时,我们经常遇到ORA-00060死锁,根据trc文件,死锁是由LOB索引分区中的ITL死锁引起的.所以我想重新创建具有比默认值2更高的LOB索引INITRANS的表.我可以使用create table …(… lob(…)store as
我有一个带有BLOB列的分区表.当多个用户从该表中删除每个事务多行时,我们经常遇到ORA-00060死锁,根据trc文件,死锁是由LOB索引分区中的ITL死锁引起的.所以我想重新创建具有比默认值2更高的LOB索引INITRANS的表.我可以使用create table …(… lob(…)store as …(. .. index …(… initrans 10 …))),但对于分区表,Oracle说
“ORA-22879:不能对分区表使用LOB INDEX子句”.有没有其他方法可以为分区LOB索引设置INITRANS? (更新:请注意,我不需要更改现有表,我可以从头开始重新创建它.这通常更容易.) jonearles的编辑如下: 以下是常规方法不起作用的示例: create table test1(a number,b clob) partition by range (a) (partition p1 values less than (1)); select * from dba_indexes where owner = user and table_name = 'TEST1'; --ORA-22864: cannot ALTER or DROP LOB indexes alter index SYS_IL0000111806C00002$$initrans 3; 有趣的是,指数DDL看起来很奇怪.下面的代码不会运行 – 索引中没有表达式,括号甚至没有关闭. select dbms_metadata.get_ddl('INDEX','SYS_IL0000111806C00002$$') from dual; CREATE UNIQUE INDEX "JHELLER"."SYS_IL0000111806C00002$$" ON "JHELLER"."TEST1" ( PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE( BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) LOCAL (PARTITION "SYS_IL_P19289" PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING STORAGE( INITIAL 65536 NEXT 1048576 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "USERS",PARTITION "SYS_IL_P19290" PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING STORAGE( INITIAL 65536 NEXT 1048576 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "USERS" ) PARALLEL (DEGREE 0 INSTANCES 0) 解决方法Oracle技术支持说我不能为分区LOB索引指定INITRANS.但是,他们也注意到使用SECUREFILE选项和DEDUPLICATE LOB选项(我们这样做)可能是导致问题的原因.所以我放弃了DEDUPLICATE LOB(只是为了确定,用KEEP_DUPLICATES替换它),现在LOB索引死锁已经消失了! (我已经编写了一些压力测试,并且使用DEDUPLICATE LOB可以在几分钟内导致数十个死锁错误,但是没有使用KEEP_DUPLICATES.)(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |