show parameter job_queue_process;
你可以通过更改这个process数量,来全局的启动或者停止job任务。(需要重启)
比如你用 : ALTER SYSTEM SET job_queue_processes = 0;所有Job都将被停止。
2. 创建一个job:
通过系统存储过程 dbms_job.submit将job提交到系统任务队列。语法分析如下:
BEGIN
dbms_job.submit(JOB => :jobnumber, — (这是返回值,不需要提供)
WHAT => ‘需要执行的代码‘,
NEXT_DATE => 第一次执行时间,这里有效的时间只有能识别的时间格式。
INTERVAL => 下一次执行时间); -------时间表达式,注意用单引号必须的使用。
commit;
END;
/
3 。举一个例子:
VARIABLE jobnumber number
BEGIN
DBMS_JOB.SUBMIT(JOB => :jobnumber,
WHAT => ‘DBMS_STATS.GATHER_DATABASE_STATS(options => ‘’GATHER AUTO'’);’, -------特别需要注意最后一个分号不能少。
NEXT_DATE => to_date(’11:30 01/23/06′,’HH24:MI MM/DD/YY’),
INTERVAL => ‘SYSDATE + 1′);
COMMIT;
END;
/
print jobnumber
4 。关于INTERVAL说明:
这个参数说明的是我们希望多久运行一次这个job.它是一个时间字符串,它在每次运行后都将被
重新计算,即或得下一次运行时间。比如:
SYSDATE+.5,表示12小时候再次运行。SYSDATE+7表示一周后运行,从而也就实现了没周周运行一次的效果。
如果用null代替具体时间,这个任务将只被运行一次,然后自动从Job队列中删除。
5. 启动一个Job任务:
BEGIN
DBMS_JOB.RUN(JOB => 21); -----其中21是任务号。
END;
/
6. 查看job queue:
有四种视图可以查看这个队列情况:
DBA_JOBS 列出数据库中所有job队列。
ALL_JOBS 信息基本和DBA_JOBS,有点点区别(has the same information as DBA_JOBS but only on jobs which are accessible tot he current user);
USER_JOBS 只列出当前用户所具有的job信息;
DBA_JOBS_RUNNING 这个可以获取当前在运行的job信息。
7. job失败的处理:
job失败的原因很多,但一般都是权限问题;
当job失败的时候,在Oracle alert log中将会留有信息,错误代码是ORA-12012;
当oracle尝试启动一个job 16次以后还未成功,则放弃尝试,同时将dba_jobs这个视图中broken标记为"Y".
所以,如果你不想一个任务被调用,可以这样:
BEGIN
DBMS_JOB.BROKEN(JOB => 21, BROKEN => TRUE); ----------标记为TRUE;
END;
8.改变一个job;
1)你当然可以删除这个job;然后重新写一个;
2)更好的方式是通过DBMS_JOB_CHANGE()这个方法。关于这个的几个说明:
使用方式如下:
BEGIN
DBMS_JOB.CHANGE(JOB => 21, WHAT => NULL, NEXT_DATE => NULL, INTERVAL => ‘SYSDATE + 7′);
END;
/
注意,你如果不想改变说明,就标记它为NULL.比如上面这个,只是想改变INTERVAL,那么就把的都标记为NULL.
9,移除一个Job
begin
DBMS_JOB.REMOVE(JOB => 21);
end;
10。补充,job中用到的时间描述:
oracle时间精确到秒;如果你不希望如此精确,你可以使用TRUNC方法,然后加上特定的时间来表示。比如:
SELECT to_char(trunc(sysdate) + 14/24, 'MM/DD/YYYY HH:MI AM') FROM dual;
TRUNC将时间截断到午夜12点整。12:00 AM;这样再加上14个小时,从而或得结果为2:00 pm.
trunc(sysdate + n)表示将日子往后移n天的午夜12点。
阅读(679) | 评论(0) | 转发(0) |