Mit jeder Ereignisdefinition ist ein Systemereignis verknüpft. Außerdem sind ihr eine oder zwei Triggerbedingungen zugeordnet. Der Event-Handler wird ausgelöst, wenn die Triggerbedingungen für das Systemereignis eintreten.
Die Triggerbedingungen werden in die WHERE-Klausel der CREATE EVENT-Anweisung eingebaut und können mit dem Schlüsselwort AND kombiniert werden. Die Triggerbedingungen haben folgendes Format:
event_condition( Bedingungsname ) Vergleichsoperator Wert
Das Argument Bedingungsname ist eine von mehreren vordefinierten Zeichenfolgen, die den unterschiedlichen Ereignistypen entsprechen. Beispiel: Sie können DBSize (Größe der Datenbankdatei in MByte) benutzen, um eine Triggerbedingung für das Systemereignis GrowDB einzustellen. Der Datenbankserver prüft nicht, ob der Bedingungsname zum Ereignistyp passt: Sie müssen dafür Sorge tragen, dass die Bedingung im Zusammenhang mit dem Ereignistyp einen Sinn ergibt.
Das Transaktionslog soll auf 10 MByte begrenzt werden:
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; |
Ein Administrator soll benachrichtigt werden, wenn der freie Speicher auf dem Medium mit der Datenbankdatei unter 10% fällt, wobei aber die Verarbeitungsroutine nur einmal alle 5 Minuten (300 Sekunden) ausgeführt werden darf:
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; |
Ein Administrator soll über einen versuchten Einbruch in die Datenbank in Kenntnis gesetzt werden:
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; |
Ein Prozess wird ausgeführt, wenn sich der Server mehr als 10 Minuten im Leerlauf befindet. Der Prozess darf aber nicht öfter als einmal pro Stunde ausgeführt werden:
CREATE EVENT Soak TYPE ServerIdle WHERE event_condition( 'IdleTime' ) >= 600 AND event_condition( 'Interval' ) >= 3600 HANDLER BEGIN MESSAGE ' Fügen Sie Ihren Code hier ein ... ' END; |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |