Wie man einen Scheduler-Job in Oracle 12c zu erstellen

Die Oracle 12c Scheduler Beispiel hier schafft eine einfache Aufgabe, die eine gespeicherte Programming Language / Structured Query Language (PL / SQL) Prozedur ausgeführt wird. Das Verfahren wählt eine Zählung der Anzahl von Benutzern auf das System und setzt diese Nummer in eine Tabelle mit einem Zeitstempel. Er fährt alle fünf Minuten.

Gehen Sie wie folgt vor, um einen Job zum ersten Mal zu planen:

  1. Melden Sie sich bei SQL * Plus als Benutzer SYS.

  2. Geben Sie dem beabsichtigten Jobmotor in der Lage, Arbeitsplätze zu schaffen:

    Sie sollten folgendes sehen:

    Grants gelungen.

    Dieses Beispiel Job wird von HR erstellt und ausgeführt.

  3. Lassen HR die V $ SESSION Tabelle finden Sie unter:

    Sie sollten folgendes sehen:

    Grants gelungen.

    Die _ in V_ $ SESSION ist kein Tippfehler! V $ SESSION ist ein Synonym für V_ $ SESSION. Für die Gewährung zu arbeiten, müssen Sie den Namen der Ansicht zu geben.

  4. Melden Sie sich bei SQL * Plus als Jobmotor und machen Sie eine Tabelle, die die Daten zu halten:

    lt; create table USER_COUNT (NUMBER_OF_USERS NUMBER (4), time_of_day TIMESTAMP) TABLE Nutzer->

    Du siehst das:

    Tabelle erstellt.
  5. Erstellen Sie eine gespeicherte Prozedur:

    lt; CREATE OR VERFAHREN insert_user_count ASv_user_count NUMBER (4) -BEGINSELECT count (*) IN v_user_countFROM v $ sessionWHERE Benutzername IS NOT NULL-INSERT INTO user_countVALUES (v_user_count, SYSTIMESTAMP) -commit-END insert_user_count- /> ERSETZEN

    Die gespeicherte Prozedur sammelt die Anzahl der Benutzer und fügt sie in der Tabelle mit einem Zeitstempel. Sie sollten folgendes sehen:

    Verfahren erstellt.
  6. Erstellen Sie ein Programm für den Job:

    lt; BEGINDBMS_SCHEDULER.CREATE_PROGRAM (programm_name => 'PROG_INSERT_USER_COUNT', program_action => 'INSERT_USER_COUNT', program_type => 'STORED_PROCEDURE') - ENDE - />

    Du siehst das:

    PL / SQL-Prozedur erfolgreich abgeschlossen.
  7. Aktivieren Sie das Programm:

    Du siehst das:

    PL / SQL-Prozedur erfolgreich abgeschlossen.
  8. Erstellen Sie einen Zeitplan für den Job auszuführen:

    lt; BEGINDBMS_SCHEDULER.CREATE_SCHEDULE (schedule_name => 'my_weekend_5min_schedule', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ = MINUTELY- INTERVAL = 5- BYDAY = SAT, SUN', end_date => SYSTIMESTAMP + INTERVAL '30' Tag, Kommentare => ' Alle 5 Minuten) - ENDE - />

    Dieses Beispiel Job fährt alle fünf Minuten. Du siehst das:

    PL / SQL-Prozedur erfolgreich abgeschlossen.
  9. Erstellen Sie Ihre Arbeit mit dem Programm und planen Sie definiert:

    lt; BEGINDBMS_SCHEDULER.CREATE_JOB (job_name => 'my_user_count_job', programm_name => 'prog_insert_user_count', schedule_name => 'my_weekend_5min_schedule') - ENDE - />

    Du siehst das:

    PL / SQL-Prozedur erfolgreich abgeschlossen.
  10. Ermöglichen Sie Ihren Job, so dass es innerhalb des definierten Zeitplan ausgeführt:

    lt; exec dbms_scheduler.enable ( 'my_user_count_job')>

    Du siehst das:

    PL / SQL-Prozedur erfolgreich abgeschlossen.

    Der Job wird an der angegebenen Startzeit (bei SYSTIMESTAMP). Wenn Sie ein Kalenderdatum in der Zukunft wählen, startet es nicht bis dahin.

  11. Nachdem der Auftrag 17 Minuten lang laufen ist schon, geben Sie Folgendes Ihre USER_COUNT Tabelle zu sehen:

    lt; select * from user_count->

    Du siehst das:

    NUMBER_OF_USERS TIME_OF_DAY --------------- --------------------------------- 14 09-August-13 02.15.14.118495 PM14 09-August-13 02.00.14.137300 PM13 09-August-13 02.05.14.120116 PM13 09-August-13 02.10.14.120680 PM

Wenn Sie den Job läuft, können Sie Details über den Erfolg oder Misserfolg erhalten, indem Sie die folgenden Ansichten abfragen:

USER_SCHEDULER_JOB_RUN_DETAILSUSER_SCHEDULER_JOB_LOG

Diese Ansichten zeigen nur Informationen über Ihre Aufträge. Um Informationen über die jüngsten Läufe unserer Arbeit erhalten, melden Sie sich als Jobmotor und Typ

lt; Wählen Sie job_name, Status, run_duration, cpu_usedfrom USER_SCHEDULER_JOB_RUN_DETAILSwhere job_name = 'MY_USER_COUNT_JOB' ->

Du siehst das:

JOB_NAME STATUS RUN_DURATION CPU_USED -------------------- ---------- --------------- - ----------------- MY_USER_COUNT_JOB SUCCEEDED +000 00.00.00 +000 00: 00: 00.01MY_USER_COUNT_JOB +000 SUCCEEDED 00.00.00 +000 00: 00: 00.01MY_USER_COUNT_JOB SUCCEEDED +000 00.00.00 +000 00: 00: 00.00MY_USER_COUNT_JOB +000 SUCCEEDED 00.00.00 +000 00: 00: 00.01

Menü