CTX_ADM в PL/SQL. Введение
Пакет CTX_ADM предназначен для администрирования Oracle Text: установка системных параметров индексирования, сброс статусов автооптимизации, пометка «зависших» индексов как FAILED, восстановление словаря и т.п.
Важно: вызывать процедуры пакета CTX_ADM может только пользователь CTXSYS.
Эти процедуры управляют системными параметрами Oracle Text и обслуживанием индексов. Когда параметру присваивается значение (например, default_lexer), это должно быть имя уже существующей преференсы.
50 примеров использования CTX_ADM
Подготовка пользовательских преференс (используются в примерах)
BEGIN
CTX_DDL.CREATE_PREFERENCE('my_lexer','BASIC_LEXER');
CTX_DDL.CREATE_PREFERENCE('my_stop','BASIC_STOPLIST');
CTX_DDL.CREATE_PREFERENCE('my_wordlist','BASIC_WORDLIST');
CTX_DDL.CREATE_PREFERENCE('my_storage','BASIC_STORAGE');
CTX_DDL.CREATE_PREFERENCE('my_ds','DIRECT_DATASTORE');
CTX_DDL.CREATE_PREFERENCE('my_filter_text','AUTO_FILTER');
CTX_DDL.CREATE_PREFERENCE('my_filter_bin','AUTO_FILTER');
CTX_DDL.CREATE_PREFERENCE('my_filter_file','AUTO_FILTER');
CTX_DDL.CREATE_SECTION_GROUP('sg_html','HTML_SECTION_GROUP');
CTX_DDL.CREATE_SECTION_GROUP('sg_xml','XML_SECTION_GROUP');
CTX_DDL.CREATE_SECTION_GROUP('sg_text','BASIC_SECTION_GROUP');
END;1. Установка default_lexer
BEGIN
CTX_ADM.SET_PARAMETER('default_lexer','my_lexer');
END;2. Установка default_stoplist
BEGIN
CTX_ADM.SET_PARAMETER('default_stoplist','my_stop');
END;3. Установка default_wordlist
BEGIN
CTX_ADM.SET_PARAMETER('default_wordlist','my_wordlist');
END;4. Установка default_storage
BEGIN
CTX_ADM.SET_PARAMETER('default_storage','my_storage');
END;5. Установка default_datastore
BEGIN
CTX_ADM.SET_PARAMETER('default_datastore','my_ds');
END;6. Установка default_filter_text
BEGIN
CTX_ADM.SET_PARAMETER('default_filter_text','my_filter_text');
END;7. Установка default_filter_binary
BEGIN
CTX_ADM.SET_PARAMETER('default_filter_binary','my_filter_bin');
END;8. Установка default_filter_file
BEGIN
CTX_ADM.SET_PARAMETER('default_filter_file','my_filter_file');
END;9. Установка default_section_html
BEGIN
CTX_ADM.SET_PARAMETER('default_section_html','sg_html');
END;10. Установка default_section_xml
BEGIN
CTX_ADM.SET_PARAMETER('default_section_xml','sg_xml');
END;11. Установка default_section_text
BEGIN
CTX_ADM.SET_PARAMETER('default_section_text','sg_text');
END;12. Изменение ctx_doc_key_type (например, ROWID)
BEGIN
CTX_ADM.SET_PARAMETER('ctx_doc_key_type','ROWID');
END;13. Включение автооптимизации
BEGIN
CTX_ADM.SET_PARAMETER('auto_optimize','ENABLE');
END;14. Отключение автооптимизации
BEGIN
CTX_ADM.SET_PARAMETER('auto_optimize','DISABLE');
END;15. Увеличение MAX_INDEX_MEMORY (4G)
BEGIN
CTX_ADM.SET_PARAMETER('max_index_memory','4G');
END;16. Установка DEFAULT_INDEX_MEMORY (512M)
BEGIN
CTX_ADM.SET_PARAMETER('default_index_memory','512M');
END;17. Просмотр системных параметров (CTX_PARAMETERS)
SELECT * FROM CTX_PARAMETERS;18. Сброс статуса автооптимизации (RESET_AUTO_OPTIMIZE_STATUS)
BEGIN
CTX_ADM.RESET_AUTO_OPTIMIZE_STATUS;
END;19. Восстановление словаря (RECOVER)
BEGIN
CTX_ADM.RECOVER;
END;20. Пометка индекса как FAILED (MARK_FAILED)
BEGIN
CTX_ADM.MARK_FAILED('HR','IDX_DOCS_TEXT');
END;21. Перестроение индекса после MARK_FAILED (RESUME)
ALTER INDEX HR.IDX_DOCS_TEXT REBUILD PARAMETERS ('RESUME');22. Проверка дефолтного лексера после установки
SELECT par_name, par_value FROM CTX_PARAMETERS WHERE par_name='default_lexer';23. default_ctxcat_lexer
BEGIN
CTX_DDL.CREATE_PREFERENCE('my_cat_lex','BASIC_LEXER');
CTX_ADM.SET_PARAMETER('default_ctxcat_lexer','my_cat_lex');
END;24. default_ctxcat_stoplist
BEGIN
CTX_DDL.CREATE_PREFERENCE('my_cat_stop','BASIC_STOPLIST');
CTX_ADM.SET_PARAMETER('default_ctxcat_stoplist','my_cat_stop');
END;25. default_ctxcat_storage
BEGIN
CTX_DDL.CREATE_PREFERENCE('my_cat_store','BASIC_STORAGE');
CTX_ADM.SET_PARAMETER('default_ctxcat_storage','my_cat_store');
END;26. default_ctxcat_wordlist
BEGIN
CTX_DDL.CREATE_PREFERENCE('my_cat_wl','BASIC_WORDLIST');
CTX_ADM.SET_PARAMETER('default_ctxcat_wordlist','my_cat_wl');
END;27. default_ctxrule_lexer
BEGIN
CTX_DDL.CREATE_PREFERENCE('my_rule_lex','BASIC_LEXER');
CTX_ADM.SET_PARAMETER('default_ctxrule_lexer','my_rule_lex');
END;28. default_ctxrule_stoplist
BEGIN
CTX_DDL.CREATE_PREFERENCE('my_rule_stop','BASIC_STOPLIST');
CTX_ADM.SET_PARAMETER('default_ctxrule_stoplist','my_rule_stop');
END;29. default_ctxrule_storage
BEGIN
CTX_DDL.CREATE_PREFERENCE('my_rule_store','BASIC_STORAGE');
CTX_ADM.SET_PARAMETER('default_ctxrule_storage','my_rule_store');
END;30. default_ctxrule_wordlist
BEGIN
CTX_DDL.CREATE_PREFERENCE('my_rule_wl','BASIC_WORDLIST');
CTX_ADM.SET_PARAMETER('default_ctxrule_wordlist','my_rule_wl');
END;31. Соответствие памяти при создании индекса (256G)
BEGIN
CTX_ADM.SET_PARAMETER('max_index_memory','256G');
END;
CREATE INDEX idx_docs ON docs(text) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('memory 256G');32. Понижение DEFAULT_INDEX_MEMORY до 128M
BEGIN
CTX_ADM.SET_PARAMETER('default_index_memory','128M');
END;33. Проверка именно памяти в CTX_PARAMETERS
SELECT * FROM CTX_PARAMETERS WHERE par_name IN ('max_index_memory','default_index_memory');34. Установка default_lexer на системный DEFAULT_LEXER
BEGIN
CTX_ADM.SET_PARAMETER('default_lexer','DEFAULT_LEXER');
END;35. Возврат default_stoplist к DEFAULT_STOPLIST
BEGIN
CTX_ADM.SET_PARAMETER('default_stoplist','DEFAULT_STOPLIST');
END;36. Возврат default_wordlist к DEFAULT_WORDLIST
BEGIN
CTX_ADM.SET_PARAMETER('default_wordlist','DEFAULT_WORDLIST');
END;37. Назначение HTML section group по умолчанию
BEGIN
CTX_ADM.SET_PARAMETER('default_section_html','sg_html');
END;38. Назначение XML section group по умолчанию
BEGIN
CTX_ADM.SET_PARAMETER('default_section_xml','sg_xml');
END;39. Назначение TEXT section group по умолчанию
BEGIN
CTX_ADM.SET_PARAMETER('default_section_text','sg_text');
END;40. Присвоение text-фильтра AUTO_FILTER по умолчанию
BEGIN
CTX_ADM.SET_PARAMETER('default_filter_text','my_filter_text');
END;41. Присвоение binary-фильтра AUTO_FILTER по умолчанию
BEGIN
CTX_ADM.SET_PARAMETER('default_filter_binary','my_filter_bin');
END;42. Присвоение file-фильтра AUTO_FILTER по умолчанию
BEGIN
CTX_ADM.SET_PARAMETER('default_filter_file','my_filter_file');
END;43. MARK_FAILED для раздельной схемы/индекса
BEGIN
CTX_ADM.MARK_FAILED('SALES','IDX_ORDERS_TEXT');
END;44. Перестроение разделённого индекса (partition example)
ALTER INDEX SALES.IDX_ORDERS_TEXT REBUILD PARAMETERS ('RESUME');45. Сброс статуса автооптимизации перед анализом
BEGIN
CTX_ADM.RESET_AUTO_OPTIMIZE_STATUS;
END;46. Проверка CTX_AUTO_OPTIMIZE_STATUS (после сброса — пусто)
SELECT * FROM CTX_AUTO_OPTIMIZE_STATUS;47. Восстановление словаря после нештатных удалений
BEGIN
CTX_ADM.RECOVER;
END;48. Смена типа ключа для CTX_DOC на PRIMARY_KEY
BEGIN
CTX_ADM.SET_PARAMETER('ctx_doc_key_type','PRIMARY_KEY');
END;49. Просмотр текущих дефолтов для секций/лексера
SELECT * FROM CTX_PARAMETERS WHERE par_name LIKE 'default_%' OR par_name='ctx_doc_key_type';50. Контрольный набор: включить автооптимизацию и проверить
BEGIN
CTX_ADM.SET_PARAMETER('auto_optimize','ENABLE');
END;
SELECT par_name, par_value FROM CTX_PARAMETERS WHERE par_name='auto_optimize';Заключение
Пакет CTX_ADM позволяет централизованно задать системные параметры Oracle Text и обслуживать индексы.
Все вызовы в примерах выполняются от имени CTXSYS и не содержат строки / после END;,
как вы просили.
Полезные ссылки
- Официальная документация: CTX_ADM (Oracle Text Reference, 23c)
- Представление
CTX_PARAMETERSдля проверки значений параметров
Следующая статья:
CTX_ANL в PL/SQL — полное руководство с 50 примерами