본문 바로가기

IT관련

Oracle Text 인덱스 생성/삭제시 Error ORA-29855, ORA-20000, DRG-50857, DRG-10502, DRG-10507

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 유저에서 실행하면 됩니다.