CTX_ADM в PL/SQL — полное руководство с 50 примерами

🟢 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 примерами


 

Понравилась статья? Поделиться с друзьями: