본문 바로가기

IT관련

Oracle Text (오라클 텍스트) - Text Index 관리할때 주의사항

Oracle Text 인덱스를 사용할 때 주의해야 할 부분이 있습니다.

 

Text Index 를 만들고나서 테이블에 데이터가 추가되는 경우에 인덱스에 자동으로 반영되지 않습니다.

이 부분이 일반 인덱스와 좀 다른 점입니다.

 

일반 인덱스의 경우에는 테이블에 데이터가 추가되면 그 즉시 인덱스에도 함께 반영되는데, Text 인덱스는 아래와 같이 반영되지 않아서 조회가 되지 않는 상황이 발생합니다.

 

 

이걸 일반 인덱스처럼 똑같이 만들어 줄수도 있고, 특정 시점에 비동기적으로 수행되게 할 수도 있고,

완전 수동으로 관리할 수도 있습니다.

 

각각의 구문은 다음과 같습니다.

 


SQL> create index T1_IDX1 on T1(text) indextype is ctxsys.context parameters ('sync(on commit)');
     --> 테이블에 데이터 추가되면 바로 인덱스에 반영되게 할때

SQL> create index T1_IDX1 on T1(text) indextype is ctxsys.context parameters ('sync(every sysdate+1/24/60)');
     --> 1분에 한번씩 동기화 되도록 할때

SQL> exec ctx_ddl.sync_index('T1_IDX1');
     --> 수동으로... 변경이 있을때마다 사용자가 수동으로 실행..

 

Text Index 는 일반 인덱스에 비해 좀더 작업량이 많습니다.

텍스트 데이터를 구문분석해서 내부적으로 키워드 테이블을 만들어야 하기 때문에 매번 데이터가 발생할 때마다 갱신하는 식으로 하면 테이블에 DML 이 느려질 수 있습니다. 그래서 이런식으로 Sync 옵션을 제공하는 것 같습니다.

 

그러면, 수동으로 Sync 해볼까요?

 

 

네, 이제 잘 조회되네요..

 

 

근데, 이거 아래와 같이 에러가 날 수 있습니다. scott 유저에 ctx_ddl 패키지 실행권한이 없어서 에러가 납니다.

 


SQL> exec ctx_ddl.sync_index('T1_IDX1');
BEGIN ctx_ddl.sync_index('T1_IDX1'); END;
      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'CTX_DDL' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


/*
   위와 같은 에러 발생시 sys 유저에서 scott 유저에게 아래와 같이 권한을 부여해주면 됩니다.
*/
grant ctxapp to scott;
grant execute on ctx_ddl to scott;

 

 

참고> 오라클 Text Index 사용 방법/예제