Sommer-/ Winterzeitumstellung beim Scheduler Jobs

Wenn man einen Scheduler Job anlegen möchte, der zu einer bestimmte Stunde starten soll, sollte man an die Zeitumstellung denken und beim Anlegen einiges beachten.
Da ich bereits in in einem Projekt die Zeitumstellung nicht bedacht habe, kostete es mich eine Zeit um herausfinden zu können, warum der Job morgens nicht wie geplant startete.

Diejenigen, die nicht genau wissen, was ein Scheduler Job ist möchte ich auf die englische Wiki Seite verweisen zum Thema Job Scheduler.

Im folgendem werde ich am Beispiel zeigen, wie ich den Job angelegt habe. Und wie man es besser machen kann. Und welche Werkzeuge es bei Oracle dafür gibt.

Anlegen vom Scheduler Job

Für Anlage und Verwaltung von Jobs bietet Oracle Bibliotheken oder Packages an. So ist sys.dbms_scheduler ein Package zum Verwalten der Datenbank Jobs.
In diesem Package findet man sämtliche Prozeduren und Funktionen, mit Hilfe welche Jobs angelegt, gedroppt, gestartet und gestoppt werden können.

Im folgendem Beispiel wird ein Scheduler Job angelegt, der den Namen MY_JOB trägt, die Prozedur MY_JOB im Schema SCOTT sekundlich aufruft.
Ausserdem läuft der Job nur von Montag bis Freitag von 8-18 Uhr.

Problemidentifikation

Soweit so gut, auf den ersten Blick sieht der Job OK aus. Der Job ist auch OK, und wird auch bis zu einem bestimmten Zeitpunkt zuverlässig laufen. Der Zeitpunkt, wenn der Job nicht mehr zu dem gewünschten Zeitpunkt Starten wird, ist die Sommer-/Winterzeit Umstellung.

Die Ursache findet kann schnell gefunden werden, wen man sich den Job in der user_scheduler_jobs View genauer anschaut.

Aus dieser Information ist folgende ersichtlich:

  • Der Job wurde zum Zeitpunkt 20-MAR-12 23.30.10.154755 AM +02:00 angelegt
  • Der Job wird zum Zeitpunkt 1-APR-12 08.00.00.685030 AM +02:00 das nächste mal laufen

Wie man sehen kann, hat der Job seine eigenen Sommerzeit Information.
Was ist also mit dem Job passiert?

Nun ja, wenn ein Job erstellt wird, speichert Oracle die Zeitzone vom start_date Parameter. Wenn diese Zeitzone als absoluter Wert angegeben wird, werden keine Zeitumstellungen mitgespeichert.
Wenn der Server also in die Sommerzeit (GMT +2 in Deutschland) wechselt, bleibt der Scheduler-Job in seiner eigenen kleinen Welt, in der Zeitzone GMT +1 und startet somit eine Stunde später.

Lösung

Um dies zu vermeiden, muss der Job mit einer explizit genannten Zeitzone angelegt werden. In diesem ​​Fall wir Oracle automatisch die richtige Sommer/Winter Zeit bei dem Job verwenden.
Und so könnte die Erstellung des Jobs aussehen:

Ein Gedanke zu „Sommer-/ Winterzeitumstellung beim Scheduler Jobs

  1. Top, genau das habe ich gesucht.
    Bin auf das selbe Problem diese Woche gestossen.

    Jetzt habe ich die Lösung und die Ursache.
    Thx.

    Tobi

Kommentar verfassen