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 サーバ - データベース管理 » データベースの保守 » スケジュールとイベントの使用によるタスクの自動化 » システム・イベントの概要

 

イベントのトリガ条件の定義

各イベント定義には対応するシステム・イベントがあります。また、イベント定義は 1 つまたは複数のトリガ条件を持ちます。システム・イベントに対するトリガ条件が満たされるとイベント・ハンドラがトリガされます。

トリガ条件は CREATE EVENT 文の WHERE 句に含まれていて、AND キーワードを使用して結合できます。各トリガ条件は次のフォームで定義します。

event_condition( condition-name ) comparison-operator value

condition-name 引数は、さまざまなイベント・タイプに対応できるようにあらかじめ設定されている文字列から 1 つを選択します。たとえば、DBSize (メガバイト単位のデータベース・ファイル・サイズ) を使用して GrowDB システム・イベントに適したトリガ条件を構築することができます。データベース・サーバは、条件名とイベント・タイプの対応をチェックしません。イベント・タイプのコンテキストで条件に意味があるかどうかを確認する必要があります。

  • トランザクション・ログのサイズを 10 MB に制限します。

    CREATE EVENT LogLimit
    TYPE GrowLog
    WHERE event_condition( 'LogSize' ) > 10
    HANDLER
    BEGIN
      IF EVENT_PARAMETER( 'NumActive' ) = 1 THEN 
       BACKUP DATABASE
       DIRECTORY 'c:\\logs'
       TRANSACTION LOG ONLY
       TRANSACTION LOG RENAME MATCH;
      END IF;
    END;
  • データベース・ファイルを格納しているデバイスの空き領域が 10 % を下回ると管理者に通知しますが、ハンドラは 5 分間 (300 秒) に 2 回以上実行しません。

    CREATE EVENT LowDBSpace
    TYPE DBDiskSpace
    WHERE event_condition( 'DBFreePercent' ) < 10
    AND event_condition( 'Interval' ) >= 300
    HANDLER
    BEGIN
     CALL xp_sendmail( recipient='DBAdmin',
        subject='Low disk space',
        "message"='Database free disk space '
        || EVENT_PARAMETER( 'DBFreeSpace' ) );
    END;
  • データベースに侵入しようとする者を発見すると、管理者に通知します。

    CREATE EVENT SecurityCheck
    TYPE ConnectFailed
    HANDLER
    BEGIN
     DECLARE num_failures INT;
     DECLARE mins INT;
     INSERT INTO FailedConnections( log_time )
     VALUES ( CURRENT TIMESTAMP );
    
     SELECT COUNT( * ) INTO num_failures
     FROM FailedConnections
     WHERE log_time >= DATEADD( minute, -5,
      current timestamp );
     IF( num_failures >= 3 ) THEN
      SELECT DATEDIFF( minute, last_notification,
       current timestamp ) INTO mins
      FROM Notification;
      IF( mins > 30 ) THEN
       UPDATE Notification
       SET last_notification = current timestamp;
       CALL xp_sendmail( recipient='DBAdmin',
          subject='Security Check', "message"= 
           'over 3 failed connections in last 5 minutes' )
      END IF
     END IF
    END;
  • サーバが 10 分間以上アイドル状態にあると、処理を実行します。1 時間に 2 回以上は実行しません。

    CREATE EVENT Soak
    TYPE ServerIdle
    WHERE event_condition( 'IdleTime' ) >= 600
    AND event_condition( 'Interval' ) >= 3600
    HANDLER
    BEGIN
     MESSAGE ' Insert your code here ... '
    END;