ヘッダーをスキップ
Oracle Content Database Oracle WebCenter Suite用管理者ガイド
10g(10.1.3.2.0)
E05041-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

C Oracle Text索引の管理

Oracle Content DBでは、Oracle Textを使用することによって、全文検索および他の拡張機能を円滑に実行できます。結果が戻される速度は、Oracle Content DBで使用されるOracle Text索引(IFS_TEXT)の品質など、いくつかの要因によって異なります。検索のパフォーマンスは、検索がタイムアウトになるまでの経過時間にも依存することがあります。

Oracle Content DBは、IFS_LYKE索引という追加の索引を使用して、既知のアイテムに対するサブストリング検索を高速化します。たとえば、IFS_LYKE索引によって、「*planning*」や「*.doc」などを簡単に検索できます。IFS_LYKE索引の作成およびメンテナンスは自動的に行われるため、通常は管理作業は必要ありません。IFS_LYKE索引関連の問題が発生した場合は、オラクル社カスタマ・サポート・センターにトラブルシューティング情報をお問い合せください。

この付録では、Oracle Content DBのパフォーマンスを最適化するためにOracle Text索引をメンテナンスする方法を説明します。次の項目について説明します。

Oracle ContextおよびOracle interMedia Textは、Oracle Textの以前の名前です。多くの管理者ガイドおよびアプリケーション開発者ガイドに記載されている基礎となる索引、ビュー、表および様々なPL/SQLパッケージには、現在も、ContextまたはinterMediaに関連した用語が使用されています。

Oracle Textの詳細は、Oracle Technology Network(http://www.oracle.com/technology/products/text)を参照してください。

Oracle Textの表領域およびディスク使用率

Oracle Textのディスク領域は、3つの個別の表領域に分割されています。

この情報を使用して、Oracle Content DBインスタンスに必要なディスク・ストレージを推定および計画します。

Oracle Text索引の作成およびメンテナンス

Oracle Content DBの構成プロセスでは、表C-1に示すSQLスクリプトを使用して、IFS_TEXT索引を作成および移入します。

これらのスクリプトは、次のディレクトリにあります。

ORACLE_HOME/content/admin/sql

表C-1 Oracle Text索引を作成するためのSQLスクリプト

スクリプト 用途 ログインに使用するユーザー 引数

CreateContext FunnelProcedure.sql

USER_DATASTOREによって使用されるプロシージャを作成する。

CONTENT

なし

GrantContext ToIFS.sql

Oracle Content DBユーザー(スキーマ)に、索引をメンテナンスするために必要なOracle Text固有のコマンドを実行する権限を付与する。

SYS

CONTENT

CreateContext Preferences.sql

Oracle Content DBユーザーによって表領域および他のテキスト・プリファレンスが作成される。

CONTENT

OracleText_index_tablespace

OracleText_keymap_tablespace

OracleText_data_tablespace

CONTENT(Oracle Content DBスキーマ名)

CreateContext Index.sql

テキスト・プリファレンスに基づいてIFS_TEXT索引を作成する。

CONTENT

なし


Oracle Text PL/SQLパッケージを使用したIFS_TEXT索引のメンテナンス

Oracle Textには、索引のメンテナンス用に2つのPL/SQLパッケージが用意されています。通常のデータベース索引とは異なり、Oracle Text索引は、情報が挿入または更新されるたびに動的に更新されません。Oracle Textのストアド・プロシージャであるctx_ddl.sync_indexを使用して、索引を定期的にリフレッシュ(同期化)する必要があります。

ctx_ddl.sync_indexプロシージャでは、索引全体が再構築されるのではなく、最後の同期化以降に変更された記録の追加および削除が行われます。変更は増分的であるため、このプロシージャを頻繁に実行するほど、高速化されます。ただし、時間が経過すると索引が断片化される可能性があるため、索引を最適化するためのプロシージャ(ctx_ddl.optimize_index)が用意されています。

Oracle Content DBの構成中、IFS_TEXT索引を同期化および最適化するプロシージャは、Oracle DatabaseのDBMS_JOBSパッケージを使用して、バックグラウンドで定期的に実行されるように自動的に設定されます。DBMS_JOBSプロシージャは、UNIXシステムのcron jobsと同様のプロシージャで、Oracle Databaseが実行されているすべてのプラットフォームに移植できます。

構成中にOracle Content DBスキーマが作成されると、同期化ジョブと最適化ジョブの2つのDBMS_JOBSが設定されます。Oracle Content DBスキーマの名前はCONTENTです。

同期化ジョブ

同期化ジョブは、ctx_ddl.sync_index()メソッドを定期的にコールします。このメソッドは、最後の実行後に作成または更新されたドキュメントに索引付けをします。デフォルトでは、このジョブは30分ごとに実行されます。

最適化ジョブ

最適化ジョブは、ctx_ddl.optimize_index()メソッドを定期的にコールします。このジョブの目的は、IFS_TEXT索引の断片化を解消して最適化することです。デフォルトでは、このジョブはFULLモードで実行され、最適化タスクには最大1時間が割り当てられています。ジョブは、24時間ごとに午前0時から実行されます。

DBMS_JOBSの監視

DBMS_JOBログは、Oracle DatabaseがインストールされているOracleホームのバックグラウンド・プロセス・ログを保存するディレクトリにあります。データベース・サーバーのBACKGROUND_DUMP_DEST構成パラメータは、このディレクトリを指しています。ログ・トレース・ファイルは、名前のパターン(DBNAME_j###_process-id.trc)で識別できます。

もう1つのデータベース構成パラメータJOB_QUEUE_PROCESSESによって、すべてのバックグラウンド・タスクを実行するために使用できるプロセスの数が決まります。同期化ジョブと最適化ジョブを実行するためのプロセス数が足りない場合は、このパラメータの値を増やす必要があります。デフォルト値は10です。

USER_JOBSビューを表示して、現在のスキーマ・ユーザーが設定したすべてのジョブのリストを確認することもできます。USER_JOBSビューには、各ジョブが実行するPL/SQL、各ジョブが最後に実行された時間、ジョブの次の実行予定時間などの詳細が表示されます。USER_JOBSビューを表示するには、SQL*Plusを使用してOracle Content DBスキーマ(CONTENT)にログインします。

デフォルトのDBMS_JOBSの変更または削除

Oracle Content DBではDBMS_JOBSの設定およびクリアに、SetupContextJobs.sqlおよびClearContextJobs.sqlという2つのSQLファイルを使用します。これらのファイルは、次のディレクトリにあります。

ORACLE_HOME/content/admin/sql

SetupContextJobs.sqlは、同期化ジョブおよび最適化ジョブを設定する構成中にシステムによって使用されます。ClearContextJobs.sqlは、ユーザーが独自のDBMS_JOBSを設定する場合に、同期化ジョブおよび最適化ジョブを削除するために用意されています。

独自のDBMS_JOBSの設定の詳細は、『Oracle Database管理者ガイド』を参照してください。同期化ジョブおよび最適化ジョブを例として参照することもできます。

IFS_TEXTの手動による同期化および最適化

既存のIFS_TEXT索引を同期化するには、SQL*Plusを使用して、Oracle Content DBスキーマ・ユーザー(CONTENT)として接続し、次のとおり入力します。

exec ctx_ddl.sync_index('ifs_text');

ORACLE_HOME/content/admin/sqlディレクトリからSyncContextIndex.sqlスクリプトを実行することもできます。このスクリプトを使用すると、IFS_TEXT索引の同期化に加えて、コンソールに詳細なログ情報が表示されます。

既存のIFS_TEXT索引を最適化するには、SQL*Plusを使用して、Oracle Content DBスキーマ・ユーザー(通常はCONTENT)として接続し、次のとおり入力します。

exec ctx_ddl.optimize_index('ifs_text', 'FAST');

または

exec ctx_ddl.optimize_index('ifs_text', 'FULL', maxtime);

Oracle TextによるOracle Content DBドキュメントの索引付けの監視

Oracle Content DBには、Oracle Textとの連携を円滑にする、ユーティリティ・タイプのSQLスクリプトがいくつか用意されています。用途の詳細は、各.sqlファイルを参照してください。すべてのスクリプトは、次の場所で入手できます。

ORACLE_HOME/content/admin/sql

表C-2に、Oracle Textを監視するためにOracle Content DBに用意されているSQLスクリプトをリストします。

表C-2 Oracle Textによる索引付けを監視するためのSQLスクリプト

スクリプト 用途

ViewContextErrors.sql

Oracle Textによる索引付け中に発生したオペレーティング・システム固有のエラーをデコードする。

SyncContextIndex.sql

Oracle Text索引を同期化し、Oracle Textの同期化プロセスの監視を可能にする。行IDごとに監視するには、ctx_output.add_event()へのコールを含む、スクリプトの最初の2行のコメントアウトを解除します。

ViewDocumentByRowID.sql

Oracle Textによって索引付けされるドキュメントに関する追加情報の参照を可能にする。このスクリプトでは、Oracle Textログのdocidを使用します。


標準以外のコンテンツ・タイプの索引付け

Oracle Content DBは、デフォルトではシステムに移動されたすべてのファイルに対して索引付けしません。ただし、選択したコンテンツ・タイプが索引付けされるようにOracle Content DBを構成できます。これを行うには、Application Server Controlの「新規フォーマット」ページ(フォーマットがすでに存在する場合は「フォーマットの編集」ページ)で、MIMEタイプを「索引付け」に指定します。ドキュメントのMIMEタイプは、その拡張子によって判別されます。

たとえば、すべてのC#(.cs)ソース・コード・ファイルを索引付けするとします。これを行うには、次の手順を実行します。

  1. Application Server Controlを使用して、.csのMIMEタイプを追加し、「新規フォーマット」ページでこのMIMEタイプを「索引付け」に指定します。

  2. ファイルをリポジトリにアップロードします。

  3. 「IFS_TEXTの手動による同期化および最適化」で説明するプロシージャを使用して、索引を同期化します。

Oracle Content DBでデフォルトで索引付けされる形式のリストは、「デフォルトの形式」を参照してください。

検索タイムアウト・パラメータの変更

IFS.SERVICE.SESSION.DefaultSearchTimeoutPeriodサービス構成パラメータによって、結果が戻されていない実行中の検索に対するタイムアウト時間が指定されます。(デフォルトのサービス構成における)このパラメータのデフォルト設定は、60秒です。この値を大きくすると、検索がタイムアウトするまでの待機時間が1分以上になります。この値を小さくすると、実行中の検索がタイムアウトするまでの時間が短くなります。

サービス構成パラメータの変更方法については、「サービス構成の変更」を参照してください。

Oracle Textの問題のトラブルシューティング

表C-3に、Oracle Textのトラブルシューティングに関する情報を示します。

表C-3 Oracle Textの問題のトラブルシューティング

問題 予測される原因 対処措置

すべてのドキュメントのコンテンツを検索できない。

ドキュメントが索引付けされていません。

データベース・インスタンスを起動し、Oracle Textの索引付けジョブが実行されていることを確認します。詳細は、「Oracle Text索引の作成およびメンテナンス」を参照してください。

サーバーがコンテンツ・ベースの検索アクティビティのみで低速である(事例1)。

Oracle Textの表領域が他のデータベース・ファイルと同じディスク上に存在しています。

Oracle Textの表領域を別のディスクに移動します。表領域の移動の詳細は、『Oracle Database管理者ガイド』を参照してください。

サーバーがコンテンツ・ベースの検索アクティビティのみで低速である(事例2)。

Oracle Textの索引が断片化されています。

Oracle Textの索引であるGLOBALINDEXEDBLOB_Iを定期的に最適化します。詳細は、「IFS_TEXTの手動による同期化および最適化」を参照してください。

新しいドキュメントのコンテンツの検索が中断する。

最近アップロードされたドキュメントによってOracle Textサーバーに障害が発生しています。

  1. SQL*Plusにcontent_db_schema/schema_passwordとしてログインし、次のコマンドを入力します。

    select count(*) from ctx_user_pending;
    

    Oracle Content DBスキーマの名前はCONTENTです。

  2. 表示されるビューに行が含まれ、行の内容に変更がない場合、最近アップロードされたドキュメントが原因でOracle Textの索引付けが停止しています。この行が参照するOracle Content DBドキュメントを判別するには、問題「Oracle Textビューのctx_user_index_errorsにOracle Content DBの行が表示される」を参照してください。

  3. ctx_user_pendingに行があるかどうかを再度確認し、行がある場合は、その行が変更されることを確認します。

  4. これによって問題が解決しない場合、オラクル社カスタマ・サポート・センターに連絡してください。

Oracle Textビューのctx_user_index_errorsにOracle Content DBの行が表示される。

Oracle Content DBドキュメントが破損しているか、正しい拡張子が設定されていません。

  1. ctx_user_index_errorserr_texkeyに基づいて、参照されるOracle Content DBドキュメントを判断します。

    sqlplus content_db_schema/schema_password
    
    select du.uniquename, vd.name, co.contentsize,
    cs.id, vd.id
    from odmv_document vd, odm_contentobject co,
    odmm_contentstore cs, odm_document od,
    odm_directoryuser du
    where vd.id = od.id
    and od.contentobject = co.id
    and co.content = cs.id
    and du.id = vd.owner
    and cs.id in
    (
    select distinct od.id
    from ctx_user_index_errors cp, odmm_
    contentstore od
    where od.rowid = err_textkey
    )
    order by cs.id;
    
  2. コンテンツ管理者ロールを持つユーザーとしてOracle Content DBにログインし、管理モードに切り替えます。

  3. 手順1のSELECT文から返された、ドキュメント名vd.idを検索します。

  4. ドキュメント・サイズなどのドキュメント属性をチェックし、正しいドキュメントであることを確認します。

  5. このドキュメントを検査し、次の問題を検討します。

    ファイルが破損していないかどうか。

    このドキュメントのファイル名拡張子は正しいかどうか。

    ドキュメントのキャラクタ・セットは正しいかどうか。

  6. 明白な問題が検出されない場合、詳細な診断を行うために、オラクル社カスタマ・サポート・センターにドキュメントを送信してください。

Oracle Content DBの行が処理されず、Oracle Textビューのctx_user_pendingから行が削除されない。

Oracle Content DBドキュメントが破損しているか、正しい拡張子が設定されていません。

  1. 「Oracle Textビューのctx_user_pendingにOracle Content DBの行が表示される」の手順に従って、参照されるOracle Content DBドキュメントを判別します。ただし、ctx_user_index_errorsのかわりにctx_user_pendingを、err_textkeyのかわりにpnd_rowidを使用します。

  2. このドキュメントを検査し、次の問題を検討します。

    ファイルが破損していないかどうか。

    このドキュメントのファイル名拡張子は正しいかどうか。

    ドキュメントのキャラクタ・セットは正しいかどうか。

  3. 明白な問題が検出されない場合、詳細な診断を行うために、オラクル社カスタマ・サポート・センターにドキュメントを送信してください。

  4. ドキュメントをOracle Content DBから削除します。