Oracle数据库中如何根据时间来执行JOB

Oracle数据库中如何根据时间来执行JOB,第1张

问题 假设有一个存储过程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怎么调用含参数的存储过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9875112.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存