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;
'IT관련' 카테고리의 다른 글
Oracle 샘플 스키마, DB유저 (Sample Schema, User) 생성 예제 (12cR2) (11) | 2019.12.20 |
---|---|
Oracle 샘플 스키마, DB유저 (Sample Schema, User) - HR, OE, PM, IX, SH, BI, CO (0) | 2019.12.20 |
Oracle Text 인덱스 생성/삭제시 Error ORA-29855, ORA-20000, DRG-50857, DRG-10502, DRG-10507 (0) | 2019.12.18 |
오라클 SQL문에서 like 문 처리 샘플 ( %, _ ) (0) | 2019.12.13 |
Oracle Text (오라클 텍스트) - "like" SQL문 빠르게 하는 방법 (2) | 2019.12.13 |