イベント(EVENT)は、特定の時刻または指定された時間間隔で自動的に実行される事前定義済みのSQLタスクです。各イベントは、トリガー条件(つまりスケジュール計画)、実行するSQL文またはストアドプロシージャで構成されています。イベントの定義はデータベース内に保存され、データベースと共にメンテナンスされるため、サーバーが再起動してもイベントは計画通りに実行されます。
トリガーとは異なり、トリガーはデータ操作に基づいてSQL実行をトリガーしますが、EVENTは時間の経過に基づいてSQL実行をトリガーします。これにより、ユーザーは事前設定された時間計画に従って、SQL文やストアドプロシージャを自動実行できます。この機能により、データベースの自動化処理能力が大幅に向上し、定期的なデータメンテナンス、統計集計、定時通知など、さまざまなシナリオに適しています。
説明
OceanBaseデータベースV4.2.5では、V4.2.5 BP2バージョンから、EVENTはcall文を実行してストアドプロシージャを呼び出すことをサポートしており、開始時刻や終了時刻の設定においても時間式や関数を利用できるようになりました。
主な機能:
スケジュールルール:
- 絶対時刻:イベントを特定の時刻に1回だけ実行するように設定できます。
- 定期実行:秒、分、時間、日、月などの周期で繰り返し実行することをサポートします。
- 複雑なスケジューリング:
EVERY、STARTS、ENDSなどのキーワードを組み合わせて使用することで、平日のみ実行、特定の日付範囲内で実行など、複雑なスケジューリングロジックを実現できます。
SQLのサポート:
- データの挿入、更新、削除を含む、任意の有効なSQL文を実行できます。
- トランザクション処理をサポートし、イベント実行の原子性と一貫性を保証します。
動的制御:
- サービスを再起動することなく、実行時にイベントスケジューラーを動的に有効または無効にできます。
- 既存のイベントの変更や削除をサポートし、ビジネスニーズの変化に対応できます。
権限要件
EVENTを使用するには、GRANT EVENT権限が必要です。OceanBaseデータベースの権限の詳細については、MySQLモードの権限分類を参照してください。
EVENTの起動と停止
イベントは特殊なイベントスケジューラースレッドによって実行されます。以下の方法でイベントスケジューラーを有効/無効にできます。
イベントスケジューラーを有効にする:
obclient> SET GLOBAL event_scheduler = ON;イベントスケジューラーを無効にする:
obclient> SET GLOBAL event_scheduler = OFF;
使用方法と注意点
EVERY intervalでSTART TIMEを設定しない場合、END TIMEは無限に実行されます。- 繰り返しイベントの場合、イベントの実行時間がスケジュール間隔より長いと、同じ時間に複数のイベントが発生する可能性があります。実行時間がスケジュール間隔より短いことをユーザーが保証する必要があります。
- 最大実行時間を設定することはできません(1回限りのイベントの最大実行時間は24時間)。
- 1つのイベントを使って別のイベントを作成することは推奨されません。
- 既に開始されたイベントのスケジュール計画を変更することはできません。
- 既に開始されたイベントの
event_nameを変更するべきではありません。変更すると、正常に終了できない可能性があります。 - 当該イベントが連続して16回失敗した場合、実行は停止します。