Indice CTXSYS.CONTEXT
Testato su Oracle 9i - 9.2.0.8.0
Durante l'esecuzione di una dml su una colonna di una tabella compare il seguente errore:
ORA-29861: domain index is marked LOADING/FAILED/UNUSABLE
L'errore è legato alla presenza di un indice su quella colonna di tipo CTXSYS.CONTEXT che risulta essere in stato DOMIDX_OPSTATUS = FAILED cioè che c'è un errore nella dml eseguita sul dominio dell'indice.
SQL> create index u01.t2044r_descrizione_ctx on u01.t2044r_anagrafiche (descrizione)
indextype is CTXSYS.CONTEXT
PARAMETERS('LEXER DEFAULT_LEXER');
Il parametro LEXER indica una preferenza relativa al linguaggio del testo che varrà indicizzato.
Query di riferimento
SELECT owner, index_name, index_type, status, domidx_status, domidx_opstatus ,table_name, table_owner
FROM dba_indexes
where index_name='T2044R_DESCRIZIONE_CTX'
Gli indici di tipo ConText, noti come Oracle Text e interMedia Text, è una tecnologia di indicizzazione di testi che permette di interrogare testi come Word, PDF, XML, HTML o semplici documenti di testo.
Dopo aver droppato l'indice e ricreato compare il messaggio:
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-10700: preference does not exist: DEFAULT_LEXER
L'errore è dovuto alla mancata corrispondenza tra la preferenze DEFAULT_LEXER e lo schema owner dell'indice.
select * from ctxsys.ctx_preferences
where pre_name in( 'DEFAULT_LEXER','DEFAULT_WORDLIST')
SELECT owner, index_name, index_type, status, domidx_status, domidx_opstatus ,table_name, table_owner
FROM dba_indexes
where index_name='T2044R_DESCRIZIONE_CTX'
select * from ctxsys.ctx_preferences
where pre_name in( 'DEFAULT_LEXER','DEFAULT_WORDLIST')
Durante l'esecuzione di una dml su una colonna di una tabella compare il seguente errore:
ORA-29861: domain index is marked LOADING/FAILED/UNUSABLE
L'errore è legato alla presenza di un indice su quella colonna di tipo CTXSYS.CONTEXT che risulta essere in stato DOMIDX_OPSTATUS = FAILED cioè che c'è un errore nella dml eseguita sul dominio dell'indice.
SQL> create index u01.t2044r_descrizione_ctx on u01.t2044r_anagrafiche (descrizione)
indextype is CTXSYS.CONTEXT
PARAMETERS('LEXER DEFAULT_LEXER');
Il parametro LEXER indica una preferenza relativa al linguaggio del testo che varrà indicizzato.
Query di riferimento
SELECT owner, index_name, index_type, status, domidx_status, domidx_opstatus ,table_name, table_owner
FROM dba_indexes
where index_name='T2044R_DESCRIZIONE_CTX'
Gli indici di tipo ConText, noti come Oracle Text e interMedia Text, è una tecnologia di indicizzazione di testi che permette di interrogare testi come Word, PDF, XML, HTML o semplici documenti di testo.
Dopo aver droppato l'indice e ricreato compare il messaggio:
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-10700: preference does not exist: DEFAULT_LEXER
L'errore è dovuto alla mancata corrispondenza tra la preferenze DEFAULT_LEXER e lo schema owner dell'indice.
select * from ctxsys.ctx_preferences
where pre_name in( 'DEFAULT_LEXER','DEFAULT_WORDLIST')
Soluzione:
SQL> conn /as sysdba
SQL> GRANT EXECUTE on CTX_DDL to U01;
SQL> conn U01
Enter password:
Connected.
SQL> begin
ctx_ddl.create_preference ( 'DEFAULT_LEXER', 'BASIC_LEXER' );
end;
SQL> begin
ctx_ddl.create_preference ( 'DEFAULT_WORDLIST', 'BASIC_WORDLIST' );
end;
SQL> drop index U01.T2044R_DESCRIZIONE_CTX;
SQL> CREATE INDEX U01.T2044R_DESCRIZIONE_CTX ON U01.T2044R_ANAGRAFICHE
(DESCRIZIONE)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS('LEXER DEFAULT_LEXER')
NOPARALLEL;
Verifica
FROM dba_indexes
where index_name='T2044R_DESCRIZIONE_CTX'
select * from ctxsys.ctx_preferences
where pre_name in( 'DEFAULT_LEXER','DEFAULT_WORDLIST')
SINCRONIZZAZIONE dell'indice
Quando viene creato un CONTEXT indice, occorre sincronizzare esplicitamente l'indice per mantenerlo aggiornato con eventuali inserimenti, aggiornamenti o eliminazioni nella tabella di testo. Oracle Text consente di farlo con la procedura CTX_DDL.SYNC_INDEX.
Estrarre la ddl di un Context Index
SYNC (MANUAL | EVERY "interval-string" | ON COMMIT)
Specifies SYNC for automatic synchronization of the CONTEXT index when there are inserts, updates or deletes to the base table. You can specify one of the following SYNC methods:
Per cambaire
SQL> exec CTX_DDL.REPLACE_INDEX_METADATA('IX1_PICNOT_AVVISI_CTX','REPLACE METADATA SYNC(MANUAL)');
Fino a quando non sincronizzi i dati sono visibili da
SQL> select pnd_index_name, pnd_rowid, pnd_timestamp from ctx_user_pending where pnd_index_name = 'T_IND';
Ad esempio sincronizziamo l'indice con 2Mb di memoria
begin
CTX_DDL.SYNC_INDEX ( 'myindex', '2M' );
end;
EXEC CTX_DDL.SYNC_INDEX ( 'myindex', '2M' );
SQL> select ctx_report.create_index_script('<schma>.<nome index>') from dual;
Specifies SYNC for automatic synchronization of the CONTEXT index when there are inserts, updates or deletes to the base table. You can specify one of the following SYNC methods:
Per cambaire
SQL> exec CTX_DDL.REPLACE_INDEX_METADATA('IX1_PICNOT_AVVISI_CTX','REPLACE METADATA SYNC(MANUAL)');