Definiert ein Ereignis und den zugehörigen Handler zum Automatisieren vordefinierter Aktionen und definiert geplante Aktionen.
CREATE EVENT [ Eigentümer.]Ereignisname [ TYPE Ereignistyp [ WHERE Triggerbedingung [ AND Triggerbedingung ] ... ] | SCHEDULE Planungsangabe, ... ] [ ENABLE | DISABLE ] [ AT { CONSOLIDATED | REMOTE | ALL } ] [ HANDLER BEGIN ... END ]
Ereignistyp : BackupEnd | Connect | ConnectFailed | DatabaseStart | DBDiskSpace | Deadlock | "Disconnect" | GlobalAutoincrement | GrowDB | GrowLog | GrowTemp | LogDiskSpace | MirrorFailover | MirrorServerDisconnect | RAISERROR | ServerIdle | TempDiskSpace
Triggerbedingung : event_condition( Bedingungsname ) { = | < | > | != | <= | >= } Wert
Planungsangabe : [ Planungsname ] { START TIME Startzeit | BETWEEN Startzeit AND Endzeit } [ EVERY Periode { HOURS | MINUTES | SECONDS } ] [ ON { ( Wochentag, ... ) | ( Monatstag, ... ) } ] [ START DATE Startdatum ]
Ereignisname : Bezeichner
Planungsname : Bezeichner
Wochentag : Zeichenfolge
Monatstag : Ganzzahl
Wert : Ganzzahl
Periode : Ganzzahl
Startzeit : Zeit
Endzeit : Zeit
Startdatum : Datum
CREATE EVENT-Klausel Der Ereignisname ist ein Bezeichner. Ein Ereignis hat einen Ersteller, den Benutzer, der das Ereignis erstellt hat. Der Event-Handler wird auf Grundlage der Berechtigungen dieses Erstellers ausgeführt. Die Ausführung ist dieselbe wie bei gespeicherten Prozeduren. Sie können keine Ereignisse erstellen, die anderen Benutzern gehören.
TYPE-Klausel Sie können die TYPE-Klausel mit einer optionalen WHERE-Klausel angeben oder SCHEDULE festlegen.
Der Ereignistyp ist einer der aufgelisteten systemdefinierten Ereignistypen. Bei Ereignistypen wird die Groß-/Kleinschreibung nicht berücksichtigt. Die Bedingungen, unter welchen dieser Ereignistyp ein Ereignis auslöst, legen Sie mit der WHERE-Klausel fest. Eine Beschreibung von nachstehend nicht angeführten Ereignistypen finden Sie unter Systemereignisse verstehen.
DiskSpace-Ereignistypen Wenn die Datenbank einen Event-Handler für einen der DiskSpace-Typen enthält, prüft der Datenbankserver alle 30 Sekunden den verfügbaren Speicherplatz auf jedem Medium, das der entsprechenden Datei zugeordnet ist.
Falls die Datenbank über mehr als einen DBSpace auf verschiedenen Laufwerken verfügt, prüft DBDiskSpace jedes Laufwerk und handelt abhängig vom kleinsten verfügbaren Speicherplatz.
Der Ereignistyp LogDiskSpace prüft den Speicherort des Transaktionslogs und aller Transaktionslogspiegel und gibt eine Meldung basierend auf dem kleinsten verfügbaren Speicherplatz aus.
DiskSpace-Ereignistypen werden unter Windows Mobile nicht unterstützt.
Der Ereignistyp TempDiskSpace prüft den Umfang des temporären Festplattenspeichers.
Wenn die geeigneten Ereignis-Handler definiert wurden (DBDiskSpace, LogDiskSpace oder TempDiskSpace), prüft der Datenbankserver alle 30 Sekunden den verfügbaren Speicher auf jedem Medium, das mit einer Datenbankdatei verbunden ist. Wenn ein Ereignis definiert wurde, um den Systemereignistyp ServerIdle zu verarbeiten, benachrichtigt der Datenbankserver den Handler, wenn während der abgelaufenen 30 Sekunden keine Anforderungen verarbeitet wurden.
Sie können die Option -fc beim Starten des Datenbankservers angeben, um eine Callback-Funktion zu implementieren, wenn der Datenbankserver Speichermangel im Dateisystem feststellt.
GlobalAutoIncrement-Ereignistyp Das Ereignis wird bei jeder Einfügung ausgelöst, wenn die Anzahl der verbleibenden Werte für GLOBAL AUTOINCREMENT geringer als 1% des Endbereichs ist. Eine typische Aktion für den Handler könnte darin bestehen, einen neuen Wert für die Option global_database_id basierend auf der Tabelle und der Anzahl der restlichen Werte anzufordern, die als Parameter für dieses Ereignis bereitgestellt wurden.
Sie können die Funktion event_condition mit RemainingValues als Argument für diesen Ereignistyp verwenden.
ServerIdle-Ereignistyp Wenn die Datenbank einen Event-Handler für den Typ ServerIdle enthält, prüft der Datenbankserver die Serveraktivität alle 30 Sekunden.
Datenbankspiegelungs-Ereignistypen Das MirrorServerDisconnect-Ereignis wird ausgelöst, wenn eine Verbindung vom Primärdatenbankserver zum Spiegel- bzw. Arbiterserver verloren geht, und das MirrorFailover-Ereignis wird ausgelöst, wenn ein Server Eigentümer der Datenbank wird. Siehe Systemereignisse bei der Datenbankspiegelung.
WHERE-Klausel Die Triggerbedingung bestimmt die Bedingung, unter der ein Ereignis ausgelöst wird. Um z.B. eine Aktion auszuführen, wenn der Plattenspeicher mit dem Transaktionslog mehr als 80% voll ist, verwenden Sie die folgende Trigger-auslösende Bedingung:
... WHERE event_condition( 'LogDiskSpacePercentFree' ) < 20 ... |
Das Argument der Funktion event_condition muss für den Ereignistyp gültig sein.
Sie können mehrere AND-Bedingungen für die WHERE-Klausel verwenden, OR-Bedingungen oder andere Bedingungen sind nicht zulässig.
Hinweise zu gültigen Argumenten finden Sie unter EVENT_CONDITION-Funktion [System].
SCHEDULE-Klausel Diese Klausel legt fest, wann geplante Aktionen stattfinden sollen. Die zeitliche Abfolge wird als eine Reihe von Trigger-auslösenden Bedingungen für die zugeordneten Aktionen behandelt, die im Event-Handler definiert sind.
Sie können mehr als einen Abfolgeplan für ein bestimmtes Ereignis und seine Verarbeitungsroutine erstellen. Damit können komplexe Abfolgen implementiert werden. Während Sie bei mehreren Abfolgeplänen einen Planungsnamen angeben müssen, ist der Planungsname bei einem einzigen Plan optional.
Ein geplantes Ereignis wiederholt sich, sobald seine Definition EVERY oder ON enthält. Wenn keines dieser Wörter verwendet wird, wird das Ereignis höchstens einmal ausgeführt. Beim Versuch, ein sich nicht-wiederholendes geplantes Ereignis zu erstellen, für das der Startzeitpunkt verstrichen ist, wird ein Fehler generiert. Wenn ein sich nicht-wiederholendes geplantes Ereignis abgelaufen ist, wird sein Abfolgeplan gelöscht, der Event-Handler jedoch nicht.
Die Zeiten für geplante Ereignisse werden berechnet, wenn die Abfolgepläne erstellt werden, und nochmals, wenn die Ausführung des Event-Handlers beendet wird. Die nächste Ereigniszeit wird berechnet, indem der Abfolgeplan oder die Pläne für das Ereignis untersucht werden und der nächste geplante Zeitpunkt ermittelt wird. Wenn ein Event-Handler angewiesen wird, jede Stunde zwischen 9:00 und 17:00 abzulaufen, und die Ausführung 65 Minuten dauert, findet diese um 9:00, 11:00, 13:00, 15:00 und 17:00 statt. Wenn sich die Ausführung überschneiden soll, müssen Sie mehr als ein Ereignis erstellen.
Die Unterklauseln einer Planungsdefinition lauten folgendermaßen:
START TIME-Klausel
Der erste geplante Zeitpunkt für jeden Tag, an dem das Ereignis geplant ist. Der Parameter Startzeit ist eine Zeichenfolge und kann keine Variable und kein Ausdruck wie NOW()
sein. Wenn START DATE angegeben wurde, bezieht sich START TIME auf dieses Datum. Wenn START DATE nicht angegeben wurde, umfasst
START TIME den aktuellen Tag (falls der Zeitpunkt noch nicht überschritten wurde) und alle darauf folgenden Tage (falls die
Planung EVERY oder ON enthält).
BETWEEN ... AND-Klausel
Ein Zeitabschnitt im Tagesverlauf, außerhalb dessen keine geplanten Zeitpunkte vorliegen. Die Parameter Startzeit und Endzeit sind Zeichenfolgen und können keine Variablen oder Ausdrücke wie NOW()
sein. Wenn START DATE angegeben wurde, beginnen die geplanten Zeitpunkte erst ab diesem Datum.
EVERY-Klausel Ein Intervall zwischen aufeinanderfolgenden geplanten Ereignissen. Geplante Ereignisse treten erst nach der unter START TIME angegebenen Startzeit für den Tag auf oder liegen in dem Bereich, der mit BETWEEN ... AND festgelegt wurde.
ON-Klausel Eine Liste von Tagen, an denen die geplanten Ereignisse eintreten. Der Standardwert ist täglich, sofern EVERY angegeben ist. Die Tage können als Tage der Woche oder des Monats angegeben werden.
Wochentage sind Montag, Dienstag etc. Sie können die Tage abgekürzt oder in Langform eingeben. Die Langform müssen Sie jedoch verwenden, wenn die verwendete Sprache nicht Englisch ist, nicht die vom Client in der Verbindungszeichenfolge verlangte Sprache ist, und nicht die Sprache ist, die im Meldungsfenster des Datenbankservers erscheint.
Monatstage sind Ganzzahlen zwischen 0 und 31. Ein Wert von "0" steht für den letzten Tag eines Monats.
START DATE-Klausel
Das Datum, an dem geplante Ereignisse zum ersten Mal eintreten sollen. Dieser Wert ist eine Zeichenfolge und kann keine
Variable und kein Ausdruck wie TODAY()
sein. Der Standardwert ist das aktuelle Datum.
Jedes Mal, wenn ein geplanter Event-Handler abgeschlossen ist, werden die folgenden Aktionen ausgeführt, um die nächste geplante Zeit und das Datum für das Ereignis zu berechnen:
Bei Verwendung der EVERY-Klausel muss festgestellt werden, ob der nächste geplante Zeitpunkt auf den aktuellen Tag fällt und (sofern dieser angegeben wurde) vor dem Ende des Bereichs BETWEEN ... AND liegt. Wenn ja, ist dies der nächste geplante Zeitpunkt.
Wenn der nächste geplante Zeitpunkt nicht auf den aktuellen Tag fällt, wird das nächste Datum, an dem das Ereignis ausgeführt werden soll, ermittelt und START TIME oder der Beginn des BETWEEN ... AND-Bereichs für dieses Datum verwendet.
ENABLE | DISABLE-Klausel Standardmäßig sind Event-Handler aktiviert. Wenn DISABLE angegeben ist, wird der Event-Handler nicht ausgeführt, selbst wenn der geplante Zeitpunkt erreicht wird oder die Trigger-auslösende Bedingung eintritt. Eine TRIGGER EVENT-Anweisung kann einen deaktivierten Event-Handler nicht zur Ausführung zwingen.
AT-Klausel Diese Klausel sollte nur unter folgenden Umständen verwendet werden: In einer SQL Remote-Umgebung verwenden Sie die AT-Klausel für die entfernten oder konsolidierten Datenbanken, um die Datenbanken zu begrenzen, in denen das Ereignis verarbeitet werden soll.
Wenn Sie die AT-Klausel beim Erstellen von Ereignissen für SQL Remote nicht verwenden, führen alle Datenbanken das Ereignis aus. Wenn diese Anweisung in einer konsolidierten Datenbank ausgeführt wird, hat sie keine Auswirkungen auf entfernte Datenbanken, die bereits extrahiert wurden.
HANDLER-Klausel Jedes Ereignis umfasst eine Verarbeitungsroutine.
Ereignisse können für folgende Zwecke verwendet werden:
Geplante Aktionen Der Datenbankserver führt Aktionen nach einem Zeitplan durch. Sie können diese Fähigkeit nutzen, um geplante Aufgaben wie Sicherungen, Gültigkeitsprüfungen und Abfragen durchzuführen, die verwendet werden, um Daten in Berichtstabellen einzufügen.
Aktionen zur Ereignisverarbeitung Der Datenbankserver führt Aktionen aus, wenn ein vordefiniertes Ereignis eintritt. Sie können diese Fähigkeit verwenden, um geplante Aufgaben durchzuführen, etwa die Limitierung von Festplattenspeicher, wenn eine Datei über einen bestimmten Prozentsatz hinaus anwächst. Aktionen von Event-Handlern werden festgeschrieben, wenn während des Ausführens keine Fehler erkannt werden, und zurückgesetzt, wenn Fehler auftreten.
Eine Ereignisdefinition umfasst zwei unterschiedliche Bestandteile. Die Triggerbedingung kann ein auftretendes Ereignis sein, wie z.B. das Überschreiten eines bestimmten Grenzwerts für einen Plattenspeicher. Ein Abfolgeplan ist eine Reihe von Zeiten, die alle als Triggerbedingung gehandhabt werden. Wenn eine Triggerbedingung erfüllt ist, wird der Event-Handler ausgeführt. Der Event-Handler umfasst eine oder mehrere festgelegte Aktionen innerhalb einer zusammengesetzten Anweisung (BEGIN... END).
Wenn keine Triggerbedingung oder Planungsspezifikation angegeben wird, kann nur eine explizite TRIGGER EVENT-Anweisung das Ereignis auslösen. Während der Entwicklung können Sie Event-Handler mithilfe von TRIGGER EVENT testen. Den Abfolgeplan oder die WHERE-Klausel fügen Sie hinzu, sobald der Test abgeschlossen ist.
Ereignisfehler werden im Datenbankserver-Meldungslog protokolliert. Siehe Datenbankserver-Aktionen protokollieren.
Nach jeder Ausführung eines Event-Handlers wird ein COMMIT ausgeführt, falls kein Fehler aufgetreten ist. Wenn es einen Fehler gegeben hat, wird ein ROLLBACK ausgeführt.
Wenn Event-Handler ausgelöst werden, stellt der Datenbankserver dem Event-Handler mit der Funktion event_parameter Kontextinformationen bereit, wie z.B. die Verbindungs-ID, die das Ereignis ausgelöst hat. Weitere Hinweise zur Funktion event_parameter finden Sie unter EVENT_PARAMETER-Funktion [System].
DBA-Berechtigung.
Event-Handler werden über eine separate Verbindung und basierend auf den Berechtigungen des Ereigniseigentümers ausgeführt. Um diese mit anderen Berechtigungen als DBA auszuführen, können Sie eine Prozedur vom Event-Handler aus aufrufen: Die Prozedur wird mit den Berechtigungen ihres Eigentümers ausgeführt. Die separate Verbindung zählt nicht zu den zehn Verbindungen, auf die der Personal Datenbankserver beschränkt ist.
Automatisches Festschreiben (Autocommit).
SQL/2008 Erweiterung des Herstellers.
Das folgende Beispiel weist den Datenbankserver an, eine automatische Sicherung auf Band unter Verwendung des ersten Bandlaufwerks jeden Tag um 1:00 Uhr durchzuführen.
CREATE EVENT DailyBackup SCHEDULE daily_backup START TIME '1:00AM' EVERY 24 HOURS HANDLER BEGIN BACKUP DATABASE TO '\\\\.\\tape0' ATTENDED OFF END; |
Der Datenbankserver wird angewiesen, nur eine automatische Sicherung des Transaktionslogs durchzuführen, jede Stunde, Montag bis Freitag zwischen 8 und 18 Uhr.
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; |
Siehe Triggerbedingungen für Ereignisse definieren.
Ermitteln Sie, wann ein Ereignis das nächste Mal ausgeführt werden soll:
SELECT DB_EXTENDED_PROPERTY( 'NextScheduleTime', 'HourlyLogBackup'); |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |