oracle 10g, scheduler jobs

binfgi

Mitglied
Hallo,
hat jemand von euch schon mal mit den scheduler jobs gearbeitet?
Welche Rechte brauche ich denn dafür? Und muss ich bevor ich einen Scheduler Job anlege erst noch was anders machen, z.B eine Scheduler Class anlagen oder so?
Danke und Gruß
 
Der Scheduler ist der Nachfolger von den DBA_JOBS und ist auch um einiges komplizierter.
Im einfachsten Fall setzt sich ein Task aus einem Programm, einem Schedule und einem Job zusammen.

Das Programm definiert was von dem Task ausgeführt werden soll, also z.B. eine Stored Procedure,
ein anonymer PL/SQL Block oder sogar eine externe Applikation. Das Schedule legt fest wann und wie
oft das Programm ausgeführt wird. Der Job verint die beiden Definitionen unter einem Objekt.
Jeder Job kann jetzt noch Argumente besitzen die an die Programme weitergereicht werden.
Bei jeder Ausführung eines Jobs werden sog. Job Instanzen erzeugt. D.h. jede Ausführung erzeugt
einen eigenen Eintrag im Log.

Neben einem regelmäßigen oder einmaligem Schedule können Jobs auch durch Events gestartet werden.
Z.B. kann der Scheduler selbst Events beim starten oder beenden eines JObs auslösen auf die andere
Jobs wiederrum reagieren. (z.B. eine Jobkette)
Auch Applikationen können Events auslösen, das ist allerdings etwas komplizierter, da Oracle Streams
Advanced Queuing genutzt wird.

Anstatt mehrere Jobs über einen Event zu ketten gibt es schon fertig die Möglichkeit Job Chains
zu erstellen. So können einzelne Glieder in einer Kette entweder Jobs, untergeordnete Jobketten oder
Events sein.

Damit das ganze noch etwas komplizierter wird gibts auch noch Job Klassen. Hiermit kann ich z.B.
alle Jobs die gleiche Parameter nutzen zusammenfassen, d.h. aber nichts mit der Reihenfolge der
Ausführung zu tun. Zudem kann ich in Job Klassen definieren wieviel Ressourcen auf meiner Instanz
genutzt werden dürfen. Ich könnte also sagen, Job 1, 2 und 3 machen Reporting und gehören zur Klasse
"nicht so wichtig" und Job 4, 5, und 6 machen Maintenance und gehören zur Klasse "sehr wichtig".
Somit wird die Datenbank erst Jobs mit hoher Priorität ausführen, oder zumindest mehr Ressourcen
zur Verfügung stellen.

Zuletzt besteht die Möglichkeit "Windows" also Zeiotfenster zu definieren. Wenn z. B. regelmäßige
Arbeiten auszuführen sind, kann ich definieren dass sie immer von 22.00 Uhr bis 6.00 Uhr laufen
sollen. Ausserhalb des Zeitfensters stehen meinem JOb keine Ressourcen zur Verfügung da ich die
für den Online Betrieb brauche...

Wie man sieht kann man sich extrem austoben und so gut wie alles definitern...

Um einen einfachen Job zu generieren brauch der Benutzer das Privileg "CREATE JOB".

Die CREATE JOB Methode ist oft überladen und ermöglich mir mit einem Aufruf einen Job anzulegen
ohne vorher ein PROGRAM Objekt oder ein SCHEDULE Objekt anzulegen:

Code:
DBMS_SCHEDULER.CREATE_JOB (
   job_name             IN VARCHAR2,
   job_type             IN VARCHAR2,
   job_action           IN VARCHAR2,
   number_of_arguments  IN PLS_INTEGER              DEFAULT 0,
   start_date           IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
   repeat_interval      IN VARCHAR2                 DEFAULT NULL,
   end_date             IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
   job_class            IN VARCHAR2                 DEFAULT 'DEFAULT_JOB_CLASS',
   enabled              IN BOOLEAN                  DEFAULT FALSE,
   auto_drop            IN BOOLEAN                  DEFAULT TRUE,
   comments             IN VARCHAR2                 DEFAULT NULL);
 
Zurück