17 Oracle Textの管理

Oracle Textの管理について理解します。

この章のトピックは、次のとおりです:

17.1 Oracle Textのユーザーとロール

すべてのユーザーがOracle Textの索引を作成してCONTAINS問合せを入力できる一方、Oracle Textでは、管理用のCTXSYSユーザーおよびアプリケーション開発者用のCTXAPPロールを提供しています。

この項では、次の項について説明します。

17.1.1 CTXSYSユーザー

CTXSYSユーザーはインストール中に作成され、次のことを実行できます。

  • すべての索引の表示

  • すべての索引の同期化

  • ナレッジ・ベース拡張子コンパイラctxkbtcの実行

  • すべてのシステム定義ビューへの問合せ

  • CTXAPPロールを持つユーザーのすべてのタスクの実行

ノート:

以前のリリースのOracle Textでは、CTXSYSユーザーにはSYSDBA権限があり、CTXSYSのみがシステム定義プリファレンスの変更やシステム・パラメータの設定などの特定の機能を実行できました。

Oracle Databaseリリース19c以降では、CTXSYSユーザーはスキーマのみのユーザーです。CTXSYSスキーマを使用するには、次の文を実行します。

connect / as sysdba;

alter session set CURRENT_SCHEMA=CTXSYS;

17.1.2 CTXAPPロール

CTXAPPロールは、システム定義のロールです。ユーザーは次の作業を実行できます。

  • Oracle Textのプリファレンスの作成および削除

  • Oracle TextのPL/SQLパッケージの使用

17.1.3 ユーザーへのロールおよび権限の付与

システムでは、標準SQLモデルを使用してロールをユーザーに付与します。Oracle Textロールをユーザーに付与するには、GRANT文を使用します。

また、アプリケーション開発者にOracle TextのPL/SQLパッケージにあるプロシージャをコールする許可を与えるには、各ユーザーに対してOracle TextのパッケージのEXECUTE権限を明示的に付与する必要があります。

関連項目:

Oracle Textユーザーの作成

17.2 DMLキュー

元表のドキュメントに対して挿入、更新または削除を行うと、データ操作言語(DML)キューには、索引付けのために待機しているドキュメントに対する要求が格納されます。CTX_DDL.SYNC_INDEXを使用して索引を同期化すると、その要求はキューから削除されます。

保留中の挿入、更新および削除操作をCTX_PENDINGおよびCTX_USER_PENDINGビューを使用して問い合せることができます。

挿入、更新および削除のエラーをCTX_INDEX_ERRORSまたはCTX_USER_INDEX_ERRORSビューを使用して問い合せることができます。

関連項目:

これらのビューの詳細は、『Oracle Textリファレンス』を参照してください。

17.3 CTX_OUTPUTパッケージ

索引付け要求およびドキュメント・サービス要求のロギングには、PL/SQLパッケージCTX_OUTPUTを使用します。

関連項目:

このパッケージの詳細は、『Oracle Textリファレンス』を参照してください。

17.4 CTX_REPORTパッケージ

CTX_REPORTパッケージを使用して、索引および問合せのレポートを作成します。このレポートを使用すると、アプリケーションの微調整およびトラブルシューティングができます。

関連項目:

このパッケージの詳細は、『Oracle Textリファレンス』を参照してください。

CTX_REPORTパッケージには、次のプロシージャが含まれています。

CTX_REPORT.DESCRIBE_INDEXおよびCTX_REPORT.DESCRIBE_POLICY

これらのプロシージャにより、索引メタデータの設定、索引付けオブジェクト、オブジェクトの属性の設定および(CTX_REPORT.DESCRIBE_INDEX用の)索引パーティション情報(ある場合)を含む、既存の索引またはポリシーについて説明するレポートが作成されます。これらのプロシージャは、索引関連の問題の診断で特に役立ちます。

これは、単純なCONTEXT索引上で実行されるDESCRIBE_INDEXのサンプル出力です。

=================================================================
                        INDEX DESCRIPTION
=================================================================
index name:                      "DR_TEST"."TDRBPRX0"
index id:                        1160
index type:                      context
base table:                      "DR_TEST"."TDRBPR"
primary key column:              ID
text column:                     TEXT2
text column type:                VARCHAR2(80)
language column:
format column:
charset column:
=================================================================
                          INDEX OBJECTS
=================================================================
datastore:                       DIRECT_DATASTORE
filter:                          NULL_FILTER
section group:                   NULL_SECTION_GROUP
lexer:                           BASIC_LEXER
wordlist:                        BASIC_WORDLIST
   stemmer:                         ENGLISH
   fuzzy_match:                     GENERIC
stoplist:                        BASIC_STOPLIST
   stopword:                       teststopword
storage:                         BASIC_STORAGE
   r_table_clause:                  lob (data) store as (cache)
   i_index_clause:                  compress 2

CTX_REPORT.CREATE_INDEX_SCRIPTおよびCTX_REPORT.CREATE_POLICY_SCRIPT

CREATE_INDEX_SCRIPTは、指定したOracle Text索引の複製を作成できるSQL*Plusスクリプトを作成します。索引はあるが、その索引の作成に使用された元のスクリプト(ある場合)がないとき、索引を再作成できるようにする場合は、これを使用します。たとえば、誤ってスクリプトを削除した場合、CREATE_INDEX_SCRIPTで再作成できます。同じように、他のユーザーから索引を継承したが、その索引を作成したスクリプトは継承しなかった場合、CREATE_INDEX_SCRIPTが役に立ちます。

索引ではなくポリシーを再作成できるという点を除くと、CREATE_POLICY_SCRIPTCREATE_INDEX_SCRIPTと同様に動作します。

これは、(完全なリスト表示ではない)単純なCONTEXT索引上で実行されるCREATE_INDEX_SCRIPTのサンプル出力です。

begin
  ctx_ddl.create_preference('"TDRBPRX0_DST"','DIRECT_DATASTORE');
end;
/
...
/
begin
  ctx_ddl.create_section_group('"TDRBPRX0_SGP"','NULL_SECTION_GROUP');
end;
/
...
begin
  ctx_ddl.create_preference('"TDRBPRX0_WDL"','BASIC_WORDLIST');
  ctx_ddl.set_attribute('"TDRBPRX0_WDL"','STEMMER','ENGLISH');
  ctx_ddl.set_attribute('"TDRBPRX0_WDL"','FUZZY_MATCH','GENERIC');
end;
/
begin
  ctx_ddl.create_stoplist('"TDRBPRX0_SPL"','BASIC_STOPLIST');
  ctx_ddl.add_stopword('"TDRBPRX0_SPL"','teststopword');
end;
/
...
/
begin
  ctx_output.start_log('TDRBPRX0_LOG');
end;
/
create index "DR_TEST"."TDRBPRX0"
  on "DR_TEST"."TDRBPR"
      ("TEXT2")
  indextype is ctxsys.context
  parameters('
    datastore       "TDRBPRX0_DST"
    filter          "TDRBPRX0_FIL"
    section group   "TDRBPRX0_SGP"
    lexer           "TDRBPRX0_LEX"
    wordlist        "TDRBPRX0_WDL"
    stoplist        "TDRBPRX0_SPL"
    storage         "TDRBPRX0_STO"
  ')
/

CTX_REPORT.INDEX_SIZE

このプロシージャは、内部索引オブジェクト名とその表領域、割当てサイズおよび使用サイズのレポートを作成します。DBAが索引のサイズを監視する必要がある場合(たとえば、ディスク領域が不足している場合)は、これを使用すると便利です。

このプロシージャのサンプル出力は次のようになります(部分的にリスト表示します)。

=================================================================
                INDEX SIZE FOR DR_TEST.TDRBPRX10
=================================================================
TABLE:                          DR_TEST.DR$TDRBPRX10$I
TABLESPACE NAME:                DRSYS
BLOCKS ALLOCATED:                                            4
BLOCKS USED:                                                 1
BYTES ALLOCATED:                               8,192 (8.00 KB)
BYTES USED:                                    2,048 (2.00 KB)

INDEX (LOB):                    DR_TEST.SYS_IL0000023161C00006$$
TABLE NAME:                     DR_TEST.DR$TDRBPRX10$I
TABLESPACE NAME:                DRSYS
BLOCKS ALLOCATED:                                            5
BLOCKS USED:                                                 2
BYTES ALLOCATED:                             10,240 (10.00 KB)
BYTES USED:                                    4,096 (4.00 KB)

INDEX (NORMAL):                 DR_TEST.DR$TDRBPRX10$X
TABLE NAME:                     DR_TEST.DR$TDRBPRX10$I
TABLESPACE NAME:                DRSYS
BLOCKS ALLOCATED:                                            4
BLOCKS USED:                                                 2
BYTES ALLOCATED:                               8,192 (8.00 KB)
BYTES USED:                                    4,096 (4.00 KB)

CTX_REPORT.INDEX_STATS

INDEX_STATSにより、索引付けされるドキュメントの数、索引に含まれる一意のトークンの数、トークンの平均サイズ、索引の断片化情報など、索引に関する様々な統計が算出されます。INDEX_STATSの使用例として、ストップリストの最適化があります。

CTX_REPORT.QUERY_LOG_SUMMARY

このプロシージャは、ログに記録された問合せのレポートを作成します。これを使用すると、単純な分析を実行できます。問合せ分析を行うと、次のことがわかります。

  • 発行された問合せ

  • 成功した問合せ

  • 失敗した問合せ

  • 各問合せの発行回数

これらの要素を様々な方法で組み合せ、たとえばアプリケーションで失敗した問合せの上位50位までを調べることが可能です。

CTX_REPORT.TOKEN_INFO

TOKEN_INFOは、問合せの問題の診断に役立ちます。たとえば、これを使用して、索引データが破損していないかどうかをチェックしたり、予期しないトークンまたは不正なトークンを生成するドキュメントを見つけます。

CTX_REPORT.TOKEN_TYPE

TOKEN_TYPEは参照ファンクションであり、他のファンクション(CTX_DDL.OPTIMIZE_INDEXCTX_REPORT.TOKEN_INFOなど)に対する入力として主に使用されます。

関連項目:

17.5 Oracle Enterprise ManagerのText Manager

Oracle Enterprise Managerには、Oracle Text索引の構成、メンテナンスおよび管理を行うためのText Managerが用意されています。Text Managerを使用すると、Oracle Text索引の構成および管理に関する基本的なタスクをすべて実行できます。単一のOracle DatabaseインスタンスまたはOracle Real Application Clusters環境におけるOracle Text索引の全般的な状態を監視できます。Text Managerには重要な情報のサマリーが表示され、目的の詳細レベルへのドリルダウンや問題の解決、実行の必要があるアクションの理解が可能です。

「テキスト索引」ページに、処理中のジョブ、直前の7日間以内にスケジュールされているジョブ、または問題が発生しているジョブが表示されます。このページからジョブ・スケジューラに移動して、このデータベース・インスタンスに対するすべてのジョブの概要を表示したり、選択したジョブを管理できます。Oracle Enterprise Managerのオンライン・ヘルプでは、Text Managerの各機能を使用するための詳細および手順を説明しています。

この項では、次の項について説明します。

ノート:

Text ManagerによってOracle Textの索引を作成することはできません。Oracle Text索引を作成するには、「Oracle Textの索引の作成」「Oracle Textでの索引付け」で説明しているように、CREATE INDEX文を使用します。

17.5.1 Text Managerの使用

Text Managerのメイン・ページで、「アクション」リストから選択した索引に対し、次のアクションを実行できます。

  • 同期

  • 最適化

  • 再構築

  • 失敗した操作の再開

  • ログの表示

  • エラーの表示

また、指定した索引に対してジョブをスケジュールできます。

Text Managerにアクセスするには:

  1. Cloud Controlへのアクセス権限を持つユーザー・アカウントによってデータベースにサインインします。たとえば、SYSまたはSYSTEMと、データベースのインストール中に指定したパスワードを使用します。
  2. データベースのホームページで、「スキーマ」タブをクリックします。
  3. 「Text Manager」グループで、「テキスト索引」を選択します。

    「テキスト索引」ページには、このデータベース・インスタンスのOracle Text索引のリストが表示されます。

「テキスト索引」ページからOracle Text索引を選択すると、その索引に対して編集とアクションのオプションが使用可能になります。たとえば、検索の属性を構成するには、選択した索引に対して「編集」をクリックします。「テキスト索引の編集」ページで、ワイルドカードの語句の最大数、ファジー・スコア、ファジーの拡張の数などの属性を設定できます。また、索引名およびパーティション名を変更し、URL_DATASTOREの設定を指定することもできます。

ノート:

Oracle Database 20c以降、Oracle TextのURL_DATASTORE型は非推奨になりました。かわりに、NETWORK_DATASTOREを使用してください。

17.5.2 Oracle Text索引の一般情報の表示

「テキスト索引の表示」ページを使用して、指定した索引の一般的な情報(索引タイプ、並列度、同期モード、ワイルドカード制限、ファジー・スコア、ファジーの数値的結果、データストアなど)を表示できます。索引のパーティションに関する情報も表示できます。

Oracle Text索引の一般情報を表示するには、「テキスト索引」ページの索引リストで索引の名前をクリックします。「テキスト索引の表示」ページが開き、「一般」タブが選択されています。このページでアクションを選択して、メンテナンス・タスクを実行できます。

17.5.3 Oracle Text索引の状態のチェック

Text Managerでは、「テキスト索引」ページにデータベース・インスタンスのOracle Text索引が表示されます。このページを使用すると、アプリケーション全体が適切に実行されていることを確認するために必要な重要なアクションを理解できます。

「テキスト索引」ページを使用して、次の情報を表示できます。

  • 過去7日間に発行された索引およびジョブのステータス。

  • 無効なパーティションを含むOracle Text索引、つまり無効なテキスト索引の数。すべてのOracle Text索引の無効なパーティション(ある場合)の数もまた表示されます。

  • 進行中の状態の索引およびパーティションの数。

  • すべてのパーティションが有効で、処理中のアクティビティを含まない索引の数。

  • このデータベース・インスタンスに対して検出されたOracle Text索引の合計数。

  • 各Oracle Text索引の索引タイプ、所有者、同期化されていないドキュメントの数、ドキュメントの合計数、および断片化の割合。

リストからOracle Text索引を選択すると、アクションを編集または実行するためのオプションを使用できるようになります。

17.6 サーバーと索引付け

ドキュメントの索引付けと問合せの入力には、標準SQLを使用します。バッチによる挿入、更新および削除の操作を実行するのにサーバーは必要ではありません。CONTEXT索引は、CTX_DDL.SYNC_INDEXプロシージャを使用するか、またはOracle Enterprise ManagerのText Managerから同期化できます。

関連項目:

索引付けおよび索引の同期化の詳細は、「Oracle Textでの索引付け」を参照してください

17.7 Oracle Enterprise Managerのデータベース機能使用状況のトラッキング

Oracle Enterprise Managerのデータベース機能の使用状況統計では、様々なデータベース機能の使用頻度の概算が提供されます。この情報のトラッキングは、アプリケーションの開発および監視に役立ちます。

「データベース機能の使用」にアクセスするには、Oracle Enterprise Managerで、「サーバー」タブをクリックし、「データベース構成」の下にある「データベース機能の使用」を選択します。

「データベース機能の使用」では、Oracle Textについて次の情報が取得されます。

  • 索引使用状況の統計: データベースにある索引のうち、CONTEXT、CTXCATCTXRULEの各索引タイプの索引の数

  • SQL演算子使用状況の統計: ユーザーによるCONTAINS、CATSEARCH、MATCHESの各演算子の使用の有無

  • パッケージ使用状況の統計: 次のパッケージが使用された場合、その頻度と時期。

    • CTX_ADM

    • CTX_CLS

    • CTX_DDL

    • CTX_DOC

    • CTX_OUTPUT

    • CTX_QUERY

    • CTX_REPORT

    • CTX_THES

    • CTX_ULEXER

ノート:

機能の使用状況トラッキングは、完全に正確ではない場合があります。

17.8 Oracle Real Application Clusters上のOracle Text

OLAPアプリケーションのスループットおよびパフォーマンスを最大化するために、Oracle Text問合せをOracle Real Application Clusters (Oracle RAC)ノード間でパラレル化できます。「Oracle Enterprise ManagerのText Manager」で説明しているように、Oracle Enterprise ManagerのText Manageを使用して、Oracle Text索引をOracle RACノード上で管理できます。

17.9 Oracle Database Vault環境でのOracle Textの構成

Oracle Database Vault環境では、DV_ACCTMGRロールがある場合にCTXSYSユーザーを作成できます。

CTXSYSユーザーを作成するには、@$ORACLE_HOME/ctx/admin/catctx_user.sql SQLスクリプトを実行します。次に、SYSユーザーとして接続し、@$ORACLE_HOME/ctx/admin/catctx_schema.sql SQLスクリプトを実行します。

ノート:

SYSユーザーにDV_ACCTMGRロールもある場合は、catctx_user.sqlスクリプトとcatctx_schema.sqlスクリプトの両方をインストールする、@$ORACLE_HOME/ctx/admin/catctx.sql SQLスクリプトを実行できます。

17.10 Oracle Database VaultレルムでサポートされていないOracle Text操作

Oracle Database Vaultレルムは、レルム内のDDL操作に制限を設けます。このため、自分がレルムに追加されているもののレルムにおいて認可されていない場合は、Oracle Text索引を作成、変更または削除できません。また、CTX_DDLパッケージに含まれるのDDL操作も使用できません。

レルム内に作成できなかった索引に関するDDLエラー・メッセージおよび問合せエラー・メッセージの原因としては、権限が十分でないことが考えられます。権限不足メッセージはレルム内で許可されていないDDL操作に固有のものです。

17.11 Oracle Text設定を含むスキーマのエクスポートおよびインポート

Oracle Databaseリリース20cより前は、プリファレンス、セクション・グループ、ストップリストおよびその他のOracle Textプリファレンスなどのスキーマ・オブジェクトはエクスポートされることもインポートされることもありませんでした。Oracle Databaseリリース20c以降では、データ・ポンプ・エクスポートおよびインポート・ユーティリティ(それぞれexpdpコマンドとimpdpコマンドで起動される)を使用してスキーマをエクスポートおよびインポートするときに、それらがコピーされます。