CREATE EVENT MONITOR ステートメントは、 データベースの使用中に発生する特定のイベントを記録するモニターを定義します。 各イベント・モニターの定義には、データベースがイベントを記録する場所も指定されます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むか、 あるいは対話式に発行することができます。 このステートメントは、動的に準備可能な実行可能ステートメントです。 しかし、バインド・オプション DYNAMICRULES BIND を適用する場合、 ステートメントを動的に準備することはできません (SQLSTATE 42509)。
許可
許可 ID の特権には、 SYSADM 権限または DBADM 権限のいずれかが含まれていなければなりません (SQLSTATE 42502)。
構文
>>-CREATE--EVENT--MONITOR--event-monitor-name--FOR--------------> .-,----------------------------------------------------------. V | >---------+-+-DATABASE----+-------------------------------------+--+> | +-TABLES------+ | | +-DEADLOCKS---+ | | +-TABLESPACES-+ | | '-BUFFERPOOLS-' | '--+-CONNECTIONS--+---+-----------------------------+-' +-STATEMENTS---+ '-WHERE--| Event Condition |--' '-TRANSACTIONS-' .-MANUALSTART--. >----WRITE--TO--+-PIPE--pipe-name--------------------+---+--------------+> '-FILE--path-name--| File Options |--' '-AUTOSTART----' .-LOCAL--. >-----+-----------------------+---+--------+------------------->< '-ON NODE--node-number--' '-GLOBAL-' イベント条件 .-AND | OR------------------------------------------------------------. V | |------+-----+--+--+-APPL_ID---+---+-=----------+---comparison-string--+--+-> '-NOT-' | +-AUTH_ID---+ | (1) | | | '-APPL_NAME-' +-<>---------+ | | +->----------+ | | | (1) | | | +->=---------+ | | +-<----------+ | | | (1) | | | +-<=---------+ | | +-LIKE-------+ | | '-NOT--LIKE--' | '-(Event Condition)------------------------------------' >---------------------------------------------------------------| ファイル・オプション |---+--------------------------------+--------------------------> | .-NONE------------. | '-MAXFILES--+-number-of-files-+--' >-----+--------------------------+---+--------------------+-----> | .-pages--. | '-BUFFERSIZE--pages--' '-MAXFILESIZE--+-NONE---+--' .-BLOCKED----. .-APPEND--. >-----+------------+---+---------+------------------------------| '-NONBLOCKED-' '-REPLACE-'
注:
説明
この文節は、WHERE 文節の特殊な形式であり、標準探索条件と混同してはなりません。
アプリケーションが特定のイベント・モニターに対するイベントを生成するかどうかを判別するために、 この WHERE 文節は次のように評価されます。
WHERE 文節は各イベントごとに評価されるわけではありません。
WHERE 文節の指定がない場合、指定したイベント・タイプのイベントがすべてモニターされます。
アプリケーション・プログラム名は、 (最後のパス区切り記号の後の) アプリケーション・プログラム・ファイル名の最初の 20 バイトです。
パイプの命名規則は、プラットフォームごとに異なります。 UNIX オペレーティング・システムでは、パイプ名はファイル名と同様に扱われます。 したがって、相対パイプ名を使用することができ、 相対パス名と同様に扱われます (下記の path-name を参照)。 ただし、OS/2、Windows 95 および Windows NT では、パイプ名に関して特殊な構文があります。 その結果、OS/2、Windows 95 および Windows NT では、絶対パイプ名が必要です。
パイプの存在は、イベント・モニターの作成時には検査されません。 監視元アプリケーションは、イベント・モニターが活動化された時点で、読み取り用パイプを作成し、 オープンしておく必要があります。 この時点でパイプが使用不能な場合には、イベント・モニターはオフになり、エラーがログに記録されます。 (つまり、AUTOSTART オプションの結果としてイベント・モニターがデータベースの開始時に活動化された場合、 イベント・モニターはエラーをシステム・エラー・ログに記録します)。 SET EVENT MONITOR STATE SQL ステートメントによってイベント・モニターが活動化された場合、 そのステートメントはエラーになります (SQLSTATE 58030)。
各ファイルの最大サイズとファイルの最大数とを指定することができます。 イベント・モニターが、1 つのイベント・レコードを 2 つのファイルに分割することはありません。 ただしイベント・モニターは、 互いに関連する複数のレコードを 2 つの異なるファイルに記録する場合があります。 そのデータを使用するアプリケーションでは、 イベント・ファイルの処理時にこのような関連する情報を追跡する必要があります。
ディレクトリーは、CREATE EVENT MONITOR の時に存在している必要はありません。 ただし、イベント・モニターの活動化される時点で、ターゲット・パスの存否の検査が行われます。 その時点で、ターゲット・パスが存在しない場合は、エラー (SQLSTATE 428A3) になります。
絶対パス (AIX の場合にルート・ディレクトリーで始まるパス、または OS/2 、 Windows 95 および Windows NT の場合にディスク識別子で始まるパス) を指定すると、指定したパスが使用されます。 相対パス (ルートから始まっていないパス) が指定されている場合は、 データベース・ディレクトリーの DB2EVENT ディレクトリーからの相対パスが使用されます。
相対パスが指定されている場合、 それを絶対パスに変換するために DB2EVENT ディレクトリーが使用されます。 したがって、絶対パスと相対パスの間に区別はありません。 絶対パスは SYSCAT.EVENTMONITORS カタログ視点に保管されます。
複数のイベント・モニターに指定するターゲット・パスを同じパスにすることはできます。 ただし、イベント・モニターの 1 つが初めて活動化されると、 ターゲット・ディレクトリーが空でないかぎり、 他のイベント・モニターはいずれも活動化することはできなくなります。
アプリケーションがイベント・ファイルを書き込んだ後、ディレクトリーからそれを削除した場合は、 イベント・モニターが作成するファイルの合計数が number-of-files を超えることがあります。 このオプションの使用によって、 ユーザーはイベント・データによるディスク・スペースの消費量が指定量を超えることがないようにすることができます。
ページ数は、少なくともイベント・バッファーのサイズ (ページ数) よりも大きくなければなりません。 この要件が満たされていない場合、エラー (SQLSTATE 428A4) になります。
各バッファーの最小サイズと、このオプションの指定がない場合のデフォルト・サイズは、 4 ページです (つまり、それぞれサイズが 16 K の 2 つのバッファー)。 バッファーはヒープから割り振られるので、 バッファーの最大サイズはモニター・ヒープ (MON_HEAP) のサイズによって制約されます。 多くのイベント・モニターを同時に使用する場合には、 MON_HEAP データベース構成パラメーターのサイズを大きくします。
データをパイプに書き込むイベント・モニターにも、 それぞれサイズが 1 ページの 2 つの内部 (構成不能) バッファーがあります。 これらのバッファーも、モニター・ヒープ (MON_HEAP) から割り振られます。 出力先がパイプである各活動イベント・モニターごとに、 データベース・ヒープのサイズを 2 ページ分大きくします。
新しく作成されたイベント・モニターがそのイベント・データを書き込むディレクトリーに既存のイベント・データがない場合、 CREATE EVENT MONITOR 時に APPEND オプションは適用されません。
規則
注
例
例 1: 次の例では、SMITHPAY と呼ばれるイベント・モニターを作成します。 このイベント・モニターは、データベースと、 JSMITH 許可 ID が所有する PAYROLL アプリケーションによって実行される SQL ステートメントに関するイベント・データを収集します。 データは、絶対パス /home/jsmith/event/smithpay/ に付加されます。 最大 25 のファイルが作成されます。 各ファイルの最大長は 4K ページ 1 024 個分です。 ファイル入出力は非ブロック化されます。
CREATE EVENT MONITOR SMITHPAY FOR DATABASE, STATEMENTS WHERE APPL_NAME = 'PAYROLL' AND AUTH_ID = 'JSMITH' WRITE TO FILE '/home/jsmith/event/smithpay' MAXFILES 25 MAXFILESIZE 1024 NONBLOCKED APPEND
例 2: 次の例では、DEADLOCKS_EVTS と呼ばれるイベント・モニターを作成します。 このイベント・モニターは、デッドロック・イベントを収集して、それらを相対パス DLOCKS に書き込みます。 1 つのファイルに書き込まれ、ファイル・サイズに限界はありません。 イベント・モニターが活動化されるたびに、 ファイル 00000000.evt が存在する場合にはそこにイベント・データが付加されます。 このイベント・モニターは、データベースが開始されるたびに開始されます。 入出力はデフォルト解釈によりブロック化されます。
CREATE EVENT MONITOR DEADLOCK_EVTS FOR DEADLOCKS WRITE TO FILE 'DLOCKS' MAXFILES 1 MAXFILESIZE NONE AUTOSTART
例 3: この例では、DB_APPLS と呼ばれるイベント・モニターを作成します。 このイベント・モニターは、接続イベントを収集し、 それらのデータを名前付きパイプ /home/jsmith/applpipe に書き込みます。
CREATE EVENT MONITOR DB_APPLS FOR CONNECTIONS WRITE TO PIPE '/home/jsmith/applpipe'