イベントとイベントに関連付けて定義済みアクションを自動化するイベントハンドラーを定義し、スケジュールされたアクションを定義します。
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 オプションを指定して、データベースサーバーでファイルシステムがいっぱいになった場合のコールバック関数を実装できます。
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 条件やその他の条件は使用できません。
SCHEDULE 句 この句は、スケジュールされたアクションをいつ実行するかを指定します。時刻のシーケンスは、イベントハンドラーに定義された関連するアクションのトリガー条件セットとして動作します。
1 つのイベントとそのハンドラーに対し、複数のスケジュールを作成できます。これにより、複雑なスケジュールを実装できます。複数のスケジュールがある場合は、schedule-name を必ず指定しなければなりませんが、スケジュールが 1 つしかない場合は、schedule-name を省略できます。
スケジュールされたイベントの定義に 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 はその日付とそれ以降の毎日 (スケジュールに EVERY または ON が含まれる場合) を表します。START DATE を指定しない場合、START TIME
は現在の日付 (時刻が経過していない場合) とそれ以降の毎日 (スケジュールに EVERY または ON が含まれる場合) となります。START TIME start-time 句は BETWEEN start-time AND '23:59:59' と同義です。
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()
などの式にはできません。デフォルトは現在の日付です。
スケジュールされたイベントハンドラーが完了するたびに、イベントに対してスケジュールされた次の時刻と日付を計算するために次のアクションが実行されます。
EVERY 句を使用した場合は、次のスケジュールされた時刻が現在の日付にあり、BETWEEN...AND 句で指定された範囲の終わりより前であるかどうかを調べます (範囲が指定された場合)。そうであれば、これが次のスケジュールされた時刻となります。
次のスケジュールされた時刻が現在の日付にない場合は、イベントが実行される次の日付を調べ、その日付の START TIME、または BETWEEN...AND で指定された範囲の始まりを確認します。
ENABLE | DISABLE 句 イベントハンドラーはデフォルトで有効になっています。DISABLE を指定すると、スケジュールされた時刻に達したりトリガー条件が発生しても、イベントハンドラーは起動しません。TRIGGER EVENT 文は、無効に設定されているイベントハンドラーを起動しません。
AT 句 SQL Remote 設定時にリモートデータベースまたは統合データベースで AT 句を使用してイベントを処理するデータベースを制限する場合にのみ、この句を使用してください。
SQL Remote のイベント作成時に AT 句を使用しなかった場合は、すべてのデータベースでイベントが実行されます。統合データベースで実行される場合、この文はすでに抽出されているリモートデータベースには影響しません。
イベントは次の操作に使用できます。
アクションのスケジュール データベースサーバーは、時刻指定されたスケジュールに沿ってアクションを実行します。この機能を使用すると、バックアップ、妥当性検査、レポートテーブルへのデータ追加に使用するクエリなどのタスクをスケジュールして実行できます。
イベント処理アクション データベースサーバーは、事前に定義されたイベントが発生するとアクションを実行します。この機能を使用すると、ディスク領域の使用量が指定の割合を超えたときのディスク領域の制限などのタスクを、スケジュールして実行できます。実行中にエラーが検出されなかった場合は、イベントハンドラーアクションがコミットされ、エラーが検出された場合は、ロールバックされます。
イベント定義は 2 つの部分からなります。トリガー条件とは、ディスク領域の使用量が指定のスレッショルドを超えるなどの出来事をいいます。スケジュールとは、時刻のセットのことで、それぞれの時刻がトリガー条件の役割を果たします。トリガー条件が満たされると、イベントハンドラーが実行されます。イベントハンドラーには、複合文 (BEGIN ...END) の中に指定された 1 つまたは複数のアクションが含まれています。
トリガー条件やスケジュールを指定しない場合は、明示的な TRIGGER EVENT 文だけがイベントをトリガーします。開発段階では TRIGGER EVENT を使ってイベントハンドラーをテストし、テストの完了後にスケジュールまたは WHERE 句を追加することができます。
イベントエラーはデータベースサーバーメッセージログに出力されます。
イベントハンドラーが実行されるたびに、エラーが発生しなかった場合、COMMIT が発生します。エラーが生成された場合は、ROLLBACK が発生します。
イベントハンドラーがトリガーされると、データベースサーバーは event_parameter 関数を使用して、イベントをトリガーした接続 ID などのコンテキスト情報をイベントハンドラーに渡します。
DBA 権限。
イベントハンドラーは、イベント所有者のパーミッションに基づいて別の接続上で実行されます。DBA 以外の権限で実行するには、イベントハンドラーからプロシージャーを呼び出します。プロシージャーは、その所有者のパーミッションを使用して実行されます。イベントハンドラーが実行される接続は、パーソナルデータベースサーバーの最大接続数である 10 には含められません。
オートコミット。
SQL/2008 ベンダー拡張。
データベース・サーバに対して、毎日午前 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; |
次にスケジュールされているイベントの実行時期を決定します。
SELECT DB_EXTENDED_PROPERTY( 'NextScheduleTime', 'HourlyLogBackup'); |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |