Verschiedene Möglichkeiten der Skript-Ausführung

Die geplante und regelmäßige Ausführung von SQL-Skripten steht nachfolgend im Fokus. Üblicherweise werden OMS-SL-Skripte aus dem ODBC Management Studio durch den Benutzer über den Befehl Ausführen gestartet. Daneben gibt es aber häufig auch die Anforderung, dass ein Skript erst zu einem bestimmten Zeitpunkt oder gar in regelmäßigen Abständen zu starten ist. Nachfolgend werden zwei Möglichkeiten der Skript-Ausführung beschrieben, die erst ab OMS 2.1 verfügbar sind.

Skript-Ausführung via Kommandozeile

Das in der Datei Skript.osl gespeicherte OMS-SL-Skript kann per Kommandozeile (oder aus einer Batch-Datei) folgendermaßen ausgeführt werden:

  OMS32.exe Skript.osl -autostart;

Ein Skript kann mit der EXIT-Anweisung beendet werden. Soll darüber hinaus auch das OMS beendet werden, dann kann das ab OMS 2.1 mit dem Parameter SHUTDOWN erfolgen:

  -- Skript.osl
  -- ...
  
  -- Skript und OMS beenden:
  EXIT SHUTDOWN; 

Wird ein Skript auf diese Weise beendet, dann wird unabhängig von den Einstellungen im Optionen-Dialog keine Rückfrage mehr an den Benutzer erfolgen (z.B. ob bestehende Datenbank-Verbindungen tatsächlich beendet oder geänderte Dateien noch gespeichert werden sollen).

Batch-Modus

Die Ausführung eines OMS-SL-Skriptes kann im sogenannten Batch-Modus in regelmäßigen Abständen erfolgen. Hierfür wurde mit OMS 2.1 die BATCHMODE-Anweisung eingeführt.

Standardmäßig ist der Batch-Modus nicht aktiv. Mit der Anweisung

BATCHMODE OFF;

kann der Batch-Modus ausgeschaltet werden.

Der Batch-Modus kann mit dem Parameter TIMER aktiviert werden. Mit der Anweisung

BATCHMODE TIMER 60;

wird das Skript alle 60 Minuten erneut gestartet. Die Skript-Ausführung kann über den Menü-Befehl Batch-Ausführung beenden wieder beendet werden.

Ausführung eines Skriptes im Batch-Modus

Ausführung eines Skriptes im Batch-Modus

Die Anzahl der Skript-Läufe kann außerdem mit dem Paramter LIMIT begrenzt werden. Die Anweisung

BATCHMODE TIMER 60 LIMIT 3;

sorgt dafür, dass das Skript stündlich aber insgesamt nur dreimal ausgeführt wird.

Besonderheiten im Batch-Modus

  • Im Batch-Modus hat die EXIT-Anweisung die geringere Priorität. Sie wird erst dann ausgewertet, wenn die durch den LIMIT-Parameter definierte Anzahl an Batch-Läufen abgearbeitet wurde. Während eines Batch-Laufs erhält man daher die Information

    • EXIT: Die Skript-Ausführung befindet sich noch im Batch-Modus.

    Bei einer unbegrenzten Anzahl an Batch-Läufen hat die EXIT-Anweisung keine Auswirkung, da sie nie ausgewertet wird.

  • Im Batch-Modus werden keine Dialoge geöffnet, die auf eine Eingabe vom Benutzer warten. Im Falle eines Fehlers wir die laufende Skript-Ausführung abgebrochen. Der Batch-Modus bleibt allerdings aktiv, sodass das Skript im nächsten Batch-Lauf erneut ausgeführt wird.
  • Im Batch-Modus können keine weiteren Skripte ausgeführt werden.

Beispiel

Das folgende Skript wird beginnend mit der ersten Ausführung stündlich (d.h. alle 60 Minuten) insgesamt aber nur 5 mal gestartet. Es exportiert den Inhalt der Tabelle mytable in eine Textdatei mit dem Namen D:\Temp\Export_$(.Hour)$(.Minute). Die Makrovariablen werden bei der Erstellung der Textdatei ersetzt. Am Ende des Batch-Laufs wird das OMS automatisch beendet.

-- Steuerung der Ausführung: stündlich, insges. fünf mal ausführen.
BATCHMODE TIMER 60 LIMIT 5;

-- Dateiname für den CSV-Export:
DEFINE MAKRO __filename "C:\Temp\Export_$(.Hour)$(.Minute).txt";
TEXTEXPORT ON;
TEXTEXPORT FILENAME "$(__filename)";

-- Verbindung direkt aufbauen
CONNECT SYSTEM_DSN "Test";

-- Visuelle Ausgabe nicht erforderlich
GRIDVIEW OFF;

-- Datenbank-Operation (mit aktiviertem CSV-Export)
SELECT *
  FROM `mytable`;

-- Log
MESSAGE "Datei $(__filename) geschrieben." TYPE I;
UNDEFINE MAKRO __filename;

-- Beende das Skript und schließe das OMS nach dme letzten Batch-Lauf:
EXIT SHUTDOWN;

Die Anweisung UNDEFINE MAKRO __filename ist in diesem Fall notwendig, damit der Dateiname im nächsten Batchlauf neu vergeben wird. Andernfalls würde der im ersten Lauf definierte Dateiname in jedem Lauf wiederverwendet werden. Demzufolge würde die in einem Lauf angelegte CSV-Datei im nächsten Lauf wieder überschrieben werden.

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.