Если вы используете полнотекстовый поиск в Oracle Database, то важно иметь в виду, что настройки для индекса нужно обязательно создавать перед созданием индекса, то есть строки вида:
1 2 3 4 |
begin ctx_ddl.create_preference('COMMON_DIR','FILE_DATASTORE'); ctx_ddl.set_attribute('COMMON_DIR','PATH','/mydocs'); end; |
должны идти перед строками вида:
1 2 3 |
create index myindex on mytable(docs) indextype is ctxsys.context parameters ('datastore COMMON_DIR'); |
Если вы сначала создадите индекс, а лишь потом создадите настройки, то при создании индекса Oracle вернёт ошибку, но сам индекс создаст, и этот индекс будет битым.
После создания подобного битого индекса попытка вставить данные в таблицу будет приводить к ошибке:
1 |
ORA-29861: domain index is marked LOADING/FAILED/UNUSABLE |
Эта ошибка в последствии не исчезнет, даже если создать настройки ещё раз. Состояние подобного индекса можно проверить командой:
1 2 |
select index_name, status, domidx_opstatus from all_indexes where table_name='mytable' and owner='myusername'; |
У индекса будет стоять ошибочный статус в domidx_opstatus.
С таким сломанным индексом команда:
1 |
ALTER INDEX mytable.myindex REBUILD ONLINE; |
Будет возвращать ошибку. Выправить ситуацию можно только удалением этого сломанного индекса командой:
1 |
DROP INDEX mytable.myindex; |
И последующим созданием индекса с нуля:
1 2 3 |
create index myindex on mytable(docs) indextype is ctxsys.context parameters ('datastore COMMON_DIR'); |