oracle - 如何为分区的 LOB 索引指定 INITRANS?

标签 oracle indexing blob deadlock oracle11gr2

我有一个带有 BLOB 列的分区表。当多个用户从该表中删除每个事务的多行时,我们经常遇到 ORA-00060 死锁-s,根据 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 没有。)

关于oracle - 如何为分区的 LOB 索引指定 INITRANS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945129/

相关文章:

java - 使用 Hibernate Criteria 选择附加信息

java - 忽略重音的 QueryDSL

java - 将不在表中的列提取到结果集中

for-loop - Julia 中的 for 循环 - 遍历整个索引

postgresql - 不使用 Postgres 索引

php - 提取 MySQL Blob 并添加到 PHP 数组?

mysql - 如何自动将 MySQL DDL 转换为 Oracle DDL?

java - Z阶曲线java实现

php - 关于使用 Php 将小图像上传到 MySQL 数据库中的 blob 字段的问题。

javascript - HTML5/Javascript - DataURL 到 Blob 和 Blob 到 DataURL