Oracle的Job

2014-11-24 17:04:15 · 作者: · 浏览: 0

第一篇:介绍 job_queue_processes的参数不能为0才能用JOB job_queue_processes 执行job的最大进程数,为0则所有JOB与scheduler都不会跑,一般设为10。属于每个用户的job,只能由自己管理,DBA也没权管理别的用户的JOB。

第二篇:实验 实验: --创建表T drop table t; create table t (d date,s varchar2(50)); --创建过程p create or replace procedure p as begin insert into t values(sysdate,'aaa'); commit; --exception --when others then --dbms_output.put_line('异常编码: ' || SQLCODE || ' 异常信息:'|| SQLERRM); end; / --提交job var job1 number; exec DBMS_JOB.SUBMIT(:JOB1, what=>'p;',next_date=>SYSDATE, interval=>'sysdate+1/(60*24),no_parse => false'); commit;

第三篇:管理 提交job,如果有多个过程执行,以;分隔。 var job1 number; exec DBMS_JOB.SUBMIT(:JOB1, what=>'p;',next_date=>SYSDATE, interval=>'sysdate+1/(60*24),no_parse => false'); commit; no_parse的false(默认)表示提交job时就对执行的过程立刻语法分析,而true表示第一次执行时才进行语法分析。提交job是一种事务行为,需要commit才能生效,没commit的话,从别的会话查DBA_JOBS视图查不到这个job,JOB也不会跑起来。如果rollback后这个job就没了。

手工运行一下这个job exec DBMS_JOB.RUN(:job1); 首先运行一下这个job中what定义的过程,然后会按常规间隔跑起来,如果本来是broken的话,也会转为未破。不是事务行为,只要一RUN,就算没commit,其他会话也能从dba_jobs查到最新的视图。 --将一个已破job转为未破job exec DBMS_JOB.BROKEN(,FALSE); commit; 是事务行为,转为未破job后,job也不会立刻运行,而是要等commit; exec dbms_job.broken(102,false,sysdate+1/24),最后一个参数next_date指定什么时候转。 --删除这个job exec DBMS_JOB.REMOVE(:JOB1); commit; 如果job正在跑的话,会坚持跑完的。事务行为,需要commit; --修改下次执行时间 exec dbms_job.next_date (:job1,SYSDATE + 10/(24*60)); commit; --修改执行间隔 exec dbms_job.interval(:job1,'sysdate+30/1440'); commit; --TRUNC(SYSDATE+1)+10/24 每天上午10点执行一次 --TRUNC(next_day(sysdate,2))+1/24 每周二的凌晨1点执行 --TRUNC(LAST_DAY(SYSDATE))+1+1/24 每月1号凌晨1点执行 --重新提交job的内容 exec dbms_job.what(:job1,'p2;'); exec dbms_job.what(:job1,'update t set d=sysdate;commit;'); commit; --更改JOB参数 输入job号是必须的,其余三项可以改变,为Null的话表示不变。事务行为,如果更改了JOB的参数而未commit,job将暂时停止执行,此时JOB的broken标记并不会改变,并且只有自己会话看到当前JOB参数已变动。本会话未commit,是对job$这个表相关行加了锁,其他会话对这个JOB不能做任何变动,也不能RUN。 --下面的过程只更改interval exec dbms_job.change(job=>5869,what=>null,next_date=>null,interval=>'sysdate+5/24/60'); commit; 关于job诊断 用户报上来的Job问题,首先检查job_queue_processes参数。代码(例如过程p)运行过程中,假如Insert的列字段类型不对,执行过程中出错了,FAILURES值会加1,有异常捕获的话就算有错,程序也能正常跑下去,此时failure就不会加1。如果语法有错,例如values写成value,编译过程时就已经会报错,编译出来的对象也会是INVALID,此时job跑一次failure也会加1。 failure16次后,还未能成功执行,将被标记为broken,此时oracle将不再尝试执行这个job。

第四篇:查视图 查看部署了的JOB。 select * from dba_jobs; 查看正在运行的JOB select * from dba_jobs_running; 查看OS上,运行JOB的进程。 select * from v$process where program like '%(J%'; program是诸如oracle@cnsh281004 (J000)这样的。