Herzlich willkommen zu unserem neuen Blog. Heute möchten wir Ihnen zeigen, wie KeepTool 16.1 sie bei der Ablösung Ihrer herkömmlichen dbms_jobs durch Umstellung auf die deutlich flexibleren Oracle Scheduler Jobs unterstützt. Das neuere Scheduler-Konzept bietet neue Features und erlaubt eine erheblich bessere Kontrolle über Ihre Jobs.
In zahlreichen Oracle-Datenbanken sind noch die herkömmlichen Datenbankjobs im Einsatz, die mit Hilfe des Packages dbms_job verwaltet werden. Vor der Veröffentlichung von Oracle 10g war dbms_job die einzige Möglichkeit, um Datenbankjobs zu implementieren. Aus unterschiedlichen Gründen hat in vielen Datenbanken die herkömmliche Technologie zahlreiche Datenbankupgrades überlebt.
Die folgende Abbildung zeigt die Darstellung der herkömmlichen Jobs in Hora. Kontextmenüpunkte bieten eine Benutzerschnittstelle für das Package dbms_job und ermöglichen die komfortable Administration dieser Jobs.
Jeder herkömmliche Job ist durch seine Jobnummer eindeutig identifiziert. Die Spalte „What“ beinhaltet einen Prozeduraufruf oder anonymen PL/SQL-Block für die Programmlogik die jedes Mal aufgerufen wird, wenn der Job läuft. Die Spalte „Interval“ enthält einen Ausdruck um nach jedem Jobstart den Zeitpunkt des nächsten Starts zu berechnen.
Entdecken Sie die Möglichkeiten von KeepTool.
Mit Version 10g hat Oracle das flexiblere Scheduler-Konzept eingeführt. Scheduler Jobs werden durch das Package dbms_scheduler package verwaltet.
Die nachstehende Abbildung zeigt die Overview-Anzeige für Scheduler-Jobs in Hora. Hier gibt es vergleichbare Kontextmenüs, die dbms_scheduler-Aufrufe zur Verwaltung dieser Jobs implementieren.
Jeder Scheduler Job ist durch den Job-Eigentümer zusammen mit seinem Jobnamen eindeutig identifiziert.
Darüber hinaus ist Ihnen vielleicht die zusätzliche Spalte ‚Creator‘ aufgefallen. Wir werden das Thema Creator im folgenden Abschnitt noch einmal aufgreifen.
Die Spalte ‚Action‘ ist eine konzeptionelle Erweiterung des Inhalts der Spalte ‚What‘ bei den herkömmlichen Jobs. Die Spalte ‚Repeat interval‘ beinhaltet einen Ausdruck zum Berechnen des jeweils nächsten Starttermins.
Es gibt online reihenweise Veröffentlichungen, in denen die zahlreichen Vorteile der Scheduler-Jobs gegenüber den herkömmlichen Jobs dargestellt werden.
Solange die klassischen dbms_jobs noch unterstützt werden, besteht zwar kein unmittelbarer Zwang zur Umstellung auf Oracle Scheduler Jobs. Wie Sie im Folgenden sehen werden, ist die Migration mit Hilfe von KeepTool 16 aber mit nur sehr geringem Aufwand machbar und schützt Sie für den Fall, dass Oracle die traditionelle Technik in einer neueren Version nicht mehr unterstützt.
Mit Oracle 19c hat Oracle den ersten Anlauf gestartet, sich von der klassischen dbms_job-Technology zu trennen. Sie können weiterhin dbms_jobs anlegen, aber Oracle verwaltet diese intern mit Hilfe der Scheduler-Technologie. Deshalb gibt es zu jedem dbms_job einen entsprechenden Scheduler-Job, der intern von Oracle verwaltet wird. Sie erkennen diesen am Jobnamen der aus dem Präfix „DBMS_JOB$_“ und der Jobnummer das traditionellen Jobs besteht, der über diesen Scheduler-Job implementiert ist. Sie können auch die Dictionary-View scheduler$_dbmsjob_map abfragen, um die Zuordnung der traditionellen Jobnummer zum Scheduler-Job-Namen zu ermitteln und umgekehrt. In Mike Dietrichs Post finden Sie dazu weitere Informationen.
Wenn Ihre Datenbank mittels Oracle impdp – normalerweise als SYS – auf Oracle 19c umgestellt wurde, werden möglicherweise alle automatisch angelegten Scheduler-Jobs als ‚angelegt von SYS‘ angezeigt. In der folgenden Ansicht sehen Sie, dass der Erzeuger (SYS) vom Eigentümer (TEST) abweicht.
Leider ist es nun so, dass der Job unter den Privilegien von SYS anstelle der des Jobeigentümers läuft. Das kann zu unerwarteten Auswirkungen auf die Jobausführung führen.
Oracle empfiehlt in diesem Fall die Jobs als regulärer Jobeigentümer neu anzulegen, siehe DBA_JOBS Running With SYS After 19c Upgrade (Doc ID 2888255.1) für weitere Informationen.
Vielleicht ist das Grund genug, die vollständige Umstellung auf Scheduler-Jobs zeitnah vorzunehmen. Wir zeigen Ihnen nun, wie das geht.
Technisch betrachtet gibt es mindestens diese beiden Ansätze, um Aufrufe des dbms_scheduler -Packages zu erzeugen, welche die dbms_jobs ersetzen:
Wir haben uns für die zweite Variante entschieden, weil
In KeepTool 16.1 gibt es jetzt einen neuen Kontextmenüpunkt in der Übersicht der dbms_jobs. Damit können sie einen Scheduler-Job erzeugen, der den traditionellen Job ersetzt.
Der Menüpunkt funktioniert auch für eine Mehrfachauswahl, so dass der Code zur Umstellung mehrerer Scheduler Jobs auf einmal erstellt werden kann.
Der neue Menüpunkt befindet sich direkt unter dem vorhandenen Menüpunkt „Show DDL“ und arbeitet auch sehr ähnlich wie dieser.
Der einzige Unterschied ist, dass anstelle der dbms_job-Aufrufe nun dbms_scheduler-Aufrufe erzeugt werden.
Der erste Aufruf des Packages dbms_scheduler erzeugt den Job in deaktiviertem Status. Das gestattet Ihnen, die neue Logik erst einmal vorzubereiten und dann in einem zweiten Schritt erst zu aktivieren.
Sie können die Kommentarzeichen vor dem Aufruf von „dbms_job.enable()“ entfernen, um den Scheduler-Job sofort zu aktivieren.
In diesem Fall können Sie auch die Kommentarzeichen vor dem Aufruf „dbms_job.remove()“ entfernen und den traditionellen Job gleich mit zu löschen.
Die folgende Ansicht zeigt in Hora die Scheduler-Overview-Seite, nachdem die neuen Scheduler-Jobs angelegt wurden. Wir haben die im Rahmen des Imports von SYS automatisch angelegten Jobs rot und die neu mit Hora angelegten Jobs grün markiert.
Im nächsten Schritt können die nicht mehr benötigten traditionellen Jobs per Skript oder über das Kontextmenü der traditionellen Job-Übersicht gelöscht werden. Sie können mehrere Jobs gleichzeitig auswählen und dafür den Menüpunkt „Remove“ aufrufen. Damit verschwinden auch die automatisch erzeugten Scheduler Jobs mit Präfix „DBMS_JOB_“.
KeepTool 16.1 unterstützt Sie bei der Umstellung auf Oracle Scheduler Jobs. Mit einem einzigen Mausklick können Sie ein PL/SQL-Skript erzeugen, dass für jeden traditionellen Job einen Scheduler Job anlegt und ggf. den ersetzten klassischen Job gleich mit löscht. Damit stellen Sie ihr System in wenigen Schritten auf die fortschrittliche Scheduler-Technik um.