DBMS_TRACE
パッケージには、PL/SQLファンクション、プロシージャ、例外をトレースするインタフェースが含まれます。
この章では、次の項目について説明します。
概要
セキュリティ・モデル
定数
制限事項
使用上の注意
DBMS_TRACE
は、セッションでPL/SQLトレースを開始および停止するサブプログラムを提供します。トレース・データはプログラムの実行時に収集され、データベース表に書き込まれます。
一般的なセッションには、次の処理が含まれます。
セッションでPL/SQLトレースを開始します(DBMS_TRACE
.SET_PLSQL_TRACE
)。
トレースするアプリケーションを実行します。
セッションでPL/SQLトレースを停止します(DBMS_TRACE
.CLEAR_PLSQL_TRACE
)。
このパッケージは、SYS
の下に作成する必要があります。
DBMS_TRACE
パッケージでは、表136-1「DBMS_TRACEの定数」に示す定数が使用されます。
表136-1 DBMS_TRACEの定数
名前 | 型 | 値 | 説明 |
---|---|---|---|
|
|
0 |
|
|
|
1 |
|
|
|
1 |
コールまたは戻り値をトレースします。 |
|
|
2 |
|
|
|
4 |
例外をトレースします。 |
|
|
8 |
例外およびハンドラをトレースします。 |
|
|
16 |
最新の数レコードのみを保存します。これにより、大量の無関係な情報でデータベースをいっぱいにすることなく、問題領域までトレースできます。 イベント10940を設定した場合の制限は、1023*(イベント10940の値)です。 この制限は、 |
|
|
32 |
SQL文をトレースします。 |
|
|
64 |
SQL文をPL/SQLレベルでトレースします。これによりSQLトレースが起動されることはありません。 |
|
|
128 |
各行をトレースします。 |
|
|
256 |
|
|
|
4096 |
トレースを一時停止します。 |
|
|
8192 |
トレースを再開します。 |
|
|
16384 |
トレースを停止します。 |
|
|
32768 |
次のような管理イベントのトレースを抑制します。
|
|
|
65536 |
処理済の例外のトレースを抑制します。 |
これらの定数についてはすべて記号形式(定数名)を使用することをお薦めします。
PL/SQLトレースは、共有サーバー環境では使用できません。
大規模なアプリケーションをプロファイルすると、データ量が膨大になる可能性があります。トレース・データの収集に関する特定のプログラム・ユニットを使用可能にして、収集するデータ量を制御できます。
プログラム・ユニットは、コンパイルとデバッグを行って使用可能にできます。次のいずれかの方法で行います。
ALTER SESSION SET plsql_debug=TRUE; CREATE OR REPLACE ... /* create the library units - debug information will be generated */
または
/* recompile specific library unit with debug option */ alter [PROCEDURE | FUNCTION | PACKAGE BODY] <libunit-name> compile debug;
注意: 2番目の方法は、無名ブロックに対しては使用できません。 |
SET_PLSQL_TRACE
プロシージャのTRACE_LEVEL
パラメータにTRACE_LIMIT
を指定することにより、最新の8,192レコード(概算)のみを保持して、データベースで使用する記憶域量を制限できます。
DBMS_TRACEパッケージで出力を書き込むためのデータベース表を作成する必要があります。作成しないと、データが収集されません。 このような表を作成するには、TRACETAB.SQL
スクリプトを実行してください。このスクリプトで作成した表の所有者は、SYSです。
トレース可能なPL/SQL機能は、DBMSPBT.SQL
スクリプトに記述されています。主なトレース機能は次のとおりです。
DBMS_TRACEの追加機能として、トレースの解析と再開および出力の制限もできます。
使用可能なコールのトレースには、次の2つのレベルがあります。
レベル1: すべてのコールをトレースします。 これは、定数TRACE_ALL_CALLS
に対応します。
レベル2: 使用可能なプログラム・ユニットのみ、コールをトレースします。 これは、定数TRACE_ENABLED_CALLS
に対応します。
リモート・プロシージャ・コール(RPC)については、使用可能かどうかを検出できないため、RPCではレベル1でのみトレースできます。
使用可能な例外のトレースには、次の2つのレベルがあります。
レベル1: すべての例外をトレースします。 これは、定数TRACE_ALL_EXCEPTIONS
に対応します。
レベル2: 使用可能なプログラム・ユニットのみ、発生した例外をトレースします。 これは、定数TRACE_ENABLED_EXCEPTIONS
に対応します。
使用可能なSQLのトレースには、次の2つのレベルがあります。
レベル1: すべてのSQLをトレースします。 これは、定数TRACE_ALL_SQL
に対応します。
レベル2: 使用可能なプログラム・ユニットでのみ、SQLをトレースします。 これは、定数TRACE_ENABLED_SQL
に対応します。
使用可能な行のトレースには、次の2つのレベルがあります。
レベル1: すべての行をトレースします。 これは、定数TRACE_ALL_LINES
に対応します。
レベル2: 使用可能なプログラム・ユニットでのみ、行をトレースします。 これは、定数TRACE_ENABLED_LINES
に対応します。
行のトレース時には、行番号が変わるたびにレコードがデータベースに追加されます。プロシージャのコールおよびその戻り値によって行番号が変わる場合も、トレースの対象に含まれます。
注意: すべてのタイプのトレースでは、レベル1がレベル2を上書きします。たとえば、レベル1とレベル2の両方が使用可能な場合は、レベル1が優先されます。 |
使用可能なプログラム・ユニットについてのみトレースが要求されていて、現行のプログラム・ユニットが使用可能ではない場合、トレース・データは書き込まれません。
コールをトレースする場合は、コールと戻り値の両方がトレースされます。トレースが使用可能であるかどうかのチェックは、コールされるルーチンまたはコールするルーチンのいずれか一方が使用可能な場合に、トレース実施と判断されます。
コールのトレースでは、プログラム・ユニットのタイプ、名前および行番号が常に出力されます。さらに、コール元のスタックの深さが書き込まれます。コール元のユニットが使用可能な場合は、コール側プロシージャ名も出力されます。コールされる側のユニットが使用可能な場合は、コールされるプロシージャ名が出力されます。
例外のトレースでは、行番号が書き込まれます。例外が発生すると、その例外がユーザー定義か事前定義のいずれであるかが示されます。事前定義の例外の場合は例外番号も出力されます。例外が発生した場所とそのハンドラの両方がトレースされます。トレースが使用可能であるかどうかのチェックは、例外が発生した場所と例外がハンドルされた場所で個別に行われます。
DBMS_TRACE.SET_PLSQL_TRACE
およびDBMS_TRACE.CLEAR_PLSQL_TRACE
へのコールによって、データベースに特別なトレース・レコードが配置されます。したがって、トレース設定が変更された時点を常に確認できます。
収集した項目を確認するのみではなく、トレース処理を一時停止したり、再開することもできます。トレースが一時停止されてから再開されるまでの間、情報は収集されません。 一時停止および再開には、それぞれ定数TRACE_PAUSE
およびTRACE_RESUME
を使用します。トレースが一時停止または再開したことを示すためにトレース・レコードが生成されます。
定数TRACE_LIMIT
を使用すると、最新の8,192トレース・イベントのみを保持できます。これにより、データベースをいっぱいにすることなくトレースを繰り返すことができます。トレースの停止時には、最新の8,192レコードが保存されています。各トレース・レコードごとにはチェックされないため、この制限は概算です。少なくとも要求されたトレース・レコードの数は生成され、1,000レコードまでは追加生成できます。 8,192というレコード数の制限は変更できます。 イベント10940をレベルnに設定すると、レコード制限は1024 * nに変更されます。
表136-2 DBMS_TRACEパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
セッションでのトレース・データのダンプを停止します。 |
|
トレース・レベルを取得します。 |
|
トレース・パッケージのバージョン番号を取得します。 |
|
現行のセッションでトレースを開始します。 |
このプロシージャは、トレース・データ収集を使用禁止にします。
構文
DBMS_TRACE.CLEAR_PLSQL_TRACE;
このプロシージャは、現在のトレース・レベルを有効化された定数のリストとして戻します。
構文
DBMS_TRACE.GET_PLSQL_TRACE_LEVEL RETURN BINARY_INTEGER;
このプロシージャは、トレース・パッケージのバージョン番号を取得します。 DBMS_TRACE
パッケージのバージョン番号とリリース番号を戻します。
構文
DBMS_TRACE.PLSQL_TRACE_VERSION ( major OUT BINARY_INTEGER, minor OUT BINARY_INTEGER);
パラメータ
このプロシージャは、PL/SQLのトレース・データ収集を可能にします。
構文
DBMS_TRACE.SET_PLSQL_TRACE ( trace_level INTEGER);
パラメータ
表136-4 SET_PLSQL_TRACEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
表136-1「DBMS_TRACEの定数」にリストされている1つ以上の定数を指定する必要があります。定数を合計することにより、複数のPL/SQL言語機能のトレースを同時に使用可能にできます。 制御定数 詳細は、「トレース・データの収集」を参照してください。 |