SQL 解説書

CREATE EVENT MONITOR

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-'
 

注:

  1. これらの演算子の他の形式もサポートされます。 詳細については、基本述部を参照してください。

説明

event-monitor-name
イベント・モニターの名前を指定します。 これは、1 つの部分からなる名前です。 これは、SQL 識別子です (通常識別子または区切り識別子)。 event-monitor-name (イベント・モニター名) は、 すでにカタログに存在するイベント・モニターを指定する名前であってはなりません (SQLSTATE 42710)。

FOR
記録するイベント・タイプをこの後に指定します。

DATABASE
最後のアプリケーションがデータベースから切断された場合に、 イベント・モニターがそのデータベース・イベントを記録することを指定します。

TABLES
最後のアプリケーションがデータベースから切断された場合に、 イベント・モニターが活動状態の各表の表イベントを記録することを指定します。 活動状態の表とは、データベースに最初に接続した時点以降に変更が行われた表です。

DEADLOCKS
デッドロックが発生した場合に、 イベント・モニターがデッドロック・イベントを記録することを指定します。

TABLESPACES
最後のアプリケーションがデータベースから切断された場合に、 イベント・モニターが表スペース・イベントを記録することを指定します。

BUFFERPOOLS
最後のアプリケーションがデータベースから切断された場合に、 イベント・モニターがバッファー・プール・イベントを記録することを指定します。

CONNECTIONS
アプリケーションがデータベースから切断された場合に、 イベント・モニターが接続イベントを記録することを指定します。

STATEMENTS
SQL ステートメントの実行が完了した時点で、 イベント・モニターがステートメント・イベントを記録することを指定します。

TRANSACTIONS
トランザクションが完了した時点で (すなわち、 コミットまたはロールバックの操作が行われた時点)、 イベント・モニターがトランザクション・イベントを記録することを指定します。

WHERE event condition
どの接続が CONNECTION、STATEMENT、 または TRANSACTION イベントを引き起こすかを判別するフィルターを定義します。 特定の接続に関してイベント条件 (event condition) の結果が真の場合、 その接続は要求されたイベントを生成します。

この文節は、WHERE 文節の特殊な形式であり、標準探索条件と混同してはなりません。

アプリケーションが特定のイベント・モニターに対するイベントを生成するかどうかを判別するために、 この WHERE 文節は次のように評価されます。

  1. イベント・モニターが初めてオンになった時点の活動状態の各接続が評価されます。
  2. それ以後のデータベースへの新たな接続は、その接続時に評価されます。

WHERE 文節は各イベントごとに評価されるわけではありません。

WHERE 文節の指定がない場合、指定したイベント・タイプのイベントがすべてモニターされます。

APPL_ID
各接続のアプリケーション ID を、該当の接続が CONNECTION、STATEMENT、 または TRANSACTION のいずれのイベント(指定による) を生成するかを判別するために comparison-string (比較ストリング) と比較しなければならないことを指定します。

AUTH_ID
各接続の許可 ID を、該当の接続が CONNECTION、STATEMENT、 または TRANSACTION のいずれのイベント(指定による) を生成するかを判別するために comparison-string と比較しなければならないことを指定します。

APPL_NAME
各接続のアプリケーション・プログラム名を、該当の接続が CONNECTION、 STATEMENT、または TRANSACTION のいずれのイベント(指定による) を生成するかを判別するために comparison-string と比較しなければならないことを指定します。

アプリケーション・プログラム名は、 (最後のパス区切り記号の後の) アプリケーション・プログラム・ファイル名の最初の 20 バイトです。

comparison-string
データベースに接続する各アプリケーションの APPL_ID、AUTH_ID、 または APPL_NAME と比較するストリングを指定します。 comparison-string (比較ストリング) は、 ストリング定数でなければなりません (ホスト変数や他のストリング式は使用できません)。

WRITE TO
データの出力先をこの後に指定します。

PIPE
イベント・モニター・データの出力先が名前付きパイプであることを指定します。 イベント・モニターは、 データを単一のストリーム (単一の無限に長いファイルであるかのように) でパイプに書き込みます。 データをパイプに書き込む時点で、イベント・モニターはブロック化書き込みを行いません。 パイプ・バッファーに余地がない場合、イベント・モニターはそのデータを廃棄します。 データを失いたくない場合、監視するアプリケーション側でデータを迅速に読み取る必要があります。

pipe-name
イベント・モニターがデータを書き込むパイプの名前 (AIX では FIFO) を指定します。

パイプの命名規則は、プラットフォームごとに異なります。 UNIX オペレーティング・システムでは、パイプ名はファイル名と同様に扱われます。 したがって、相対パイプ名を使用することができ、 相対パス名と同様に扱われます (下記の path-name を参照)。 ただし、OS/2、Windows 95 および Windows NT では、パイプ名に関して特殊な構文があります。 その結果、OS/2、Windows 95 および Windows NT では、絶対パイプ名が必要です。

パイプの存在は、イベント・モニターの作成時には検査されません。 監視元アプリケーションは、イベント・モニターが活動化された時点で、読み取り用パイプを作成し、 オープンしておく必要があります。 この時点でパイプが使用不能な場合には、イベント・モニターはオフになり、エラーがログに記録されます。 (つまり、AUTOSTART オプションの結果としてイベント・モニターがデータベースの開始時に活動化された場合、 イベント・モニターはエラーをシステム・エラー・ログに記録します)。 SET EVENT MONITOR STATE SQL ステートメントによってイベント・モニターが活動化された場合、 そのステートメントはエラーになります (SQLSTATE 58030)。

FILE
イベント・モニターのデータの出力先がファイル (または一連のファイル) であることを示します。 イベント・モニターは、拡張子 "evt" を伴う一連の 8 文字の番号のファイルとして、 データのストリームを書き出します (たとえば、00000000.evt、00000001.evt、および 00000002.evt)。 データが細かく分割されている場合でも、 データは 1 つの論理ファイルとみなす必要があります (つまり、 データ・ストリームの最初はファイル 00000000.evt の最初のバイトであり、 データ・ストリームの最後は、ファイル nnnnnnnn.evt の最後のバイトになります)。

各ファイルの最大サイズとファイルの最大数とを指定することができます。 イベント・モニターが、1 つのイベント・レコードを 2 つのファイルに分割することはありません。 ただしイベント・モニターは、 互いに関連する複数のレコードを 2 つの異なるファイルに記録する場合があります。 そのデータを使用するアプリケーションでは、 イベント・ファイルの処理時にこのような関連する情報を追跡する必要があります。

path-name
イベント・モニターがイベント・ファイルのデータを書き込む先のディレクトリーの名前を指定します。 パスはサーバーにおいて既知である必要があります。 ただし、パス自体は別の区分またはノードにある可能性があります (たとえば UNIX 系のシステムでは、 NFS にマウントされたファイルである場合もあります)。 path-name (パス名) の指定には、ストリング定数を使用する必要があります。

ディレクトリーは、CREATE EVENT MONITOR の時に存在している必要はありません。 ただし、イベント・モニターの活動化される時点で、ターゲット・パスの存否の検査が行われます。 その時点で、ターゲット・パスが存在しない場合は、エラー (SQLSTATE 428A3) になります。

絶対パス (AIX の場合にルート・ディレクトリーで始まるパス、または OS/2 、 Windows 95 および Windows NT の場合にディスク識別子で始まるパス) を指定すると、指定したパスが使用されます。 相対パス (ルートから始まっていないパス) が指定されている場合は、 データベース・ディレクトリーの DB2EVENT ディレクトリーからの相対パスが使用されます。

相対パスが指定されている場合、 それを絶対パスに変換するために DB2EVENT ディレクトリーが使用されます。 したがって、絶対パスと相対パスの間に区別はありません。 絶対パスは SYSCAT.EVENTMONITORS カタログ視点に保管されます。

複数のイベント・モニターに指定するターゲット・パスを同じパスにすることはできます。 ただし、イベント・モニターの 1 つが初めて活動化されると、 ターゲット・ディレクトリーが空でないかぎり、 他のイベント・モニターはいずれも活動化することはできなくなります。

ファイル・オプション
ファイル形式のオプションを指定します。

MAXFILES NONE
イベント・モニターが作成するイベント・ファイルの数に制限がないことを指定します。 これはデフォルト値です。

MAXFILES number-of-files
特定の 1 つのイベント・モニターについて、 1 時点で存在するイベント・モニター・ファイルの数に限界があることを指定します。 イベント・モニターがファイルをもう 1 つ作成しなければならない場合、 ディレクトリー内の .evt ファイルの数が number-of-files よりも少ないかどうかが検査されます。 すでにこの限界に達している場合、イベント・モニターはオフになります。

アプリケーションがイベント・ファイルを書き込んだ後、ディレクトリーからそれを削除した場合は、 イベント・モニターが作成するファイルの合計数が number-of-files を超えることがあります。 このオプションの使用によって、 ユーザーはイベント・データによるディスク・スペースの消費量が指定量を超えることがないようにすることができます。

MAXFILESIZE pages
各イベント・モニター・ファイルのサイズに限界があることを指定します。 イベント・モニターは、新しいイベント・レコードをファイルに書き込む場合、 そのファイルが pages (4K ページ単位のページ数) を超えないかどうかを調べます。 結果のファイルが大きすぎる場合、イベント・モニターはその次のファイルに切り替えます。 このオプションのデフォルト値は次のとおりです。
  • OS/2、Windows 95 および Windows NT - 200 個の 4K ページ
  • UNIX - 1000 個の 4K ページ

ページ数は、少なくともイベント・バッファーのサイズ (ページ数) よりも大きくなければなりません。 この要件が満たされていない場合、エラー (SQLSTATE 428A4) になります。

MAXFILESIZE NONE
ファイルのサイズに限界を設定しないことを指定します。 MAXFILESIZE NONE を指定すると、MAXFILES 1 も指定する必要があります。 このオプションは、特定のイベント・モニターのイベント・データすべてを 1 つのファイルに入れることを示します。 このような場合、イベント・ファイルは 00000000.evt だけになります。

BUFFERSIZE pages
イベント・モニター・バッファーのサイズを指定します (4K ページ単位)。 イベント・モニターのパフォーマンスを向上させるために、 すべてのイベント・モニターのファイル入出力はバッファーに入れられます。 バッファーが大きいほど、イベント・モニターによって行われる入出力は少なくなります。 活動頻度の高いイベント・モニターには、 比較的活動頻度の低いイベント・モニターよりも大きいバッファーを用意する必要があります。 モニターが開始されると、指定したサイズの 2 つのバッファーが割り振られます。 イベント・モニターは、二重バッファリングを使用して、非同期入出力を可能にします。

各バッファーの最小サイズと、このオプションの指定がない場合のデフォルト・サイズは、 4 ページです (つまり、それぞれサイズが 16 K の 2 つのバッファー)。 バッファーはヒープから割り振られるので、 バッファーの最大サイズはモニター・ヒープ (MON_HEAP) のサイズによって制約されます。 多くのイベント・モニターを同時に使用する場合には、 MON_HEAP データベース構成パラメーターのサイズを大きくします。

データをパイプに書き込むイベント・モニターにも、 それぞれサイズが 1 ページの 2 つの内部 (構成不能) バッファーがあります。 これらのバッファーも、モニター・ヒープ (MON_HEAP) から割り振られます。 出力先がパイプである各活動イベント・モニターごとに、 データベース・ヒープのサイズを 2 ページ分大きくします。

BLOCKED
エージェントが 2 つのイベント・バッファーがいっぱいであると判断した場合、 イベントを生成するそのエージェントはイベント・バッファーがディスクへ書き込まれるのを待機しなければならないことを指定します。 イベント・データが失われるのを防止したい場合には、BLOCKED を選択する必要があります。 これはデフォルトのオプションです。

NONBLOCKED
エージェントが 2 つのイベント・バッファーがいっぱいであると判断した場合、 イベントを生成するそのエージェントは イベント・バッファーがディスクへ書き込まれるのを待機しないことを指定します。 NONBLOCKED の指定を伴うイベント・モニターは、BLOCKED の指定を伴うイベント・モニターほどには、 データベース操作の速度を低下させません。 ただし、NONBLOCKED のイベント・モニターは、活動度の高いシステムではデータの 消失の可能性が高くなります。

APPEND
イベント・モニターがオンになった時点でイベント・データ・ファイルがすでに存在する場合、 そのイベント・モニターは新しいイベント・データをデータ・ファイルの既存のストリームに付加するように指定します。 イベント・モニターが再活動化される場合、それはオフにならなかったかのように、 イベント・ファイルへの書き込みを再開します。 APPEND はデフォルトのオプションです。

新しく作成されたイベント・モニターがそのイベント・データを書き込むディレクトリーに既存のイベント・データがない場合、 CREATE EVENT MONITOR 時に APPEND オプションは適用されません。

REPLACE
イベント・モニターがオンになった時点でイベント・データ・ファイルがすでに存在する場合、 そのイベント・モニターが、イベント・ファイルをすべて削除して、 ファイル 00000000.evt へのデータの書き込みを開始するように指定します。

MANUALSTART
データベースが開始されるたびに、 イベント・モニターが自動的には開始されないことを指定します。 MANUALSTART オプションを伴うイベント・モニターは、 SET EVENT MONITOR STATE ステートメントを使用して、 手操作で活動化する必要があります。 これはデフォルトのオプションです。

AUTOSTART
データベースが開始されるたびに、 イベント・モニターが自動的に開始されることを指定します。

ON NODE
特定の区分を指定することを示すキーワードです。

node-number
イベント・モニターが実行され、そのイベントを書き込む区分の番号を指定します。 モニターの効力範囲が GLOBAL として定義されている場合、 すべての区分が指定の区分番号に報告を行います。 入出力構成要素は指定の区分で物理的に稼働し、 レコードをその区分の /tmp/dlocks ディレクトリーに書き込みます。

GLOBAL
イベント・モニターはすべての区分について報告します。 DB2 ユニバーサル・データベース バージョン 7 の区分データベースの場合、 GLOBAL として定義できるのはデッドロックイベント・モニターだけです。 グローバルイベント・モニターは、システムのすべてのノードのデッドロックを報告します。

LOCAL
イベント・モニターは稼働している区分についてのみ報告します。 この報告は、データベース活動の部分的なトレースです。 これはデフォルト値です。

規則

例 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'


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]