CREATE EVENT MONITOR (しきい値違反) ステートメント

CREATE EVENT MONITOR (しきい値違反) ステートメントは、データベースの使用中に発生するしきい値違反イベントを記録するモニターを定義します。しきい値違反イベント・モニターの定義には、データベースがイベントを記録するロケーションも指定します。

呼び出し

しきい値違反イベント・モニターは、しきい値に違反したアプリケーションに関して、より多くの情報を収集できるようになっています。 それらのモニター・エレメントの追加による、 既存のしきい値違反イベント・モニターへの影響はありませんが、追加のアプリケーション情報を収集するためには、 既存のモニターをドロップして再作成する必要があります。

このステートメントは、アプリケーション・プログラムに組み込むか、あるいは対話式に発行することができます。これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、 動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

このステートメントの許可 ID が保持する特権には、以下のいずれかの権限が含まれている必要があります。
  • DBADM 権限
  • SQLADM 権限

構文

構文図を読む構文図をスキップするCREATE EVENT MONITORevent-monitor-name FOR THRESHOLD VIOLATIONS WRITE TO TABLEformatted-event-table-infoPIPEpipe-nameFILEpath-namefile-options AUTOSTARTMANUALSTARTON MEMBERmember-numberLOCAL
formatted-event-table-info
構文図を読む構文図をスキップする,evm-group(target-table-options) BUFFERSIZE4BUFFERSIZEpages BLOCKEDNONBLOCKED
target-table-options
構文図を読む構文図をスキップする1TABLEtable-nameINtablespace-namePCTDEACTIVATE100PCTDEACTIVATEinteger
file-options
構文図を読む構文図をスキップするMAXFILESNONEMAXFILESnumber-of-filesMAXFILESIZEpagesNONE BUFFERSIZE4BUFFERSIZEpages BLOCKEDNONBLOCKEDAPPENDREPLACE
注:
  • 1 各節は一度だけ指定できます。
  • 2 節は、スペースまたはコンマで区切ることができます。

説明

event-monitor-name
イベント・モニターの名前。 これは、1 部構成の名前です。 これは、SQL ID です (通常 ID または区切り ID)。 event-monitor-name (イベント・モニター名) は、 既にカタログに存在するイベント・モニターを指定する名前であってはなりません (SQLSTATE 42710)。
FOR
記録するイベント・タイプをこの後に指定します。
THRESHOLD VIOLATIONS
しきい値違反が起きた場合にイベント・モニターがしきい値違反イベントを記録することを指定します。こうしたイベントは、完了時だけでなく、アクティビティーのファイル内のどのポイントでも記録されます。
WRITE TO
データの出力先をこの後に指定します。
TABLE
イベント・モニターのデータの出力先が一連のデータベース表であることを示します。 イベント・モニターは、データ・ストリームを 1 つ以上の論理データ・グループに分け、 各グループを別個の表に挿入します。 ターゲット表のあるグループのデータは保持されますが、ターゲット表のないグループのデータは破棄されます。 グループに含まれる各モニター・エレメントは、同じ名前の表列にマップされます。 対応する表列を持つエレメントだけが表に挿入されます。 他のエレメントは破棄されます。
formatted-event-table-info
イベント・モニターのターゲット表を定義します。 この節は、記録される各グループごとに指定しなければなりません。しかし evm-group-info 節が指定されない場合には、 イベント・モニター・タイプのすべてのグループが記録されます。

論理データ・グループについて詳しくは、論理データ・グループおよびイベント・モニター出力表を参照してください。

evm-group
ターゲット表を定義する対象の論理データ・グループを指定します。 以下の表に示されているように、値はイベント・モニターのタイプに基づきます。
イベント・モニターのタイプ evm-group 値
しきい値違反
  • THRESHOLDVIOLATIONS
  • CONTROL
target-table-options
グループのターゲット表を指定します。
TABLE table-name
ターゲット表の名前を指定します。 ターゲット表は、非パーティション表でなければなりません。名前が非修飾の場合、表スキーマは CURRENT SCHEMA 特殊レジスターの値にデフォルト設定されます。名前が指定されない場合、 以下のように非修飾名は evm-group および event-monitor-name から派生します。
   substring(evm-group CONCAT '_'
     CONCAT event-monitor-name,1,128)
IN tablespace-name
表を作成する表スペースの名前を指定します。 表スペース名を指定しない場合、CREATE TABLE を使用して表スペース名を指定しないで表が作成される場合と同じプロセスで表スペースが選択されます。
PCTDEACTIVATE integer
イベント・モニターの表が自動ストレージ (非一時) または DMS 表スペースに作成される場合には、 PCTDEACTIVATE パラメーターは、どの程度表スペースが満たされた時点でイベント・モニターが自動的に非活動化されるかを指定します。 パーセンテージを表す値は、0 から 100 の範囲で指定可能です。この 100 は、表スペースが完全にいっぱいになるときにイベント・モニターが非アクティブになることを意味します PCTDEACTIVATE が指定されていない場合には、デフォルト値は 100 になります。 SMS 表スペースの場合、このオプションは無視されます。
重要: ターゲット表スペースの自動サイズ変更が有効になっている場合、PCTDEACTIVATE パラメーターを 100 に設定します。 または、この節全体を省略して、デフォルトの 100 が適用されるようにします。 それ以外の場合、表スペースが自動的にサイズ変更される前に、PCTDEACTIVTATE で指定したしきい値に表スペースが到達すると、イベント・モニターは予期せずに非アクティブになる場合があります。
target-table-options の値が指定されていない場合、CREATE EVENT MONITOR の処理は以下のように続行されます。
  • 派生した表名が使用されます。
  • デフォルトの表スペースが選択されます。
  • PCTDEACTIVATE パラメーターのデフォルトは 100 になります。
BUFFERSIZE pages
イベント・モニター・バッファーのサイズを指定します (4K ページ単位)。 表イベント・モニターはバッファーからのすべてのデータを挿入し、 バッファーが処理されると COMMIT を発行します。 バッファーが大きいほど、イベント・モニターによって使用されるコミット有効範囲は大きくなります。 活動頻度の高いイベント・モニターには、 比較的活動頻度の低いイベント・モニターよりも大きいバッファーを用意する必要があります。 モニターが開始されると、指定したサイズの 2 つのバッファーが割り振られます。 イベント・モニターは、二重バッファリングを使用して、非同期入出力を可能にします。

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

注: このキーワードは、しきい値違反イベント・モニターではサポートされません。 コンパイラーはこのキーワードを受け入れますが、そのキーワードはイベント・モニターの動作には影響ありません。
BLOCKED
エージェントが 2 つのイベント・バッファーがいっぱいであると判断した場合、 イベントを生成するそのエージェントはイベント・バッファーがディスクへ書き込まれるのを待機しなければならないことを指定します。 イベント・データが失われるのを防止する場合には、BLOCKED を選択する必要があります。 これはデフォルト・オプションです。
NONBLOCKED
エージェントが 2 つのイベント・バッファーがいっぱいであると判断した場合、 イベントを生成するそのエージェントは イベント・バッファーがディスクへ書き込まれるのを待機しないことを指定します。 NONBLOCKED の指定を伴うイベント・モニターは、BLOCKED の指定を伴うイベント・モニターほどには、 データベース操作の速度を低下させません。 ただし、NONBLOCKED のイベント・モニターは、活動頻度の高いシステムではデータの消失の可能性が高くなります。
注: このキーワードは、しきい値違反イベント・モニターではサポートされません。 コンパイラーはこのキーワードを受け入れますが、そのキーワードはしきい値違反イベント・モニターに影響を与えません。 BLOCKED キーワードが指定された場合のように、イベント・モニターが作成されます。
PIPE
イベント・モニター・データの出力先が名前付きパイプであることを指定します。 イベント・モニターは、 データを単一のストリーム (単一の無限に長いファイルであるかのように) でパイプに書き込みます。 データをパイプに書き込む時点で、イベント・モニターはブロック化書き込みを行いません。 パイプ・バッファーに空きがない場合、イベント・モニターはそのデータを廃棄します。 データを失いたくない場合、モニターするアプリケーション側でデータを迅速に読み取る必要があります。
pipe-name
イベント・モニターがデータを書き込むパイプの名前 (AIX® では FIFO) を指定します。
パイプの命名規則は、プラットフォームごとに異なります。
オペレーティング・システム 命名規則
AIX
HP-UX
Solaris
パイプ名はファイル名と同様に扱われます。したがって、相対パイプ名を使用することができ、相対パス名と同様に扱われます (path-name を参照)。
Linux パイプ名はファイル名と同様に扱われます。したがって、相対パイプ名を使用することができ、相対パス名と同様に扱われます (path-name を参照)。
Windows パイプ名には特殊な構文があるため、結果として絶対パイプ名が必要です。

パイプの存在は、イベント・モニターの作成時には検査されません。 モニター・アプリケーションは、イベント・モニターがアクティブ化される時点までに、読み取り用パイプを作成し、 オープンしておく必要があります。 この時点でパイプが使用不可である場合には、イベント・モニターはオフになり、エラーがログに記録されます。 (つまり、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
イベント・モニターがイベント・ファイルのデータを書き込む先のディレクトリーの名前を指定します。 このパスは、サーバーで既知でなければなりません。ただし、パス自体は別のデータベース・パーティションに存在していてもかまいません (例えば、NFS にマウントされたファイル)。 path-name (パス名) の指定には、ストリング定数を使用する必要があります。

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

絶対パスを指定すると、そのパスが使用されます。

相対パス (ルートから始まらないパス) が指定されている場合は、データベース・ディレクトリーの DB2EVENT ディレクトリーからの相対パスが使用されます。

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

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

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

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

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

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

各バッファーのデフォルト・サイズは 4 ページです (16K バッファーが 2 個割り振られます)。最小サイズは 1 ページです。 バッファーの最大サイズは、MAXFILESIZE パラメーターの値の他に、モニター・ヒープのサイズによっても制約されます。バッファーはそのヒープから割り振られるからです。 多くのイベント・モニターを同時に使用する場合にはmon_heap_sz データベース・マネージャー構成パラメーターのサイズを大きくします。

データをパイプに書き込むイベント・モニターにも、 それぞれサイズが 1 ページの 2 つの内部 (構成不可) バッファーがあります。 これらのバッファーも、モニター・ヒープ (MON_HEAP) から割り振られます。 出力先がパイプである各アクティブ・イベント・モニターごとに、 データベース・ヒープのサイズを 2 ページ分大きくしてください。
注: このキーワードは、しきい値違反イベント・モニターではサポートされません。 コンパイラーはこのキーワードを受け入れますが、そのキーワードはイベント・モニターの動作には影響ありません。
BLOCKED
エージェントが 2 つのイベント・バッファーがいっぱいであると判断した場合、 イベントを生成するそのエージェントはイベント・バッファーがディスクへ書き込まれるのを待機しなければならないことを指定します。 イベント・データが失われるのを防止する場合には、BLOCKED を選択する必要があります。 これはデフォルト・オプションです。
NONBLOCKED
エージェントが 2 つのイベント・バッファーがいっぱいであると判断した場合、 イベントを生成するそのエージェントは イベント・バッファーがディスクへ書き込まれるのを待機しないことを指定します。 NONBLOCKED の指定を伴うイベント・モニターは、BLOCKED の指定を伴うイベント・モニターほどには、 データベース操作の速度を低下させません。 ただし、NONBLOCKED のイベント・モニターは、活動頻度の高いシステムではデータの消失の可能性が高くなります。
注: このキーワードは、しきい値違反イベント・モニターではサポートされません。 コンパイラーはこのキーワードを受け入れますが、そのキーワードはしきい値違反イベント・モニターに影響を与えません。 BLOCKED キーワードが指定された場合のように、イベント・モニターが作成されます。
APPEND
イベント・モニターがオンになった時点でイベント・データ・ファイルが既に存在する場合、 そのイベント・モニターは新しいイベント・データをデータ・ファイルの既存のストリームに付加するように指定します。 イベント・モニターが再活動化されると、それはオフにならなかったかのように、 イベント・ファイルへの書き込みを再開します。 APPEND はデフォルトのオプションです。

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

REPLACE
イベント・モニターがオンになった時点でイベント・データ・ファイルが既に存在する場合、 そのイベント・モニターが、イベント・ファイルをすべて削除して、 ファイル 00000000.evt へのデータの書き込みを開始するように指定します。
MANUALSTART
SET EVENT MONITOR STATE ステートメントを使用してイベント・モニターを手動でアクティブ化しなければならないことを指定します。アクティブ化された MANUALSTART イベント・モニターは、SET EVENT MONITOR STATE ステートメントを使用するか、インスタンスを停止することによってのみ非活動状態にできます。
AUTOSTART
イベント・モニターを実行するデータベース・パーティションをアクティブ化した時点で、イベント・モニターも自動的にアクティブ化することを指定します。これは、しきい値違反イベント・モニターのデフォルトの動作です。
ON MEMBER member-number
ファイルまたはパイプのイベント・モニターを実行するメンバーを指定します。 モニター有効範囲が LOCAL と定義された場合、メンバーについてのみデータが収集されます。 I/O コンポーネントは指定のメンバーで物理的に稼働し、 指定されたファイルまたはパイプにレコードを書き込みます。

値が -1 である場合、I/O コンポーネントを任意のアクティブなメンバーから実行できます。 また、I/O コンポーネントが特定のメンバーで実行できなくなった場合、イベント・モニターは、別の使用可能なアクティブ・メンバー上で実行されている I/O コンポーネントで再開します。

この節は、表イベント・モニターには無効です。パーティション・データベース環境では、write-to-table イベント・モニターは、 ターゲット表のための表スペースが定義されているすべてのデータベース・パーティションで、イベントの実行と書き込みを行います。

この節が指定されていない場合、現在の接続先のメンバーが使用されます。

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

この節は、ファイルまたはパイプ・モニターに有効です。これは、表イベント・モニターには有効ではありません。

GLOBAL は、このタイプのイベント・モニターに対して有効な範囲ではありません。

規則

  • THRESHOLD VIOLATIONS イベント・タイプは、特定のイベント・モニター定義内の他のいずれかのイベント・タイプと組み合わせることはできません。

  • イベント・モニターの定義は、SYSCAT.EVENTMONITORS カタログ・ビューに記録されます。 イベント自体は、SYSCAT.EVENTS カタログ・ビューに記録されます。 ターゲット表の名前は、SYSCAT.EVENTTABLES カタログ・ビューに記録されます。
  • イベント・モニターを実行するメンバーがアクティブでない場合は、次回そのメンバーをアクティブ化した時点で、イベント・モニターもアクティブ化されます。
  • イベント・モニターは、アクティブ化の後に、明示的に非アクティブ化されるか、インスタンスがリサイクルされるまで、自動始動のイベント・モニターのように動作します。 つまり、メンバーが非アクティブ化された時点でイベント・モニターがアクティブであれば、そのメンバーがそれ以降に再びアクティブ化された時点で、イベント・モニターも明示的に再アクティブ化されます。
  • 表書き込みイベント・モニター: 一般注意:
    • すべてのターゲット表は、CREATE EVENT MONITOR ステートメントの実行時に作成されます。
    • 何らかの理由により表の作成に失敗すると、エラーがアプリケーション・プログラムに戻され、 CREATE EVENT MONITOR ステートメントは失敗します。
    • 1 つのターゲット表は、1 つのイベント・モニターでのみ使用可能です。 CREATE EVENT MONITOR 処理時に、ターゲット表が別のイベント・モニターによる使用のために既に定義されていることが検出されると、CREATE EVENT MONITOR ステートメントは失敗し、エラーがアプリケーション・プログラムに戻されます。 表名が SYSCAT.EVENTTABLES カタログ・ビューにある値と一致する場合には、その表は別のイベント・モニターによって使用されるよう定義されています。
    • CREATE EVENT MONITOR 処理時に、表が既に存在するものの別のイベント・モニターによって使用されるよう定義されていない 場合には、表は作成されず、処理は続行されます。 警告がアプリケーション・プログラムに出されます。
    • CREATE EVENT MONITOR ステートメントが実行される前に、 すべての表スペースが存在しなければなりません。 CREATE EVENT MONITOR ステートメントは、表スペースを作成しません。
    • LOCAL および GLOBAL キーワードは指定されている場合でも無視されます。 WRITE TO TABLE イベント・モニターの場合、イベント・モニターの出力プロセスまたはスレッドは、 インスタンスの各メンバーで開始され、 そうした個々のプロセスは実行しているメンバーのデータのみを報告します。
    • フラット・モニター・ログ・ファイルからの以下のイベント・タイプまたはパイプ・フォーマットは、 表書き込みイベント・モニターにより記録されません。
      • LOG_STREAM_HEADER
      • LOG_HEADER
      • DB_HEADER (エレメント db_name および db_path は記録されません。 エレメント conn_time は CONTROL に記録されます。)
    • パーティション・データベース環境では、 表スペースが存在するデータベース・パーティション上のターゲット表だけにデータが書き込まれます。 ターゲット表のための表スペースがいずれかのデータベース・パーティションに存在しない場合は、そのターゲット表についてのデータは無視されます。 この動作によってユーザーは、特定のデータベース・パーティション上にのみ存在する表スペースを作成して、 モニターするデータベース・パーティションのサブセットを選択できます。

      パーティション・データベース環境で、 いくつかのターゲット表がデータベース・パーティションに存在しないものの、 その同じデータベース・パーティションに他のターゲット表がある場合には、 そのデータベース・パーティションにあるターゲット表についてのデータだけが記録されます。

    • ユーザーは、すべてのターゲット表を手動で整理する必要があります。
    表列:
    • 表の列名は、イベント・モニター・エレメント ID と一致します。対応するターゲット表列のないイベント・モニター・エレメントは、 無視されます。
    • グループのエレメントの完全なリストを含む CREATE EVENT MONITOR コマンドを作成するには、db2evtbl コマンドを使用します。
    • モニター・エレメントに使用されている列のタイプは、以下のマッピングに相関します。
      SQLM_TYPE_STRING                     CHAR[n], VARCHAR[n] or CLOB(n)
                                           (イベント・モニター内のデータが
                                           n バイトを超えた場合
                                           切り捨てが行われる。)
      SQLM_TYPE_U8BIT and SQLM_TYPE_8BIT   SMALLINT, INTEGER or BIGINT
      SQLM_TYPE_16BIT and SQLM_TYPE_U16BIT SMALLINT, INTEGER or BIGINT
      SQLM_TYPE_32BIT and SQLM_TYPE_U32BIT INTEGER or BIGINT
      SQLM_TYPE_U64BIT and SQLM_TYPE_64BIT BIGINT
      sqlm_timestamp                       TIMESTAMP
      sqlm_time(elapsed time)              BIGINT
      sqlca:
        sqlerrmc                           VARCHAR[72]
        sqlstate                           CHAR[5]
        sqlwarn                            CHAR[11]
        other fields                       INTEGER or BIGINT
    • 列は、NOT NULL になるよう定義されています。
    • 他のターゲット表とは異なり、 CONTROL 表の列はモニター・エレメント ID と一致しません。 列は、以下のように定義されます。
      列名 データ・タイプ NULL 可能 説明
      PARTITION_KEY INTEGER N 分散キー (パーティション・データベースのみ)
      PARTITION_NUMBER INTEGER N データベース・パーティション番号 (パーティション・データベースのみ)
      EVMONNAME VARCHAR(128) N イベント・モニターの名前
      MESSAGE VARCHAR(128) N MESSAGE_TIME 列の性質を記述します。

      詳しくは、message - コントロール表メッセージ : モニター・エレメントを参照してください。

      MESSAGE_TIME TIMESTAMP N タイム・スタンプ
    • パーティション・データベース環境では、各表の最初の列は名前が PARTITION_KEY で、 NOT NULL であり、INTEGER タイプです。 この列は、表の分散キーとして使用されます。 この列の値は、各イベント・モニター・プロセスがそのプロセスを実行中のデータベース・パーティションにデータを挿入するように選択されます。つまり、挿入操作はイベント・モニター・プロセスを実行しているデータベース・パーティションでローカルに実行されます。 任意のデータベース・パーティションで、PARTITION_KEY フィールドは同じ値を含みます。 これは、データベース・パーティションがドロップされてデータ再配分が実行される場合に、 ドロップされるデータベース・パーティション上のすべてのデータは、公平に配分されるのではなく、 もう 1 つのデータベース・パーティションに渡されることを意味します。 したがって、データベース・パーティションを除去する前に、 そのデータベース・パーティション上のすべての表行の削除を考慮してください。
    • パーティション・データベース環境では、PARTITION_NUMBER という名前の列を各表で定義できます。 この列は NOT NULL で INTEGER タイプです。 データが挿入されたデータベース・パーティションの番号が含まれています。 PARTITION_KEY 列とは異なり、PARTITION_NUMBER 列は必須ではありません。 PARTITION_NUMBER 列は、非パーティション・データベース環境では使用できません。
    表属性:
    • デフォルトの表属性が使用されます。 分散キーを除き (パーティション・データベースのみ)、表の作成時には追加のオプションは指定されません。
    • 表の索引を作成できます。
    • 別の表属性 (揮発性、RI、トリガー、制約など) を追加できますが、イベント・モニター・プロセス (またはスレッド) はそれらを無視します。
    • 表属性として "not logged initially" (最初はログ記録されない) が追加されると、 最初の COMMIT 時にオフになり、オンに戻すことはできません。
    イベント・モニターのアクティブ化:
    • イベント・モニターをアクティブ化する際、すべてのターゲット表名が SYSCAT.EVENTTABLES カタログ・ビューから取り出されます。
    • パーティション・データベース環境では、 インスタンスの各データベース・パーティションでアクティブ化処理が行われます。 特定のデータベース・パーティションで、アクティブ化処理は、それぞれのターゲット表ごとに、 表スペースとデータベース・パーティション・グループを判別します。 イベント・モニターは、データベース・パーティションに少なくとも 1 つのターゲット表が存在する場合のみ、 そのデータベース・パーティションでアクティブ化します。 さらに、データベース・パーティションにいずれかのターゲット表が見つからない場合は、 そのターゲット表にはフラグが立てられ、 そのターゲット表を宛先とするデータが実行時処理中にドロップされるようにします。
    • イベント・モニターがアクティブ化する際にターゲット表が存在しない場合 (またはパーティション・データベース環境で、表スペースがデータベース・パーティションにない場合) には、アクティブ化は続行され、この表に挿入されるはずであったデータは無視されます。
    • アクティブ化処理は、各ターゲット表の妥当性検査をします。 妥当性検査がうまくいかないと、イベント・モニターのアクティブ化は失敗し、 管理ログにメッセージが書き込まれます。
    • パーティション・データベース環境におけるアクティブ化の際に、 FIRST_CONNECT および EVMON_START の CONTROL 表行は、 カタログ・データベース・パーティションでのみ挿入されます。 これには、 コントロール表の表スペースがカタログ・データベース・パーティションに存在することが必要です。 カタログ・データベース・パーティションにない場合には、挿入は実行されません。
    • パーティション・データベース環境では、 表書き込みイベント・モニターがアクティブであるときにパーティションがまだアクティブでない場合には、 イベント・モニターは次にそのパーティションがアクティブ化されたときにアクティブ化されます。
    ランタイム:
    • イベント・モニターは DATAACCESS 権限で実行されます。
    • イベント・モニターがアクティブであるときに、ターゲット表への挿入操作が失敗すると、
      • コミットされていない変更がロールバックされます。
      • メッセージが、管理ログに書き込まれます。
      • イベント・モニターが非アクティブになります。
    • イベント・モニターがアクティブである場合には、 イベント・モニター・バッファーの処理を終えるとローカル COMMIT が実行されます。
    • パーティション・データベース環境以外の環境では、最後のアプリケーションが終了すると (さらにそれまでにデータベースが明示的にアクティブ化されていない場合)、表書き込みイベント・モニターはすべて非アクティブ化されます。

      パーティション・データベース環境では、 カタログ・パーティションが非活動化されると表書き込みイベント・モニターが非活動化されます。

    • DROP EVENT MONITOR ステートメントはターゲット表をドロップしません。
    • 表書き込みイベント・モニターがアクティブになると、 イベント・モニターは、それがアクティブである間にターゲット表が変更されることを防ぐため、常に各ターゲット表に対する IN 表ロックを獲得します。 表ロックは、イベント・モニターがアクティブである間は、すべての表において維持されます。 ターゲット表のいずれかにおいて排他的アクセスが必要である場合 (例えば、ユーティリティーが実行される場合) には、まずイベント・モニターを非アクティブにして、そのようなアクセスを試行する前に表ロックを解放します。
  • 代替構文: 以下の構文は、製品間の互換性のためにのみサポートされています。これらの代替は非標準であり、使用すべきではありません。
    • Db2_ENFORCE_MEMBER_SYNTAX レジストリー変数が ON に設定されている場合を除き、DBPARTITIONNUM または NODE を MEMBER の代わりに指定できます。
    • target-table-options 節では、コンマを使って複数のオプションを分離することができます。

DBTHRESHOLDVIOLATIONS という名前のしきい値違反イベント・モニターを定義します。
   CREATE EVENT MONITOR DBTHRESHOLDVIOLATIONS
       FOR THRESHOLD VIOLATIONS
       WRITE TO TABLE
       THRESHOLDVIOLATIONS (TABLE THRESHOLDVIOLATIONS_DBTHRESHOLDVIOLATIONS
                            IN USERSPACE1
                            PCTDEACTIVATE 100),
       CONTROL (TABLE CONTROL_DBTHRESHOLDVIOLATIONS
                IN USERSPACE1
                PCTDEACTIVATE 100)
       AUTOSTART;