ヘッダーをスキップ

Oracle Content Management SDK 管理者ガイド
10g(9.0.4.2)
B15638-01
目次
目次
索引
索引

戻る 次へ

A Oracle Textリファレンス

Oracle Content Management SDK(Oracle CM SDK)では、Oracle Textを使用して、テキスト検索および他の拡張機能を簡単に使用できます。検索結果が戻される速度は、Oracle CM SDKで使用するOracle Text索引(IFS_TEXT)の質など、複数の要因に依存します。また、エンド・ユーザーが体感する検索のパフォーマンスは、実行中の検索がタイムアウトするまでに経過した時間によって決まることもあります。

この付録では、Oracle CM SDKで最適なパフォーマンスを得るための、Oracle Text索引の管理方法について説明します。項目は次のとおりです。

Oracle Textは以前、OracleコンテキストまたはOracle interMedia Textと呼ばれていました。ほとんどの管理ドキュメントやアプリケーション開発ドキュメントでは、基礎となる索引、ビュー、表、および様々なPL/SQLパッケージに関する記述の中で、OracleコンテキストまたはOracle interMedia Textに関連する名称が使用されています。たとえば、すべてのOracle Textオブジェクトを持つデータベース・スキーマでは、索引などでCTXSYSとなっています。

Oracle Textの詳細は、OTN-J(Oracle Technology Network Japan、URLはhttp://otn.oracle.co.jp/)を参照してください。

Oracle Textの表領域とディスク使用率

Oracle Textのディスク領域は、次の3つの表領域に分けられます。

この情報を使用して、Oracle CM SDKインスタンスで必要となるディスク記憶域の見積りおよび計画を行います。

Oracle Text索引の作成および管理

Oracle CM SDKの構成プロセスの最後に、Configuration Assistantは表A-1に示されたSQLスクリプトを使用して、IFS_TEXT索引を作成し、移入します。

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

$ORACLE_HOME/ifs/cmsdk/admin/sql

インストール・プロセスに失敗したため、これらのスクリプトを手動で実行する場合は、SQL*Plusプロンプトからスクリプトを実行する必要があります。

表A-1    Oracle Text索引の作成用のSQLスクリプト 
スクリプト  機能  ログイン名  引数 

CreateContextFunnelProcedure.sql 

USER DATASTOREで使用するプロシージャを作成する。 

ifs_schema_ owner
 

なし 

GrantContextToIFS.sql 

Oracle CM SDKユーザー(スキーマ)に、索引の管理に必要なOracle Text固有のコマンドを実行する権限を付与する。 

sys
 
ifs_schema_name
 

CreateContextPreferences.sql 

Oracle CM SDKユーザーにより、表領域および他のテキスト・プリファレンスが作成される。 

ifs_schema_ owner
 
OracleText_index_ tablespace
OracleText_keymap_ tablespace
OracleText_data_ tablespace
ifs_schema_name
 

CreateContextIndex.sql 

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

ifs_schema_ owner
 

なし 

Oracle TextのPL/SQLパッケージによるIFS_TEXT索引の管理

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

ctx_ddl.sync_indexプロシージャでは索引全体の再構築は行われず、前回の同期以後に変更されたレコードが追加および削除されます。変更は増分のため、このプロシージャの実行頻度が高いほど、短時間で終了します。ただし、時間が経つにつれてこの索引は断片化されるため、索引を最適化するためにもう1つのプロシージャ(ctx_ddl.optimize_index)が用意されています。

Oracle CM SDKの構成時には、IFS_TEXT索引を同期化および最適化するこれらのプロシージャが、Oracleデータベース・サーバーのDBMS_JOBSパッケージを使用して定期的にバックグラウンドで実行されるように自動設定されます。DBMS_JOBSのプロシージャは、UNIXシステムのcron jobsと同様の機能を持ち、Oracleデータベース・サーバーが稼働するすべてのプラットフォームに移植できます。

構成時にOracle CM SDKスキーマを作成すると、Sync JobとOptimize Jobという2つのDBMS_JOBSが設定されます。


注意

Sync JobとOptimize Jobは、スキーマの新規作成時にのみ自動的に作成されます。既存のスキーマからアップグレードする場合、これらのジョブは自動的には作成されません。 


Sync Job

Sync Jobは、定期的にctx_ddl.sync_index()メソッドをコールします。このメソッドは、前回のメソッド実行以降に作成または更新されたドキュメントに索引を付けます。このジョブは、デフォルトでは30分おきに実行されるように設定されます。

Optimize Job

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

DBMS_JOBSの監視

DBMS_JOBのログ・ファイルは、対象のOracleデータベース・サーバーをホスティングしている$ORACLE_HOMEの下にある、バックグラウンド・プロセス・ログを格納するディレクトリに置かれています。このディレクトリは、データベース・サーバーのBACKGROUND_DUMP_DEST構成パラメータで設定されています。ログ・トレース・ファイルは、そのネーミング・パターン(DBNAME_j###_process-id.trc)によって識別できます。

もう1つのデータベース構成パラメータJOB_QUEUE_PROCESSESを指定すると、すべてのバックグラウンド・タスクを実行するために指定の時間に使用可能なプロセスの数が設定されます。Sync JobおよびOptimize Jobを実行するのに十分なプロセスを使用できない場合は、このパラメータの値を大きくする必要があります。デフォルト値は10です。

USER_JOBSビューを参照すると、現在のスキーマ・ユーザーによって設定されているすべてのジョブのリストを確認することもできます。USER_JOBSビューには、各ジョブによって実行されるPL/SQL、各ジョブが最後に実行された時刻、各ジョブの次回の実行予定時刻などの詳細情報が表示されます。USER_JOBSビューを参照するには、SQL*Plusを使用してOracle CM SDKスキーマにログオンします。

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

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

$ORACLE_HOME/ifs/cmsdk/admin/sql

SetupContextJobs.sqlは、Sync JobおよびOptimize Jobを設定するために構成時にシステムが使用します。ClearContextJobs.sqlは、管理者が独自のDBMS_JOBSを設定する場合にSync JobおよびOptimize Jobを削除するために用意されています。

独自のDBMS_JOBSを設定する方法については、『Oracle Database管理者ガイド』を参照してください。Sync JobおよびOptimize Jobは、例として参照することもできます。

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

既存のIFS_TEXT索引を同期化するには、SQL*Plusを使用してOracle CM SDKスキーマ・ユーザーとして接続し、次のように入力します。

exec ctx_ddl.sync_index('ifs_text');

$ORACLE_HOME/ifs/cmsdk/admin/sqlディレクトリから、SyncContextIndex.sqlスクリプトを実行することもできます。このスクリプトは、IFS_TEXT索引を同期化する以外に、追加のログ情報をコンソールに出力します。

既存のIFS_TEXT索引を最適化するには、SQL*Plusを使用してOracle CM SDKスキーマ・ユーザーとして接続し、次のように入力します。

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

または

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

Oracle CM SDKドキュメントのOracle Text索引付けの監視

Oracle CM SDKでは、Oracle Textとの対話を簡単にするために、ユーティリティ・タイプのSQLスクリプトが用意されています(表A-2を参照)。使用方法の詳細は、各.sqlファイルを参照してください。スクリプトはすべて次の場所にあります。

$ORACLE_HOME/ifs/cmsdk/admin/sql

表A-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 CM SDKは、デフォルトでは、システムにロードされたすべてのファイルに索引付けするわけではありません。しかし、選択した任意のドキュメントに索引付けするように構成することはできます。このためには、Oracle CM SDKマネージャの「新規フォーマット」ページ(そのフォーマットがすでに存在する場合は「フォーマットの編集」ページ)で、そのMIMEタイプを「索引付け」と指定します。ドキュメントのMIMEタイプは、その拡張子によって決まります。

たとえば、すべての.javaソース・コード・ファイルを索引付けすることもできます。その手順は次のとおりです。

  1. Oracle CM SDKマネージャの「新規フォーマット」ページで、.java MIMEタイプを追加して、「索引付け」と指定します。

  2. リポジトリにファイルを挿入します。

  3. 「IFS_TEXTの手動による同期化および最適化」で説明されている手順で、索引を同期化します。

デフォルトのOracle CM SDKフォーマットのリストについては、表7-6を参照してください。

テーマの索引付け

Oracle Textでは、ファイルの内容に基づいてテーマを生成できます。デフォルトでは、テーマのコンテンツの索引付けに伴うオーバーヘッドを回避するためにOracle CM SDKはテーマの索引付けを無効化します。テーマの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

Oracle Textのテーマ索引付けの有効化または無効化を行うと、Oracle CM SDKのすべてのドキュメントに再度索引付けが行われるため、時間がかかる場合があります。ユーザー・コミュニティへの影響を少なくするため、どちらのタスクも、勤務時間外またはシステム使用率が低いときに実行してください。

テーマの索引付けの有効化

SQL*Plusで、Oracle CM SDKスキーマ・ユーザーとして接続し、次のように入力します。

exec ctx_ddl.set_attribute('ifs_default_lexer', 'index_themes', 'yes');
exec ctx_ddl.set_attribute('ifs_default_lexer', 'theme_language','english');
alter index ifs_text rebuild parameters('replace lexer ifs_global_lexer');

テーマの索引付けの無効化

SQL*Plusで、Oracle CM SDKスキーマ・ユーザーとして接続し、次のように入力します。

exec ctx_ddl.set_attribute('ifs_default_lexer', 'index_themes', 'no');
alter index ifs_text rebuild parameters('replace lexer ifs_global_lexer');

索引が再構築され、テーマの索引付けが無効になります。

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

IFS.SERVICE.SESSION.DefaultSearchTimeoutPeriodサービス構成パラメータは、結果待ちの検索のタイムアウト周期を指定できます。(デフォルトのサービス構成では)このパラメータのデフォルト設定は60秒です。検索がタイムアウトするまでユーザーが1分以上待つようにするには、この値を大きくします。実行中の検索がタイムアウトするまでの時間を短くするには、この値を小さくします。

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

この項では、Oracle Textのトラブルシューティングについて説明します。

表A-3    Oracle Textの問題のトラブルシューティング 
問題  考えられる原因  対処方法 

どのドキュメントのコンテンツも検索できない。 

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

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

Oracle CM SDKスキーマをアップグレード後に、ドキュメントのコンテンツを検索できない。 

Oracle Text索引が再移入されていない。 

詳細は、Oracle Content Management SDKのインストレーションおよび構成ガイドの「Oracle Text索引の再移入」を参照してください。 

コンテンツ・ベースの検索アクティビティでのみ、サーバーの速度が遅くなる。 

原因1: Oracle Textの表領域が、他のデータベース・ファイルと同じディスク上にある。

原因2: Oracle Text索引が断片化されている。 

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

Oracle Textの索引INDEXEDLOB_I(スキーマをアップグレードした場合)またはGLOBALINDEXEDBLOB_I(スキーマを新規作成した場合)を定期的に最適化します。詳細は、「IFS_TEXTの手動による同期化および最適化」を参照してください。 

Oracle CM SDKの行が、Oracle Textのビューctx_user_index_errorsに表示される。 

Oracle CM SDKのドキュメントが破損しているか、または正しい拡張子を持っていない。 

  1. ctx_user_index_errorserr_textkeyに基づいて、参照されているOracle CM SDKドキュメントを確認します。

    SQL*Plus cmsdk_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. cd $ORACLE_HOME/ifs/cmsdk/bin

  3. ifslogin system/system_password

  4. ifsshowallpaths -id vd.id
    ここでvd.idを、前述のSELECT文で返されるvd.idと置き換えます。このコマンドは、ドキュメントの完全パス名を表示します。

  5. このドキュメントを調べ、次の問題点を特定します。

    ファイルがなんらかの原因で破損しているかどうか。

    ファイル名の拡張子が、そのドキュメントに対して正しいかどうか。

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

  6. 明らかな問題が見つからない場合は、詳しい診断を行うために、そのドキュメントをオラクル社カスタマ・サポート・センターに送付してください。

 

Oracle CM SDKの各行が処理されず、またOracle Textのビューctx_user_pendingが終了しない。 

Oracle CM SDKのドキュメントが破損しているか、または正しい拡張子を持っていない。 

  1. 前述の「Oracle CM SDKの行が、Oracle Textのビューctx_user_index_errorsに表示される。」の手順に従い、どのOracle CM SDKドキュメントが参照されているかを判断します。このとき、ctx_user_index_errorsのかわりにctx_user_pendingを使用し、またerr_textkeyのかわりにpnd_rowidを使用してください。

  2. このドキュメントを調べ、次の問題点を特定します。

    ファイルがなんらかの原因で破損しているかどうか。

    ファイル名の拡張子が、そのドキュメントに対して正しいかどうか。

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

  3. 明らかな問題が見つからない場合は、詳しい診断を行うために、そのドキュメントをオラクル社カスタマ・サポート・センターに送付してください。

  4. Oracle CM SDKからそのドキュメントを削除します。

 

新規ドキュメントのコンテンツ検索で、機能が停止する。 

前回ロードしたドキュメントがOracle Textに対応していない。 

  1. cmsdk_schema/schema passwordでSQL*Plusにログインし、次のコマンドを発行します。

    select count(*) from ctx_user_pending;
    
    
  2. ビューの中に行が存在し、それらの行が変更されていない場合は、前回ロードしたドキュメントが原因でOracle Textの索引付けが停止しています。これらの行がどのOracle CM SDKドキュメントを参照しているかを判断するには、前述の「Oracle CM SDKの行が、Oracle Textのビューctx_user_index_errorsに表示される。」の手順に従ってください。

  3. ctx_user_pending内の行の有無を再度確認し、行が存在する場合は、行が変更されているかどうかを調べます。

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

 

戻る 次へ
Oracle
Copyright © 2005 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引