2016-09-15 2 views
1

Ich versuche, eine Aufgabe zu erstellen (löschen Sie einige Cache-Daten), die einmal in zwei Tagen ausgeführt wird. Dies wird auf Oracle 11g ausgeführt. Bisher kam ich mit dem folgenden anonymen Block auf:Verwenden Sie DBMS_SCHEDULER repeat_interval, um eine Aufgabe einmal in zwei Tagen auszuführen

begin 
DBMS_SCHEDULER.CREATE_JOB (
    job_name    => 'clear_cache', 
    job_type    => 'PLSQL_BLOCK', 
    job_action   => 'begin delete from MY_CACHE;commit; end;', 
    start_date   => to_date('19/09/2016','dd/mm/rrrr')+ 19/24, 
    repeat_interval  => 'to_date(''19/09/2016'',''dd/mm/rrrr'')+ 2 + 19/24', 
    enabled    => TRUE); 
    end; 

Aber ich bin nicht sicher repeat_interval Wert ..

Unter der Annahme, dass ich diesen Block heute laufen wird (15/09/2016), ich will clear_cache sein ausgeführt auf:

19/09/2016 at 7 p.m 
21/09/2016 at 7 p.m. 
23/09/2016 at 7 p.m. 
etc 

ich weiß, wenn ich benutze

start_date   => sysdate, 
repeat_interval  => 'trunc(sysdate) + 7 + 7/24' 

Dann wird es die Ausführung today, wiederholt all 7 Tage bei 7 p.m. beginnen, was ich will, aber ist jeden 2. Tag am kommenden Montag und wiederholen zu beginnen, und ich bin nicht sicher, wie das erreichen ...

So Ich würde gerne wissen, was genau in repeat_interval ... setzen

Vielen Dank.

Antwort

3

Es lohnt sich, die built-in calendaring syntax zu verwenden, anstatt zu versuchen, Ihre eigenen zu rollen. Wenn Sie angeben, dass der Job täglich mit einem Intervall von 2 ausgeführt werden soll, wird er alle 2 Tage ausgeführt.

Die Syntax lautet FREQ=DAILY;INTERVAL=2. Wenn Sie das Startdatum auf 19 Uhr einstellen, beginnt es zu diesem Zeitpunkt in Ihrer aktuellen Zeitzone.

Der Parameter start_date ist ein Datum, daher können Sie hier ein tatsächliches Datum oder einen tatsächlichen Zeitstempel verwenden.

DBMS_SCHEDULER.CREATE_JOB (
    job_name    => 'clear_cache', 
    job_type    => 'PLSQL_BLOCK', 
    job_action   => 'begin delete from MY_CACHE; commit; end;', 
    start_date   => timestamp '2016-09-19 19:00:00', 
    repeat_interval  => 'FREQ=DAILY;INTERVAL=2', 
    enabled    => TRUE); 
Verwandte Themen