|
XCP Blackboard | ||||
|
|||||
| Tip No. 2 Job-Intervall steuern | ||||||||||
|
Mit einer eigenen Funktion die Ausführung von Datenbank-Jobs steuern Normalerweise wird bei einem Datenbank-Job die Steuerung des Zeitintervalls des Jobs als Parameter einer Berechnung auf Basis der Funktion "sysdate" durchgeführt. Zum Beispiel: 1. Job eintragen:
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,
, 'vki0004.sendmail'
, SYSDATE
, 'SYSDATE + 1'); -- Ausführungintervall
commit;
END;
/
2. Ausführunginterval
Was aber tun, wenn nur wührend der Arbeitszeit der Job notwendig ist? Wir wollen zum Beispiel das folgende Aussführungintervall erreichen: Nur zwischen 7:00 und 19:00 soll der Job jede Stunde gestartet werden. Als Lösung für das Problem schreiben wir uns eine eigene Funktion mit dem Rückgabewert date. create or replace function getJobIntervall(p_job varchar2) return date is v_min number :=(1/24)/60; -- Minuten v_h number :=(1/24); -- Stunden v_begin pls_integer :=7; v_end pls_integer :=19; v_next_date date; begin if to_number(to_char(sysdate,'HH24')) between v_begin and v_end then v_next_date:=sysdate+v_h; --jede Stunde -- Zeit intervalle einführen -- abhängikeiten usw. auflösen else v_next_date:=to_date( to_char( sysdate+1,'dd.mm.yyyy') ||'0' ||to_char(v_begin),'dd.mm.yyyy hh24:mi'); end if; return v_next_date; end; /Anlegen eines Jobs mit:
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,
, 'vki0004.sendmail'
, SYSDATE
, 'getJobIntervall(''SENDMAIL'')'); -- Ausführungintervall
commit;
END;
/
Falls Sie planen, beachten Sie genau über noch eine weitere Tabelle mehrere Jobs parallel zu synchronisieren, das Transaktionsmodell der Datenbank. Sie müssen entweder mit "FOR UPDATE" arbeiten oder besser eine interne Oracle QUEUE für solche Anforderungen einsetzen. |
||||||||||
| ©2005 netcos AG | www.netcos.de | |||||||||