Search code examples
oracle-databaseplsqljobs

Why this Oracle job is only executed once?


I've an Oracle job defined as follows:

BEGIN
  DBMS_SCHEDULER.drop_job('clean_journal_partitions');
  DBMS_SCHEDULER.CREATE_JOB (
    job_name  => 'clean_journal_partitions',
    job_type  => 'STORED_PROCEDURE',
    job_action => 'CLEAN_JOURNAL_PARTITION',
    repeat_interval => 'FREQ=WEEKLY;BYDAY=MON',
    auto_drop => FALSE);
  DBMS_SCHEDULER.ENABLE('clean_journal_partitions');
END;

That if I'm not wrong, it should be executed once a week every monday. The problem is that it is executed only once and I don't know why.

To be able to test it more easily, I've modified it to change the frequency from weekly to every 10 seconds, like this:

BEGIN
  DBMS_SCHEDULER.drop_job('clean_journal_partitions');
  DBMS_SCHEDULER.CREATE_JOB (
    job_name  => 'clean_journal_partitions',
    job_type  => 'STORED_PROCEDURE',
    job_action => 'CLEAN_JOURNAL_PARTITION',
    repeat_interval => 'FREQ=SECONDLY;INTERVAL=10',
    auto_drop => FALSE);
  DBMS_SCHEDULER.ENABLE('clean_journal_partitions');
END;

And I've the same problem. It is executed only once. Any hint why the job is not executed every 10 seconds?


Solution

  • This works fine for me in Oracle 11g:

    CREATE TABLE TEST(
        run_time DATE
    ); 
    
    CREATE OR REPLACE PROCEDURE CLEAN_JOURNAL_PARTITION AS
    BEGIN
        INSERT INTO TEST VALUES(SYSDATE);
        COMMIT;
    END;
    /
    
    BEGIN
      DBMS_SCHEDULER.CREATE_JOB (
        job_name  => 'clean_journal_partitions',
        job_type  => 'STORED_PROCEDURE',
        job_action => 'CLEAN_JOURNAL_PARTITION',
        repeat_interval => 'FREQ=SECONDLY;INTERVAL=10',
        auto_drop => FALSE);
      DBMS_SCHEDULER.ENABLE('clean_journal_partitions');
    END;
    

    I get one entry in the TEST table every 10 seconds. Your problem must be in your CLEAN_JOURNAL_PARTITION procedure, maybe it crashes?