
问题 假设有一个存储过程p_test 如何才能每 分钟执行一次?
解答
把init ora中如下两个参数打开
JOB_QUEUE_INTERVAL=
JOB_QUEUE_PROCESSES=
job_queue_keep_connections=true
然后重启一个库 如果原来已经打开了则不用这步了
示例 以下由sqlplus 来执行 具体参照一下相关的文档
VARIABLE jobno number;
BEGIN
DBMS_JOB SUBMIT(:jobno
p_test;
SYSDATE SYSDATE + / );
mit;
END;
DBMS_JOB SUBMIT(:jobno //job号
your_procedure; //要执行的过程
trunc(sysdate)+ / //下次执行时间
trunc(sysdate)+ / + //每次间隔时间
);
删除job:dbms_job remove(jobno);
修改job:dbms_job what(jobno what);
修改下次执行时间 dbms_job next_date(job next_date);
修改间隔时间 dbms_job interval(job interval);
停止job:dbms broken(job broken nextdate);
启动job:dbms_job run(jobno);
例子
VARIABLE jobno number;
begin
DBMS_JOB SUBMIT(:jobno
Procdemo;
SYSDATE SYSDATE + / );
mit;
lishixinzhi/Article/program/Oracle/201311/17638
jobs是oracle数据库的对象,
dbms_jobs只是jobs对象的一个实例, 就像对于tables, emp和dept都是表的实例
创建物化视图的时候,如果有next参数,系统也会自动创建相应的job
PL/SQL DEVELOPER中dbms_jobs中的JOB可以通过dbms_jobssubmit创建,并且在user_jobs视图中能找到
dbms_jobsubmit(test_job_really,'test_jobproce("zhangsan");',sysdate,'sysdate+1/1440');
改为:
dbms_jobsubmit(test_job_really,'test_jobproce(''zhangsan'');',sysdate,'sysdate+1/1440');
注意:zhangsan的两边,不是双引号,是两个单引号!
如有帮助,请采纳!
对于Oracle的RAC集群数据库,一直以来对于高度JOB方面如何做到负载均衡,一直都不太清楚,这几天测试了一下,得出以下结论。
一个JOB在何级别运行是可以定制的。如果把job定义在db级,job可以运行在任何活动的instance上,并遵循job的调度机制;
如果把job定义在instance级别上,job将运行在指定的实例上,如因某种异常导致创建job的实例当机,那job将运行在存活的实例上。
1、目前我们的rac数据库是通过查询语句 select job,instance,what fromdba_jobs 可以看到instance=0,这表示该job是db级,可以运行在任何活动的instance上,由job的调度机制决定在哪个实例上运行。也就是说RAC会根据两台服务器的运行状态来调度JOB在不同的节点实例中运行,一个JOB可以在A机,下一次有可能在B机运行;
2、通过在调度中指定instance 参数,可以指定job只在某个特定实例上运行,但是如果该实例的服务器出现故障时,发现job 在实例A上不再运行,也不会切换到其它实例。如果job建立时没有指定运行在某个实例上,在job当前运行的实例关掉后,却可以切到其他活动的实例上。
3、一般情况下,建立不要指定JOB在特定实例运行,如果对于对于已经在运行的job,如果想指定其只在某个实例运行。建议先删除此job,然后重建job,重建时指定job运行的实例。对于有人说可以使用如下方式修改job运行的实例:SQL> exec dbms_jobinstance(26,1)。经测试,不好使,此sql执行后,job不再运行,并出现等待事件:enq: TX - row lock contention,查到执行的sql是update sysjob$ setthis_date=:1 where job=:2,也就是在更新sys的sysjob$表,最后只能杀掉此会话,才消除此等待事件。
4、目前还没找到SQL语句来查看某一个JOB运行在哪个实例,一查询,都是0(默认),则可能在任何节点执行。笨方法是通过在Linux中用TOP语句查看CPU的性能来判断是否负荷均衡。
转载,仅供参考。
使用submit()创建job
参数:job、what、next_date、interval、no_parse
PROCEDURE Submit ( job OUT binary_ineger,What IN varchar2,next_date IN date,interval IN varchar2,no_parse IN booean:=FALSE)
job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE
指示此PL/SQL代码在它第一次执行时应进行语法分析,
而FALSE指示本PL/SQL代码应立即进行语法分析。
在command window窗口中执行下面脚本
variable job1 number;
begin
sysdbms_jobsubmit(job => :job,
what => 'clear_table;',
next_date => trunc(sysdate+1)+2/24,
interval => 'trunc(sysdate+1)+2/24');--每天1440分钟,即一分钟运行test过程一次
commit;
end;
/
有问题再追问吧,望采纳。
以上就是关于Oracle数据库中如何根据时间来执行JOB全部的内容,包括:Oracle数据库中如何根据时间来执行JOB、oracle中dbms_jobs与Jobs的区别、oracle数据库job怎么调用含参数的存储过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)