Zu Oracle

Bereich:
Versionsinfo:
PL/SQL
getestet mit 10.2 und 11.1
Erstellung:
Letzte Überarbeitung:
04/2002 HA
05/2009 RM
 Als PDF Downloaden!

Wie kann man einen Job ohne Hilfe eines Tools einrichten?

Sie wollen, dass bestimmte Prozeduren zu vorgegebenen Zeiten ablaufen?  Dann müssen Sie einen Job in der Datenbank einrichten. Zunächst einmal müssen Sie die Voraussetzung schaffen, damit ein Job überhaupt je ausgeführt werden kann: Es muss mindestens einen SNP-Prozess geben, der die Ausführung übernimmt. Setzen Sie dazu den init.ora-Parameter JOB_QUEUE_PROCESSES auf einen Wert > 0, die maximale Anzahl ist bis Version 8.1.7 36 Prozesse, ab Version 9i 1000. Wenn Sie die Datenbank nicht sofort durchstarten wollen oder können, so können Sie diesen Parameter auch im laufenden Betrieb umstellen mit:

ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 1;

Zusätzlich können Sie bis Version 8.1.7 mit dem init.ora-Parameter JOB_QUEUE_INTERVAL
einstellen, wie häufig diese Prozesse "aufwachen" sollen, um zu kontrollieren, ob es Arbeit für sie gibt. Der Default ist 60 (Sekunden); JOB_QUEUE_INTERVAL kann nur über ein Durchstarten der Datenbank neu gesetzt werden, nicht mit ALTER SYSTEM. Ab Version 9i wird dieser Parameter nicht mehr unterstützt.
Nun können Sie Ihre Jobs einrichten. Das geschieht mit der Prozedur DBMS_JOB.SUBMIT. An diese müssen Sie (neben einer OUT-Variablen für die Jobnummer) übergeben, was ausgeführt werden soll, wann es erstmals ausgeführt werden soll, und in welchem Intervall es ausgeführt werden soll. Optional können Sie noch angeben, wann Ihre Angaben geparst werden sollen, der Default ist sofort:

DBMS_JOB.SUBMIT(
   job       OUT BINARY_INTEGER,
   what      IN  VARCHAR2,
   next_date IN  DATE,
   interval  IN  VARCHAR2 DEFAUL 'null',
   no_parse  IN  BOOLEAN DEFAULT FALSE
);

Achten Sie darauf, dass die Angabe der erstmaligen Ausführung vom Datentyp DATE ist, die Angabe des Intervalls dagegen vom Datetyp VARCHAR2! Ihr "what" muss mit einem Semikolon abgeschlossen werden. Wird kein Intervall angegeben, so wird der Job einmalig ausgeführt und dann aus der Datenbank entfernt. Damit der Job auch wirklich eingerichtet wird, muss hinterher ein COMMIT abgesetzt werden! 

Beispiel:
Die Prozedur test_proc soll sofort und danach täglich um 4 Uhr ausgeführt werden:

DECLARE
   v_jobno  BINARY_INTEGER;
BEGIN
   DBMS_JOB.SUBMIT(v_jobno,
      'test_proc;',
      SYSDATE,
      'TRUNC(SYSDATE) + 1 + 4/24');
   COMMIT;
END;

Angaben zu allen Jobs finden  Sie in der DD-View DBA_JOBS; zu allen Jobs, die im Moment gerade ausgeführt werden, finden Sie zusätzliche Informationen  in DBA_JOBS_RUNNING.

Suche

Kontakt

Telefon:
  089 6228 6789-0

Telefon (noch gültig):
  089 679090-40

E-Mail Verteiler Monatstipps

Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.