CREATE SCHEDULER RULE

Mit dem CREATE SCHEDULER RULE-Befehl können Sie eine neue Schedulerregel definieren.

Syntax

CREATE [OR REPLACE] SCHEDULER RULE <rule_name> [INCLUDING ADMIN] AS <rule>
Dabei steht ' <rule> für:
[IF <condition> [<condition> ... ] THEN] {LIMIT <max_plans> [PER USER] | <action>}
Dabei steht ' <condition> für:
RESOURCEGROUP {IS [NOT] <rsg_name> | [NOT] IN (<rsg_name>, ...)} |  
PRIORITY {IS [NOT] <priority> | [NOT] IN (<priority>, ...)} |
TYPE {IS [NOT] <plan_type> | [NOT] IN (<plan_type>, ...)} |  
DATABASE {IS [NOT] <db_name> | [NOT] IN (<db_name>, ...)} |  
USER {IS [NOT] <user_name> | [NOT] IN (<user_name>, ...)} |  
TABLE {IS [NOT] <table> | [NOT] IN (<table>, ...)} |  
TAG {IS [NOT] <tag_value> | [NOT] IN (<tag_value>)} |  
CLIENT_USER_ID {IS [NOT] '<string>' | [NOT] IN (<string>, ...)} |  
CLIENT_APPLICATION_NAME {IS [NOT] '<string>' | [NOT] IN (<string>, ...)} |
CLIENT_WORKSTATION_NAME {IS [NOT] '<string>' | [NOT] IN (<string>, ...)} |
CLIENT_ACCOUNTING_STRING {IS [NOT] '<string>' | [NOT] IN (<string>, ...)} |
ESTIMATE { < | <= | >= | > } <seconds>
Dabei steht ' action für:
LIMIT <max_plans> [PER USER]
SET [NOT] SHORT | 
SET ESTIMATE <seconds> | 
ADD TAG <tag_value> | 
SET PRIORITY {LOW | NORMAL | HIGH | CRITICAL} |
{INCREASE | DECREASE} PRIORITY |  
EXECUTE AS RESOURCEGROUP <rsg_name> |
ABORT '<message_for_client>' 

Eingaben

Tabelle 1 Eingaben
Eingabe Beschreibung
OR REPLACE Wenn eine Regel mit dem angegebenen Namen nicht bereits vorhanden ist, wird unabhängig davon, ob die OR REPLACE-Phrase angegeben ist, eine neue Regel erstellt. Wenn jedoch bereits eine Regel mit dem angegebenen Namen vorhanden ist, gilt im Zusammenhang mit der OR REPLACE-Phrase Folgendes:
  • Ist die Phrase angegeben, wird die Regel überschrieben.
  • Ist sie nicht angegeben, wird eine Fehlernachricht ausgegeben und die Regel wird nicht überschrieben.
<Regelname> Der Name der zu erstellenden Regel. Dieser Name muss unter den globalen Objekten eindeutig sein, das heißt, keine andere Schedulerregel, keine Datenbank, keine Gruppe und kein Benutzer darf denselben Namen haben.
INCLUDING ADMIN Die Regel soll auch auf Administratorpläne angewendet werden.
<Option> Eine der in Tabelle 2 beschriebenen Optionen.
<value> Einer der in Tabelle 2 beschriebenen Werte.
ESTIMATE Eine Grenze für die geschätzten Kosten des Plans (in Sekunden). Wenn eine Schedulerregel sowohl eine Unter- als auch eine Obergrenze angibt, muss die Untergrenze kleiner als die Obergrenze sein.
<Sekunden> Eine Anzahl Sekunden.
LIMIT Legen Sie die maximale Anzahl Pläne fest, die gleichzeitig ausgeführt werden können, wenn sie die von der Schedulerregel angegebenen Bedingungen erfüllen. Beispiel:
  • Die folgende Regel verhindert, dass mehr als zwei Pläne von Benutzern, die zur Ressourcengruppe RG1 gehören, gleichzeitig ausgeführt werden:
    IF RESOURCEGROUP IS RG1 THEN LIMIT 2
  • Die folgende Regel verhindert, dass mehrere Pläne der Datenbank DB1 gleichzeitig ausgeführt werden:
    IF DATABASE IS DB1 THEN LIMIT 1
Wird das Limit auf 0 gesetzt, wird die Ausführung aller Pläne verhindert. Auf diese Weise können alle Pläne, die bestimmte Kriterien erfüllen, gestoppt werden.
PER USER Das angegebene Limit wird auf jeden Benutzer angewendet. Die folgende Regel erlaubt beispielsweise, dass jeder Benutzer maximal zwei Pläne ausführt:
LIMIT 2 PER USER
Dies entspricht dem Erstellen der folgenden Regel für jeden Benutzer:
IF USER IS <username> THEN LIMIT 2
SET SHORT Legen Sie das SQB-Flag (SQB: Short Query Bias - Priorisierung kurzer Abfragen) des Plans fest, d. h. der Plan wird als zu einer kurzen Abfrage gehörig markiert. Dies geschieht unabhängig von der Schätzung des Jobaufwands und vom Schwellenwert, der über das Attribut host.schedSQBNominalSecs festgelegt ist.
SET ESTIMATE Legen Sie den geschätzten Aufwand des Plans fest (in Sekunden). Dadurch wird die vom Planer berechnete Schätzung überschrieben. Dies hat jedoch keine Auswirkung auf die Einstellung des SQB-Flags des Plans, selbst wenn der Wert unter den durch das host.schedSQBNominalSecs-Attribut festgelegten Schwellenwert fällt.
ADD TAG Fügen Sie dem Plan den angegebenen Tag hinzu.
SET PRIORITY Setzen Sie die Priorität des Plans auf den angegebenen Wert. Eine mithilfe des SET SYSTEM DEFAULT-Befehls für den Benutzer oder die Gruppe des Plans festgelegte maximale Priorität wird ignoriert.
INCREASE oder DECREASE PRIORITY Heben Sie die Priorität eines Plans um eine Stufe an oder setzen Sie sie um eine Stufe herab. Eine mithilfe des SET SYSTEM DEFAULT-Befehls für den Benutzer oder die Gruppe des Plans festgelegte maximale Priorität wird ignoriert. Ein Versuch, die Priorität LOW herabzusetzen oder die Priorität CRITICAL anzuheben, wird ignoriert.
EXECUTE AS RESOURCEGROUP Führen Sie den Plan aus, als ob er zur angegebenen Ressourcengruppe gehören würde.
ABORT Plan abbrechen. Dies bietet die Möglichkeit, Abfragen, die bestimmte Tabellen, Datenbanken oder Benutzer einbeziehen, temporär nicht zuzulassen, beispielsweise während der Wartung. Die angegebene Nachricht wird an den Benutzer übermittelt, der die Abfrage, die dem abgebrochenen Plan zugeordnet ist, ausgegeben hat.
Tabelle 2. Optionen und Werte
Option Wert
RESOURCEGROUP Die Ressourcengruppe des Plans. Üblicherweise handelt es sich um die Ressourcengruppe des Benutzers, der die entsprechende Abfrage übergeben hat; sie kann jedoch durch eine modifizierende Schedulerregel geändert werden. Die angegebene Ressourcengruppe muss bereits vorhanden sein.
PRIORITÄT Die Priorität des Plans:
  • KRITISCH
  • HOCH
  • NORMAL
  • NIEDRIG
TYP Der Plantyp:
LOAD
Der Plan lädt (liest) Daten aus einer externen Tabelle.
UNLOAD
Der Plan entlädt (schreibt) Daten in eine externe Tabelle.
GENERATE STATISTICS
Der Plan generiert oder aktualisiert Datenbankstatistik
GROOM
Der Plan entfernt veraltete und gelöschte Datensätze aus Tabellen.
UDX
Der Plan führt ein benutzerdefiniertes Objekt aus.
DATABASE Die Datenbank, auf die vom Plan zugegriffen werden soll. Dies ist die Datenbank, mit der die Sitzung verbunden wird. Die angegebene Datenbank muss bereits vorhanden sein.
BENUTZER Der Benutzer, der den Job übergeben hat, der dem Plan entspricht. Der angegebene Benutzer muss bereits vorhanden sein. Der angegebene Benutzer kann nicht der Benutzer mit Administratorberechtigung sein. Wenn zu Administratorjobs gehörige Pläne eingeschlossen werden sollen, müssen Sie die Option INCLUDING ADMIN angeben.
TABELLE Eine Benutzertabelle, auf die vom Plan zugegriffen wird. Sie können keine Ansicht oder RST (Row-secure Table) angeben. Die angegebene Tabelle muss bereits vorhanden sein. Wenn der Datenbankname oder Schemaname benötigt wird, um die Tabelle eindeutig anzugeben, muss er als Teil des Tabellennamens angegeben werden.
TAG Eine Zeichenfolge, die dem Plan zugeordnet werden soll und mit der auf den Plan verwiesen werden kann. Es kann höchstens eine TAG-Bedingung für eine Schedulerregel angegeben werden.
CLIENT_USER_ID1 Die Benutzer-ID, unter der die Anwendung ausgeführt wird, die die entsprechende Abfrage übergeben hat.
CLIENT_APPLICATION_NAME1 Der Name der Anwendung, die die entsprechende Abfrage übergeben hat.
CLIENT_WORKSTATION_NAME1 Der Hostname der Workstation, auf der die Anwendung ausgeführt wird, die die entsprechende Abfrage übergeben hat.
CLIENT_ACCOUNTING_STRING1 Der Wert der Abrechnungszeichenfolge. Dieser Wert wird für die Sitzung angegeben.
1
Die Angabe muss in Hochkommas gesetzt werden und muss dem Format entsprechen, das beim Festlegen des Werts vorlag. Beispiel:
  • Da der für den folgenden SET-Befehl angegebene Wert nicht in Hochkommas gesetzt ist, wird er in die Standardschreibweise konvertiert:
    SET CLIENT_USER_ID TO Victoria
    Wenn Großschreibung als Standardschreibweise festgelegt ist, muss eine Schedulerregel, die diese Client-ID referenziert, 'VICTORIA' als ID angeben.
  • Da der für den folgenden SET-Befehl angegebene Wert in Hochkommas gesetzt ist, wird er nicht in die Standardschreibweise konvertiert:
    SET CLIENT_USER_ID TO 'Victoria'
    Eine Schedulerregel, die diese Client-ID referenziert, muss 'Victoria' als ID angeben.

Ausgaben

Tabelle 3. Ausgaben von CREATE SCHEDULER RULE
Ausgabe Beschreibung
CREATE SCHEDULER RULE Das System gibt diese Nachricht zurück, wenn der Befehl erfolgreich beendet wurde.
ERROR Wenn ein Versuch, eine Schedulerregel zu erstellen, fehlschlägt, gibt das System eine Fehlernachricht zurück, die die Fehlerursache angibt, z. B.

ERROR: CREATE SCHEDULER RULE: object RULE1 already exists as a SCHEDULER RULE.

Berechtigungen

Sie müssen der Benutzer mit Administratorberechtigung sein oder Sie müssen über die Berechtigung für Schedulerregeln verfügen.

Verwendung

Es folgen Verwendungsbeispiele:

  • Eine Schedulerregel mit dem Namen cube_builder_1 erstellen, die jeweils nur die Ausführung eines einzigen Plans aus einer Sitzung mit dem cube-Tag zulässt:
    MYDB.MYSCH(USER)=>
      CREATE SCHEDULER RULE cube_builder_1 AS IF TAG IS cube THEN LIMIT 1;
  • Eine Schedulerregel mit dem Namen r23_eom1 erstellen, die die Priorität eines beliebigen Plans verringert, der seinen Ursprung in einer Sitzung mit dem eom-Tag hat:
    MYDB.MYSCH(USER)=>
      CREATE SCHEDULER RULE r23_eom1 AS IF TAG IS eom THEN DECREASE PRIORITY;
  • Eine Schedulerregel mit dem Namen r23_up1 erstellen, die die Priorität eines beliebigen Plans erhöht, für den eine Kostenschätzung zwischen 5 und 12 Sekunden vorliegt:
    MYDB.MYSCH(USER)=>
      CREATE SCHEDULER RULE r23_up1 AS
      IF ESTIMATE >= 5 ESTIMATE < 12 THEN INCREASE PRIORITY;
  • Die folgenden Befehle erstellen Schedulerregeln, die sicherstellen, dass die Anzahl Pläne, die Datenbankstatistik generieren oder aktualisieren, begrenzt ist, aber dass solche Pläne schnell ausgeführt werden:
    MYDB.MYSCH(USER)=>
      CREATE SCHEDULER RULE genstats_limit AS
      IF TYPE IS GENERATE STATISTICS THEN LIMIT 2;
    
    MYDB.MYSCH(USER)=>
      CREATE SCHEDULER RULE genstats_prio AS
      IF TYPE IS GENERATE STATISTICS THEN INCREASE PRIORITY;
  • Die folgenden Befehle erstellen Schedulerregeln, die den Inhalt verschiedener Clientinformationsfelder verwenden, um die Prioritäten der Pläne festzulegen, die zu Sitzungen gehören:
    MYDB.MYSCH(USER)=>
      CREATE SCHEDULER RULE a1_default_prio_report AS
      IF CLIENT_APPLICATION_NAME IS Cognos THEN SET PRIORITY NORMAL;
    
    MYDB.MYSCH(USER)=>
      CREATE SCHEDULER RULE a2_top_prio_report AS
      IF CLIENT_ACCOUNTING_STRING IS CEO_report THEN SET PRIORITY CRITICAL;
    
    MYDB.MYSCH(USER)=>
      CREATE SCHEDULER RULE a3_high_prio_report AS
      IF CLIENT_ACCOUNTING_STRING IN ('weekly_report', 'daily_report') 
      THEN SET PRIORITY HIGH;
    
    MYDB.MYSCH(USER)=>
      CREATE SCHEDULER RULE a4_low_prio_user AS
      IF CLIENT_USER_ID IS sikspak THEN SET PRIORITY LOW;