기술 정보
home
채널 소개
home

'old_doc_id_max == doc_id_max - new_doc_count' 조건으로 인한 Internal Error 발생

문서 유형
장애 해결
분야
패치/업그레이드
키워드
lock
sync
적용 제품 버전
6FS06
1 more property

현상

'old_doc_id_max == doc_id_max - new_doc_count' 조건에서 Internal Error가 발생합니다.
재현 시나리오
테이블 및 인덱스 생성, 텍스트 설정을 구성합니다.
CREATE TABLE T145028 ( c1 varchar(2000), c2 number, c3 varchar(2000), c4 varchar(2000) ) PARTITION BY RANGE("C2") ( PARTITION "P1" VALUES LESS THAN (1000), PARTITION "P2" VALUES LESS THAN (2000), PARTITION "P3" VALUES LESS THAN (3000), PARTITION "P4" VALUES LESS THAN (4000), PARTITION "P5" VALUES LESS THAN (5000), PARTITION "P6" VALUES LESS THAN (6000), PARTITION "P7" VALUES LESS THAN (7000), PARTITION "P8" VALUES LESS THAN (8000), PARTITION "P9" VALUES LESS THAN (9000), PARTITION "P10" VALUES LESS THAN (100000), PARTITION "P11" VALUES LESS THAN (200000), PARTITION "P12" VALUES LESS THAN (300000), PARTITION "P13" VALUES LESS THAN (400000), PARTITION "P14" VALUES LESS THAN (1000000), PARTITION "P15" VALUES LESS THAN (2000000), PARTITION "P16" VALUES LESS THAN (4000000), PARTITION "P17" VALUES LESS THAN (8000000), PARTITION "P_MAX" VALUES LESS THAN (MAXVALUE) ) / EXEC text_DDL.CREATE_PREFERENCE('YW','BASIC_WORDLIST'); EXEC text_DDL.SET_ATTRIBUTE('YW','wildcard_maxterms', 0); create index T145028_IDX on T145028 (C3) indextype is ctxsys.context PARAMETERS ('Wordlist YW stoplist CTXSYS.EMPTY_STOPLIST SYNC(ON COMMIT)');
SQL
복사
아래 SQL문들을 여러 세션에서 동시에 무작위로 실행합니다.
insert into T145028 select level||'A', level, 'AB '||level||' CD', 'AAA' from dual connect by level<100000; insert into T145028 select level||'A', level, 'AB '||level||' CD', 'AAA' from dual connect by level<1000000; update T145028 set c3 = c3||'A' where c2 <100000; update T145028 set c3 = c3||'A' where c2 <10; delete from T145028 where 1028< c2 and c2 <9999; commit;
SQL
복사

원인

sync on commit 옵션인 context Index를 사용하는 도중, 커밋이 발생하면서 동기화를 수행하게 되는데, 이때 필요한 Lock을 획득하지 못해 문제가 발생한 것입니다.

해결

sync on commit 옵션인 context Index를 사용하는 도중, 여러 세션이 동시에 동기화를 수행할 경우 필요한 Lock을 획득하도록 개선한 패치를 적용합니다.