У меня есть секционированная таблица со столбцом BLOB. Когда несколько строк за транзакцию удаляются из этой таблицы несколькими пользователями, мы часто сталкиваемся с взаимоблокировками ORA-00060, которые, согласно файлам trc, вызваны взаимоблокировками ITL в разделах индекса LOB. Поэтому я хочу воссоздать таблицу с более высоким индексом LOB INITRANS, чем значение по умолчанию 2. Я могу сделать это для неразделенной таблицы с create table ... ( ... lob (...) store as ... ( ... index ... (... initrans 10 ... ) ) )
, но для многораздельной таблицы Oracle говорит: «ORA-22879: нельзя использовать предложение LOB INDEX для секционированных столы». Есть ли другой способ установить INITRANS для секционированного индекса LOB?
(Обновление: обратите внимание, что мне не нужно ИЗМЕНЯТЬ существующую таблицу, я могу воссоздать ее с нуля. Обычно это проще.)
Редактирование 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)