Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (A-D)

 

CREATE EVENT-Anweisung

Mit dieser Anweisung definieren Sie ein Ereignis und den zugehörigen Handler zum Automatisieren vordefinierter Aktionen und zur Definition geplanter Aktionen.

Syntax
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
Parameter
  • 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 keine Anforderungen während der abgelaufenen 30 Sekunden 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.

      Weitere Hinweise finden Sie unter Serveroption -fc.

    • 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. Weitere Hinweise finden Sie unter 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.

    Informationen 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 Name dagegen 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 Fenster der Datenbankservermeldungen 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.

    Immer wenn ein geplanter Event-Handler abgeschlossen wurde, werden die nächste geplante Zeit und das Datum berechnet.

    1. Wird die EVERY-Klausel verwendet, muss festgestellt werden, ob der nächste geplante Zeitpunkt auf den aktuellen Tag fällt und vor dem Ende des Bereichs BETWEEN … AND liegt. Wenn Ja, ist dies der nächste geplante Zeitpunkt.

    2. Wenn der nächste geplante Zeitpunkt nicht auf den aktuellen Tag fällt, muss das nächste Datum ermittelt werden, an dem das Ereignis ausgeführt werden soll.

    3. Entweder die START TIME für dieses Datum oder der Beginn des Bereichs BETWEEN … AND müssen ermittelt werden.

  • 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.

Bemerkungen

Ereignisse können auf zwei Arten verwendet werden:

  • Geplante Aktionen   Der Datenbankserver führt Aktionen nach einem Zeitplan durch. Sie können diese Funktionalität 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 durch, wenn ein vordefiniertes Ereignis eintritt. Sie können diese Funktionalität 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 (Ereignis-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 Meldungslog des Datenbankservers protokolliert. Weitere Hinweise finden Sie unter 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 Informationen über den Inhalt bereit, wie z.B. die Verbindungs-ID, die das Ereignis ausgelöst hat. Weitere Informationen zur Funktion event_parameter finden Sie unter EVENT_PARAMETER-Funktion [System].

Berechtigungen

DBA-Berechtigung ist erforderlich.

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.

Nebenwirkungen

Automatisches Festschreiben (Autocommit).

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Erweiterung des Herstellers

Beispiel

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;

Weitere Hinweise finden Sie unter Triggerbedingungen für Ereignisse definieren.