job的定时执行问题

panchao521 2010-01-27 09:26:14
我按照网上的例子一步一步的执行:
SQL> create table test_job(time date);

Table created

SQL> create or replace procedure MYPROC as
2 begin
3 insert into test_job values(sysdate);
4 end;
5 /

Procedure created

SQL> variable job1 number;
SQL> begin
2 dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440');
3 end;
4 /

PL/SQL procedure successfully completed
job1
---------
148

SQL> begin
2 dbms_job.run(:job1);
3 end;
4 /

PL/SQL procedure successfully completed
job1
---------
148

SQL> select to_char(time,'yyyy-mm-dd hh24:mi:ss') 时间 from test_job;

时间
---------------------------------------------------------------------------
2010-01-27 09:06:52

SQL> select to_char(time,'yyyy-mm-dd hh24:mi:ss') 时间 from test_job;

时间
---------------------------------------------------------------------------
2010-01-27 09:06:52


隔了好久之后还是一条???

查询:
SQL> SELECT JOB, NEXT_DATE, NEXT_SEC, FAILURES, BROKEN
2 FROM DBA_JOBS;

JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
---------- ----------- ---------------- ---------- ------
501 2008-6-2 17 17:31:08 N
502 2008-6-2 17 17:32:04 N
503 2008-6-2 17 17:31:08 N
47 2008-6-15 1 10:50:29 N
48 2008-6-15 1 10:50:30 N
4 2008-6-26 1 16:11:31 N
5 2008-6-26 1 16:11:31 N
108 2008-11-28 08:41:06 4 N
127 2009-2-11 8 08:40:00 N
564 2008-8-7 14 14:47:51 N
565 2008-8-7 23 23:07:01 N
107 2008-11-30 01:00:00 3 N
148 2010-1-27 9 09:07:52 0 N

13 rows selected

SQL> SELECT SID, r.JOB, LOG_USER, r.THIS_DATE, r.THIS_SEC
2   FROM DBA_JOBS_RUNNING r, DBA_JOBS j
3   WHERE r.JOB = j.JOB;


SID JOB LOG_USER THIS_DATE THIS_SEC
---------- ---------- ------------------------------ ----------- ----------------


请大家帮忙看看??谢谢
...全文
97 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
suiziguo 2010-01-27
  • 打赏
  • 举报
回复
SQL> create table test_job(time date);

表已创建。

SQL> create or replace procedure MYPROC as
2 begin
3 insert into test_job values(sysdate);
4 end;
5 /

过程已创建。

SQL> create or replace procedure MYPROC as
2 begin
3 insert into test_job values(sysdate);
4 commit;
5 end;
6 /

过程已创建。

SQL> variable job1 number
SQL> begin
2 dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440');
3 end;
4 /

PL/SQL 过程已成功完成。

SQL> begin
2 dbms_job.run(:job1);
3 end;
4 /

PL/SQL 过程已成功完成。

SQL> select to_char(time,'yyyy-mm-dd hh24:mi:ss') 时间 from test_job;

时间
-------------------
2010-01-27 09:48:23

SQL> select to_char(time,'yyyy-mm-dd hh24:mi:ss') 时间 from dual;
select to_char(time,'yyyy-mm-dd hh24:mi:ss') 时间 from dual
*
第 1 行出现错误:
ORA-00904: "TIME": 标识符无效


SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') 时间 from dual;

时间
-------------------
2010-01-27 09:49:36

SQL> select to_char(time,'yyyy-mm-dd hh24:mi:ss') 时间 from test_job;

时间
-------------------
2010-01-27 09:48:23
2010-01-27 09:49:24


SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') 时间 from dual;

时间
-------------------
2010-01-27 09:50:11

SQL> select to_char(time,'yyyy-mm-dd hh24:mi:ss') 时间 from test_job;

时间
-------------------
2010-01-27 09:48:23
2010-01-27 09:49:24


SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') 时间 from dual;

时间
-------------------
2010-01-27 09:50:27

SQL> select to_char(time,'yyyy-mm-dd hh24:mi:ss') 时间 from test_job;

时间
-------------------
2010-01-27 09:48:23
2010-01-27 09:49:24
2010-01-27 09:50:29

SQL>

sysdate+1/1440这样的写法会不准确,但只要调度无错,肯定不会出现不执行的情况。
show parameter job看看结果
Hemes_MC 2010-01-27
  • 打赏
  • 举报
回复
declare
i_jobnum number(10);
begin
dbms_job.submit(i_jobnum,
'MYPROC;',
sysdate,
'sysdate+1/1440');
commit;
end;
/

你把JOB改成这种创建方式
select JOB from user_jobs where what='MYPROC;

begin
dbms_job.run(JOB);
end;
/
oraclemch 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 panchao521 的回复:]
对楼上的回复:我已经更改了MYPROC
create or replace procedure MYPROC as
begin
insert into test_job values(sysdate);
commit;
end;

并重新
SQL> begin
  2  dbms_job.run(148);
  3  end;
  4  /

SQL> select to_char(time,'yyyy-mm-dd hh24:mi:ss') 时间 from test_job;

时间
---------------------------------------------------------------------------
2010-01-27 09:06:52
2010-01-27 09:25:37

就是只有我run的那次执行了MYPROC,之后就不执行了??、
[/Quote]

你的参数没有设置吧, 设置初始化参数 job_queue_processes
  sql> alter system set job_queue_processes=n;(n>0)
  job_queue_processes最大值为1000
  
  查看job queue 后台进程
  sql>select name,description from v$bgprocess;
runbaobao88 2010-01-27
  • 打赏
  • 举报
回复
还有你可以查询DBA_JOBS,看这个任务对应的NEXT_SEC是否每分钟都在改变
还有这个任务是每分钟执行一遍,你是否等够了一分钟
runbaobao88 2010-01-27
  • 打赏
  • 举报
回复
看看job_queue_processes的值是不是设置为0了,必须要大于0
SQL> show parameter job_queue_processes

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 10
panchao521 2010-01-27
  • 打赏
  • 举报
回复
对楼上的回复:我已经更改了MYPROC
create or replace procedure MYPROC as
begin
insert into test_job values(sysdate);
commit;
end;

并重新
SQL> begin
2 dbms_job.run(148);
3 end;
4 /

SQL> select to_char(time,'yyyy-mm-dd hh24:mi:ss') 时间 from test_job;

时间
---------------------------------------------------------------------------
2010-01-27 09:06:52
2010-01-27 09:25:37

就是只有我run的那次执行了MYPROC,之后就不执行了??、
suiziguo 2010-01-27
  • 打赏
  • 举报
回复
create or replace procedure MYPROC as
2 begin
3 insert into test_job values(sysdate);
4 end;


commit;呢?
panchao521 2010-01-27
  • 打赏
  • 举报
回复
谢谢大家,本贴已结,就是因为
SQL> show parameter job_queue_processes ;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 0

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧