Oracle Text Index 생성 또는 삭제 할때 아래와 같은 에러를 만나는 경우가 있습니다.
분명히 처음에는 잘 되었었는데, 다시 지웠다 만들다 보면 이런 에러를 만나곤 합니다.
SQL> create index T1_IDX1 on T1(text) indextype is ctxsys.context;
create index T1_IDX1 on T1(text) indextype is ctxsys.context
*
ERROR at line 1:
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-50857: oracle error in drixmd.PurgeKGL
ORA-20000: Oracle Text error:
DRG-50857: oracle error in drdmlpo
ORA-20000: Oracle Text error:
DRG-10502: index 1082 does not exist
DRG-10507: duplicate index name: T1_IDX1
ORA-06512: at "CTXSYS.DRUE", line 171
ORA-06512: at "CTXSYS.DRVXMD", line 45
ORA-06512: at line 1
ORA-06510: PL/SQL: unhandled user-defined excepti
ORA-30576: ConText Option dictionary loading error
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "CTXSYS.DRIXMD", line 2360
ORA-00001: unique constraint (CTXSYS.DRC$IDX_
DRG-50610: internal error: kglpurge []
ORA-06512: at "CTXSYS.DRUE", line 171
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 316
Create Index 할때만 에러가 나는 것이 아니고, 다시 만들려고 Drop 할때도 비슷한 에러가 발생합니다.
SQL> drop index t1_idx1;
drop index t1_idx1
*
ERROR at line 1:
ORA-29856: error occurred in the execution of ODCIINDEXDROP routine
ORA-20000: Oracle Text error:
DRG-50857: oracle error in drixmd.PurgeKGL
ORA-20000: Oracle Text error:
DRG-50857: oracle error in drdmlpo
ORA-20000: Oracle Text error:
DRG-10502: index 1082 does not exist
DRG-10502: index SCOTT"."T1_IDX1 does not exist
ORA-06512: at "CTXSYS.DRUE", line 171
ORA-06512: at "CTXSYS.DRVXMD", line 45
ORA-06512: at line 1
ORA-06510: PL/SQL: unhandled user-defined
ORA-30576: ConText Option dictionary loading error
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "CTXSYS.DRIXMD", line 487
ORA-06510: PL/SQL: unhandled user-defined exce
DRG-50610: internal error: kglpurge []
ORA-06512: at "CTXSYS.DRUE", line 171
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 758
위 에러는 My Oracle Support 도큐먼트 문서(Doc ID 1679638.1)에 잘 정리되어 있습니다.
자세한 내용은 MOS 에서 위 문서를 참조하시기 바랍니다.
---------------------------------------------------------------------------------
1. drop existing text indexes
2. drop all $I/$K/$R/$N tables from all text indexes manually using DROP TABLE command.
3. drop all synonyms created for the text indexes
4. CTXSYS dictionary cleanup for orphaned index entries, ie
select idx_id from ctxsys.dr$index where idx_name='<인덱스명>';
1082 (e.g.)
delete from ctxsys.dr$index_value where IXV_IDX_ID = 1082;
delete from ctxsys.dr$index_object where IXO_IDX_ID = 1082;
delete from ctxsys.dr$index where idx_id = 1082;
commit;
---------------------------------------------------------------------------------
제 경우는, 1,2,3 번은 필요없었고, 4번만 수행해서 정상적으로 돌아왔습니다.
1082 번은 위처럼 조회해도 되고, 앞에서 Create Index, Drop Index 커맨드 실행할때 나오는 에러메시지에도 번호가 나옵니다. 그 번호를 사용하면 됩니다.
delete from ctxsys.~~ 커맨드는 sys 유저에서 실행하면 됩니다.
'IT관련' 카테고리의 다른 글
Oracle 샘플 스키마, DB유저 (Sample Schema, User) - HR, OE, PM, IX, SH, BI, CO (0) | 2019.12.20 |
---|---|
Oracle Text (오라클 텍스트) - Text Index 관리할때 주의사항 (0) | 2019.12.18 |
오라클 SQL문에서 like 문 처리 샘플 ( %, _ ) (0) | 2019.12.13 |
Oracle Text (오라클 텍스트) - "like" SQL문 빠르게 하는 방법 (2) | 2019.12.13 |
오라클 PK(Primary Key), FK(Foreign Key) 예제 (0) | 2019.12.12 |