Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (A ~ D)

 

CREATE EVENT 文

この文は、イベントとイベントに関連付けて定義済みアクションを自動化するイベント・ハンドラを定義し、スケジュールされたアクションを定義するときに使用します。

構文
CREATE EVENT [ owner.]event-name
[ TYPE event-type
         [ WHERE trigger-condition [ AND trigger-condition ] ... ]
    | SCHEDULE schedule-spec, ... ]
[ ENABLE | DISABLE ]
[ AT { CONSOLIDATED | REMOTE | ALL } ]
[ HANDLER
      BEGIN
...
     END ]
event-type :
  BackupEnd 
| Connect
| ConnectFailed 
| DatabaseStart
| DBDiskSpace
| Deadlock 
| "Disconnect"
| GlobalAutoincrement 
| GrowDB
| GrowLog 
| GrowTemp
| LogDiskSpace 
| MirrorFailover
| MirrorServerDisconnect 
| RAISERROR
| ServerIdle 
| TempDiskSpace
trigger-condition :
event_condition( condition-name ) { 
= 
| < 
| > 
| != 
| <= 
| >= 
} value
schedule-spec :
[ schedule-name ]
   { START TIME start-time | BETWEEN start-time AND end-time }
   [ EVERY period { HOURS | MINUTES | SECONDS } ]
   [ ON { ( day-of-week, ... ) | ( day-of-month, ... ) } ]
   [ START DATE start-date ]
event-name : identifier
schedule-name : identifier
day-of-week : string
day-of-month : integer
value : integer
period : integer
start-time : time
end-time : time
start-date : date
パラメータ
  • CREATE EVENT 句   イベント名は識別子です。イベントには作成者が関連付けられます。これはイベントを作成したユーザであり、イベント・ハンドラはその作成者のパーミッションで実行されます。これはストアド・プロシージャの実行と同じです。他のユーザが所有するイベントを作成することはできません。

  • TYPE 句   オプションの WHERE 句と一緒に TYPE 句を指定するか、または SCHEDULE を指定できます。

    event-type は、リストされたシステム定義のイベント・タイプの 1 つです。イベント・タイプでは大文字と小文字を区別しません。event-type がイベントをトリガする条件を指定するには、WHERE 句を使用します。以下にリストされていないイベントタイプの説明については、システム・イベントの概要を参照してください。

    • DiskSpace イベント・タイプ   データベースに DiskSpace タイプの 1 つに対応するイベント・ハンドラがある場合、データベース・サーバは、使用するファイルに対応する各デバイスの空き領域を 30 秒おきにチェックします。

      データベースが別々のドライブに複数の DB 領域を持っている場合、DBDiskSpace は各ドライブをチェックし、その中で最小の空き領域に基づいて動作します。

      LogDiskSpace イベント・タイプは、トランザクション・ログのロケーションと、トランザクション・ログ・ミラーがあればそのロケーションをチェックし、最小の空き領域に基づいてレポートします。

      DiskSpace イベント・タイプは、Windows Mobile ではサポートされていません。

      TempDiskSpace イベント・タイプは、テンポラリ・ディスク領域の容量をチェックします。

      適切なイベント・ハンドラが定義されている場合 (DBDiskSpace、LogDiskSpace、または TempDiskSpace)、データベース・サーバは、データベース・ファイルに対応する各デバイスの空き領域を 30 秒おきにチェックします。同様に、システム・イベント・タイプ ServerIdle を処理するようにイベントが定義されている場合、データベース・サーバは、前の 30 秒間に要求が処理されなかったときにハンドラを通知します。

      データベース・サーバの起動時に -fc オプションを指定して、データベース・サーバでファイル・システムがいっぱいになった場合のコールバック関数を実装できます。

      -fc サーバ・オプションを参照してください。

    • GlobalAutoIncrement イベント・タイプ   このイベントは、GLOBAL AUTOINCREMENT の残りの値の数がその範囲の終わり 1% 未満になったときに、それぞれの挿入に対して発生します。このハンドラの一般的なアクションは、このイベントのパラメータとして指定されたテーブルと残りの値の数に基づいて、global_database_id オプションの新しい値を要求することです。

      event_condition 関数と RemainingValues をこのイベント・タイプの引数として使用できます。

    • ServerIdle イベント・タイプ   データベースに ServerIdle タイプのイベント・ハンドラがある場合、データベース・サーバは 30 秒おきにサーバのアクティビティをチェックします。

    • データベース・ミラーリングのイベント・タイプ   MirrorServerDisconnect イベントは、プライマリ・データベース・サーバからミラー・サーバまたは監視サーバへの接続が失われたときに発生します。MirrorFailover イベントは、サーバがデータベースの所有権を取得したときに発生します。データベース・ミラーリングにおけるシステム・イベントを参照してください。

  • WHERE 句   トリガ条件は、イベントが起動する条件を決定します。たとえば、トランザクション・ログが書き込まれるディスクの使用率が 80% を超えたときにアクションを実行する場合は、次のようなトリガ条件を使用します。
    ...
    WHERE event_condition( 'LogDiskSpacePercentFree' ) < 20
    ...

    event_condition 関数には、イベント・タイプに有効な引数を指定してください。

    複数の AND 条件を使って WHERE 句を構成できますが、OR 条件やその他の条件は使用できません。

    有効な引数の詳細については、EVENT_CONDITION 関数 [システム]を参照してください。

  • SCHEDULE 句   この句は、スケジュールされたアクションをいつ実行するかを指定します。時刻のシーケンスは、イベント・ハンドラに定義された関連するアクションのトリガ条件セットとして動作します。

    1 つのイベントとそのハンドラに対し、複数のスケジュールを作成できます。これにより、複雑なスケジュールを実装できます。複数のスケジュールがある場合は、スケジュール名を必ず指定しなければなりませんが、スケジュールが 1 つしかない場合は、スケジュール名は省略できます。

    スケジュールされたイベントの定義に EVERY または ON が含まれる場合、そのイベントは反復されます。このどちらの予約語も使用されていない場合、イベントは最大でも 1 回しか実行されません。反復されないスケジュールされたイベントを作成する場合に、そのイベントの開始時刻が過ぎているときは、エラーになります。反復されないスケジュールされたイベントが経過すると、スケジュールは削除されますが、イベント・ハンドラは削除されません。

    スケジュールされたイベントの時刻は、スケジュールの作成時に計算され、イベント・ハンドラの実行が完了したときに再計算されます。次のイベント時刻を計算するときには、イベントのスケジュールが調べられ、起動時刻が現在以降のスケジュールから次のスケジュール時刻が決定されます。9:00 から 5:00 の間に 1 時間ごとに実行され、実行に 65 分を要するイベント・ハンドラは、9:00、11:00、1:00、3:00、5:00 に実行されます。実行を重複させる場合は、複数のイベントを作成します。

スケジュール定義に使用する句は次のとおりです。

  • START TIME 句   イベントがスケジュールされた各日の最初のスケジュール時刻。start-time パラメータは文字列であり、変数や NOW() などの式にはできません。START DATE を指定した場合、START TIME はその日付を参照します。START DATE を指定しない場合、START TIME は現在の日付 (時刻が経過していない場合) とそれ以降の毎日 (スケジュールに EVERY または ON が含まれる場合) となります。

  • BETWEEN ... AND 句   1 日のうち、スケジュールされた時刻が発生する範囲。start-time パラメータと end-time パラメータは文字列であり、変数や NOW() などの式にはできません。START DATE を指定した場合、スケジュールされた時刻はその日が来るまで発生しません。

  • EVERY 句   連続してスケジュールするときのイベント発生の間隔。スケジュールされたイベントは、その日の START TIME より後、または BETWEEN ... AND で指定された範囲内でのみ発生します。

  • ON 句   スケジュールされたイベントが発生する日のリスト。EVERY を指定した場合、デフォルトは毎日です。これらは曜日または日付として指定できます。

    曜日は、Mon、Tues のようになります。Monday のような完全形も使用できます。使用言語が、英語でない場合、接続文字列でクライアントによって要求された言語でない場合、データベース・サーバ・メッセージ・ウィンドウに表示される言語でない場合は、完全形を使用します。

    日付は、0 ~ 31 の整数で指定します。0 は月の末日を表します。

  • START DATE 句   スケジュールされたイベントが開始される日付。この値は文字列であり、変数や TODAY() などの式にはできません。デフォルトは現在の日付です。

    スケジュールされたイベント・ハンドラが完了するたびに、次のスケジュールされた時刻と日付が計算されます。

    1. EVERY 句を使用した場合は、次のスケジュールされた時刻が現在の日付にあり、BETWEEN ... AND で指定された範囲の終わりより前であるかどうかを調べます。そうであれば、これが次のスケジュールされた時刻となります。

    2. 次のスケジュールされた時刻が現在の日付にない場合は、イベントが実行される次の日付を調べます。

    3. その日付の START TIME、または BETWEEN ... AND で指定された範囲の始まりを確認します。

  • ENABLE | DISABLE 句   イベント・ハンドラはデフォルトで有効になっています。DISABLE を指定すると、スケジュールされた時刻に達したりトリガ条件が発生しても、イベント・ハンドラは起動しません。TRIGGER EVENT 文は、無効に設定されているイベント・ハンドラを起動しません

  • AT 句   SQL Remote 設定時にリモート・データベースまたは統合データベースで AT 句を使用してイベントを処理するデータベースを制限する場合にのみ、この句を使用してください。

    SQL Remote のイベント作成時に AT 句を使用しなかった場合は、すべてのデータベースでイベントが実行されます。統合データベースで実行される場合、この文はすでに抽出されているリモート・データベースには影響しません。

  • HANDLER 句   各イベントが 1 つのハンドラを持ちます。

備考

イベントは次の 2 つの方法で使用できます。

  • アクションのスケジュール   データベース・サーバは、時刻指定されたスケジュールに沿ってアクションを実行します。この機能を使用すると、バックアップ、妥当性検査、レポート・テーブルへのデータ追加に使用するクエリなどのタスクをスケジュールして実行できます。

  • イベント処理アクション   データベース・サーバは、事前に定義されたイベントが発生するとアクションを実行します。この機能を使用すると、ディスク領域の使用量が指定の割合を超えたときのディスク領域の制限などのタスクを、スケジュールして実行できます。実行中にエラーが検出されなかった場合は、イベント・ハンドラ・アクションがコミットされ、エラーが検出された場合は、ロールバックされます。

イベント定義は 2 つの部分からなります。トリガ条件とは、ディスク領域の使用量が指定のスレッショルドを超えるなどの出来事をいいます。スケジュールとは、時刻のセットのことで、それぞれの時刻がトリガ条件の役割を果たします。トリガ条件が満たされると、イベント・ハンドラが実行されます。イベント・ハンドラには、複合文 (BEGIN... END) の中に指定された 1 つまたは複数のアクションが含まれています。

トリガ条件やスケジュールを指定しない場合は、明示的な TRIGGER EVENT 文だけがイベントをトリガします。開発段階では TRIGGER EVENT を使ってイベント・ハンドラをテストし、テストの完了後にスケジュールまたは WHERE 句を追加することができます。

イベント・エラーはデータベース・サーバ・メッセージ・ログに出力されます。データベース・サーバの動作のロギングを参照してください。

イベント・ハンドラが実行されるたびに、エラーが発生しなかった場合、COMMIT が発生します。エラーが生成された場合は、ROLLBACK が発生します。

イベント・ハンドラがトリガされると、データベース・サーバは event_parameter 関数を使用して、イベントをトリガした接続 ID などのコンテキスト情報をイベント・ハンドラに渡します。event_parameter の詳細については、EVENT_PARAMETER 関数 [システム]を参照してください。

パーミッション

DBA 権限が必要です。

イベント・ハンドラは、イベント所有者のパーミッションに基づいて別の接続上で実行されます。DBA 以外のパーミッションで実行するには、イベント・ハンドラからプロシージャを呼び出します。プロシージャは、その所有者の権限を使用して実行されます。イベント・ハンドラが実行される接続は、パーソナル・データベース・サーバの最大接続数である 10 には含められません。

関連する動作

オートコミット。

参照
標準と互換性
  • SQL/2003   ベンダ拡張。

データベース・サーバに対して、毎日午前 1 時に最初のテープ・ドライブを使用してテープへの自動バックアップを実行するように指示します。

CREATE EVENT DailyBackup
SCHEDULE daily_backup
START TIME '1:00AM' EVERY 24 HOURS
HANDLER
   BEGIN
      BACKUP DATABASE TO '\\\\.\\tape0'
      ATTENDED OFF
   END;

データベース・サーバに対して、月曜日から金曜日までの午前 8 時から午後 6 時まで、1 時間ごとにトランザクション・ログのみの自動バックアップを実行するように指示します。

CREATE EVENT HourlyLogBackup
SCHEDULE hourly_log_backup
BETWEEN '8:00AM' AND '6:00PM'
EVERY 1 HOURS ON
   ('Monday','Tuesday','Wednesday','Thursday','Friday')
HANDLER
   BEGIN
      BACKUP DATABASE DIRECTORY 'c:\\database\\backup'
      TRANSACTION LOG ONLY
      TRANSACTION LOG RENAME
   END;

イベントのトリガ条件の定義を参照してください。