TraceおよびSQLトレース機能を持つDBMS_APPLICATION_INFOパッケージを使用して、実行しているモジュール名またはトランザクションをデータベースに記録できます。この記録は、後で行う様々なモジュールおよびデバッグのパフォーマンスを追跡するときに使用されます。この章では、次の項目について説明します。概要アプリケーションを登録することによって、システム管理者およびパフォーマンス・チューニング担当者は、パフォーマンスをモジュール別に追跡できます。システム管理者は、モジュール別のリソース使用率をこの情報から追跡することもできます。アプリケーションをデータベースに登録すると、その名前およびアクションがV$SESSIONおよびV$SQLAREAビューに記録されます。セキュリティ・モデル注意:DBMS_APPLICATION_INFOのパブリック・シノニムが作成前に削除されることはありません。これは、ユーザーがパブリック・シノニムをユーザー独自のパッケージまでリダイレクトできるようにするためです。これ以上の権限は不要です。DBMSAPIN.SQLスクリプトは、標準データベース作成の一部としてすでに実行されています。使用上の注意ユーザーがモジュールを入力するたびに、アプリケーションがモジュール名およびアクション名を自動的に設定するようにしてください。Formsアプリケーションのフォーム名またはOracleプリコンパイラ・アプリケーションのコード・セグメント名である場合があります。アクション名は、通常、モジュール内の現行トランザクションの名前または説明にしてください。モジュールに基づいて独自の統計情報を収集する場合は、統計を最初に収集する別のスキーマにこのパッケージのバージョンを記述してこのパッケージにラッパーを実装してから、SYSバージョンのパッケージをコールします。このようにして、DBMS_APPLICATION_INFOのパブリック・シノニムを、DBAバージョンのパッケージまで変更できます。DBMS_APPLICATION_INFOパッケージのサブプログラムサブプログラム説明READ_CLIENT_INFOプロシージャ現行セッションのclient_infoフィールドの値を読み込みます。READ_MODULEプロシージャ現行セッションのモジュールおよびアクションのフィールド値を読み込みます。SET_ACTIONプロシージャ現行モジュール内の現行アクション名を設定します。SET_CLIENT_INFOプロシージャセッションのclient_infoフィールドを設定します。SET_MODULEプロシージャ現在実行中のモジュール名を新規モジュールに設定します。SET_SESSION_LONGOPSプロシージャV$SESSION_LONGOPS表に行を設定します。READ_CLIENT_INFOプロシージャこのプロシージャは、現行セッションのclient_infoフィールドの値を読み込みます。READ_CLIENT_INFOプロシージャのパラメータパラメータ説明client_infoSET_CLIENT_INFOプロシージャに提供された最新のクライアント情報の値READ_MODULEプロシージャこのプロシージャは、現行セッションのモジュールおよびアクション・フィールドの値を読み込みます。登録アプリケーションのモジュール名およびアクション名は、V$SQLAREAを問い合せるか、またはREAD_MODULEプロシージャをコールして取り出せます。クライアント情報は、V$SESSIONビューを問い合せるか、またはREAD_CLIENT_INFOプロシージャをコールして取り出せます。次の問合せのサンプルは、V$SQLAREAのMODULEおよびACTION列の使用方法の例です。selected.SET_ACTIONプロシージャこのプロシージャは、現行モジュール内の現行アクション名を設定します。SET_ACTIONプロシージャのパラメータパラメータ説明action_name現行モジュール内の現行アクション名。現行アクションが終了したときは、次のアクションがある場合はその名前で、ない場合はNULLでこのプロシージャをコールします。32バイトを超える名前は切り捨てられます。使用上の注意アクション名には、実行されている現行のアクションを説明する名前を設定してください。アクション名は、すべてのトランザクションの開始前に設定することをお薦めします。後続のトランザクションのログが正しく記録されるように、トランザクション完了後はトランザクション名をNULLに設定してください。トランザクション名をNULLに設定しないと、後続のトランザクションのログがその前のトランザクション名で記録される可能性があります。次のコードは、登録プロシージャを使用するトランザクションの例です。SET_CLIENT_INFOプロシージャこのプロシージャは、クライアント・アプリケーションに関する追加情報を提供します。SET_CLIENT_INFOプロシージャのパラメータパラメータ説明client_infoクライアント・アプリケーションに関するあらゆる追加情報を提供します。この情報は、V$SESSIONビューに格納されています。64バイトを超える情報は切り捨てられます。注意:CLIENT_INFOは、ユーザーによる読込みおよび書込みが可能です。保護アプリケーション属性の格納には、アプリケーション・コンテキスト機能を使用できます。SET_MODULEプロシージャこのプロシージャは、現行のアプリケーションまたはモジュールの名前を設定します。SET_MODULEプロシージャのパラメータパラメータ説明module_name現在実行中のモジュール名。現行のモジュールが終了したときは、新規モジュールがある場合はその名前で、ない場合はNULLでこのプロシージャをコールします。48バイトを超える名前は切り捨てられます。action_name現行モジュール内の現行アクション名。アクションを指定しない場合は、この値をNULLに設定してください。32バイトを超える名前は切り捨てられます。END;SET_SESSION_LONGOPSプロシージャこのプロシージャは、V$SESSION_LONGOPSビューに行を設定します。このビューは、長時間にわたって実行する操作の進行状況を示すために使用されます。Recoveryなどの一部のOracle機能は、このビューの行を使用してデータベース・バックアップなどの状態を示します。アプリケーション固有の長時間実行タスクの進行状況に関する情報を通知するために、アプリケーションでSET_SESSION_LONGOPSプロシージャを使用できます。この結果、V$SESSION_LONGOPSビューで進行状況を監視できます。SET_SESSION_LONGOPSプロシージャのパラメータパラメータ説明rindex更新するv$session_longops行を示すトークン。新規行を使用するには、このトークンをset_session_longops_nohintに設定します。行を再利用する場合は、先行するコールの戻り値を使用します。slnoset_session_longopsへのコール全体の情報を保存しますが、内部使用のためのパラメータであるため、コール元で修正しないでください。op_name長時間実行タスクの名前を指定します。v$session_longopsのOPNAME列に表示されます。最大長は64バイトです。target長時間実行操作中に処理されるオブジェクトを指定します。ソートされる表のIDなどを指定します。v$session_longopsのTARGET列に表示されます。contextクライアントが格納する数。v$session_longopsのCONTEXT列に表示されます。sofarクライアントが格納する数。v$session_longopsのSOFAR列に表示されます。これは通常、その時点までに処理した作業量です。totalworkクライアントが格納する数。v$session_longopsのTOTALWORK列に表示されます。これは通常、この長時間実行操作で行う必要がある推定合計作業量です。target_descこの長時間操作で操作されるオブジェクトの説明を指定します。この結果、targetパラメータにキャプションが提供されます。この値は、v$session_longopsのTARGET_DESCフィールドに表示されます。最大長は32バイトです。unitssofarおよびtotalworkを表す単位を指定します。v$session_longopsのUNITSフィールドに表示されます。最大長は32バイトです。例この例では、ループ内で10個のオブジェクトに対してタスクを実行します。各オブジェクトの処理が完了するたびに、プロシージャの進行状況に関するV$SESSION_LONGOPSが更新されます。