试图在每1分钟后完成一项工作,但它不起作用?

Vin*_*eet 5 oracle plsql oracle9i dbms-job

我做了这个工作,应该在1分钟的时间间隔内执行,但它不起作用.当我使用 execute dbms_job.run(2);它时会被执行. printe是一个程序请建议!

BEGIN
    DBMS_JOB.SUBMIT  (
         job =>:job_no,
             WHAT=>'printe;',--Procedure 
             next_date=>sysdate+1/24*60,
             interval=>'sysdate+1/24*60'
          );
    commit;
END;
Run Code Online (Sandbox Code Playgroud)

Mar*_*lan 5

尝试next_date = sysdate +(1/24/60)和interval =(1/24/60)......


APC*_*APC 5

这是一个简单的工作。

SQL> create table log1 (ts timestamp)
  2  /

Table created.

SQL> create or replace procedure printe as
  2  begin
  3      insert into log1 values (systimestamp);
  4      commit;
  5  end;
  6  /

Procedure created.

SQL>
Run Code Online (Sandbox Code Playgroud)

因此,首先要正确指定开始时间和间隔来提交它。如果您不记得一天有多少分钟 (1440),最好使用括号。让我们将提交作业与您的日期规格进行比较......

SQL> var job_no number
SQL> BEGIN
   2     DBMS_JOB.SUBMIT
   3      (
   4      job =>:job_no,
   5      WHAT=>'printe;',--Procedure
   6      next_date=>sysdate+1/24*60,
   7    interval=>'sysdate+1/24*60'
   8    );
   9    commit;
  10  END;
  11  /

 PL/SQL procedure successfully completed.

 SQL> print job_no

     JOB_NO
 ----------
         71

 SQL>
Run Code Online (Sandbox Code Playgroud)

... 用括号来声明优先级 ...

SQL> BEGIN
  2     DBMS_JOB.SUBMIT
  3      (
  4      job =>:job_no,
  5      WHAT=>'printe;',--Procedure
  6      next_date=>sysdate+1/(24*60),
  7    interval=>'sysdate+1/(24*60)'
  8    );
  9    commit;
 10  END;
 11  /

PL/SQL procedure successfully completed.

SQL> print job_no

    JOB_NO
----------
        72

SQL>
Run Code Online (Sandbox Code Playgroud)

显然,作业 71 还没有运行,也不会运行一段时间:

SQL>    select job, what, last_date, next_date, interval
  2  from user_jobs
  3  where job in (71,72)
  4  /

   JOB WHAT         LAST_DATE            NEXT_DATE            INTERVAL
------ ------------ -------------------- -------------------- -----------------
    71 printe;                           05-MAY-2010 17:35:34 sysdate+1/24*60
    72 printe;      03-MAY-2010 05:44:42 03-MAY-2010 05:45:34 sysdate+1/(24*60)

SQL>
Run Code Online (Sandbox Code Playgroud)

监控作业 72 ....

SQL> select * from log1
  2  /

TS
-------------------------------------------------------------------
03-MAY-10 05:43:39.250000
03-MAY-10 05:44:42.296000

SQL>
Run Code Online (Sandbox Code Playgroud)

所以,如果这仍然不适合你,你应该怎么做?第一件事是检查数据库是否配置为运行作业。为此,您将需要 DBA 访问权限。

SQL> select value
  2  from v$parameter
  3  where name='job_queue_processes'
  4  /

VALUE
-------------------------
1000

SQL>
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,在 Oracle 9i 中,此参数的默认值为 0。它需要设置为某个非零值才能运行作业。

如果这不是问题,您需要检查警报日志中的错误消息。该background_dump_dest目录还可能包含一些由失败的作业生成的 .trc 文件。