Oracle数据库中可通过使用DBMS_JOB包来实现定时器的功能,可通过一个执行循环调用欲执行过程的程序来达到这种效果。建立作业的sql语句如下:
=============================================================================================================
declare
var_ret_num number(6);
begin
dbms_job.submit(var_ret_num,'program_name;',sysdate);
commit;
--program_name为过程B的名称,var_ret_num为返回的作业号,sysdate为作业的开始执行时间
dbms_output.put_line('新建作业号='||to_char(var_ret_num));
end;
=============================================================================================================
如需作业运行,还需在oracle数据库中的启动文件中(init.ora)增加作业调度进程数的参数语句,语句如下:job_queue_processes = 2,‘2’为作业调度进程数量,在通常情况下,作业调度进程数为‘1’即可,如果作业数量较多,可设置作业调的度进程数量多一些。
提交完成后,可在字典dba_jobs中查询是否有此作业。
select job,what,log_user,priv_user,schema_user,last_date,last_sec,this_date,this_sec,next_date,next_sec,total_time,broken,interval,failures from dba_jobs;
在字典dba_jobs_running表查询作业是否正在运行。
select * from dba_jobs_running;
在使用中发现如果使作业中的循环跳出后,作业就终止运行,需重新提交一次作业才能使其重新运行。
将运行的作业置为失效状态:EXEC DBMS_JOB.BROKEN(job_no,FALSE);如失效作业号为25的作业:EXEC DBMS_JOB.BROKEN(25,FALSE);broken中的第二个参数用于设置作业的状态,如果为true就表示将把作业状态置为失效的,作业不再运行,需要使用run强制运行;如果为false表示只失效本次执行,作业的状态仍然是有效,到作业的下一次运行时间时作业仍然会自动运行。
将失效的作业删除:exec dbms_job.remove(job_no);如删除作业号为25的作业:exec dbms_job.remove(25);注意:必须要将有效的作业失败后再删除,否则有可能作业正在运行是无法删除的。
重新运行作业:exec dbms_job.run(job_no); job_no为通过submit创建的作业号。使用run函数运行一个作业将会使用作业的状态重新置为有效。
注意:在调用dbms_job的函数后都需要使用commit来提交所执行的操作。
=============================================================================================================
declare
var_ret_num number(6);
begin
dbms_job.submit(var_ret_num,'program_name;',sysdate);
commit;
--program_name为过程B的名称,var_ret_num为返回的作业号,sysdate为作业的开始执行时间
dbms_output.put_line('新建作业号='||to_char(var_ret_num));
end;
=============================================================================================================
如需作业运行,还需在oracle数据库中的启动文件中(init.ora)增加作业调度进程数的参数语句,语句如下:job_queue_processes = 2,‘2’为作业调度进程数量,在通常情况下,作业调度进程数为‘1’即可,如果作业数量较多,可设置作业调的度进程数量多一些。
提交完成后,可在字典dba_jobs中查询是否有此作业。
select job,what,log_user,priv_user,schema_user,last_date,last_sec,this_date,this_sec,next_date,next_sec,total_time,broken,interval,failures from dba_jobs;
在字典dba_jobs_running表查询作业是否正在运行。
select * from dba_jobs_running;
在使用中发现如果使作业中的循环跳出后,作业就终止运行,需重新提交一次作业才能使其重新运行。
将运行的作业置为失效状态:EXEC DBMS_JOB.BROKEN(job_no,FALSE);如失效作业号为25的作业:EXEC DBMS_JOB.BROKEN(25,FALSE);broken中的第二个参数用于设置作业的状态,如果为true就表示将把作业状态置为失效的,作业不再运行,需要使用run强制运行;如果为false表示只失效本次执行,作业的状态仍然是有效,到作业的下一次运行时间时作业仍然会自动运行。
将失效的作业删除:exec dbms_job.remove(job_no);如删除作业号为25的作业:exec dbms_job.remove(25);注意:必须要将有效的作业失败后再删除,否则有可能作业正在运行是无法删除的。
重新运行作业:exec dbms_job.run(job_no); job_no为通过submit创建的作业号。使用run函数运行一个作业将会使用作业的状态重新置为有效。
注意:在调用dbms_job的函数后都需要使用commit来提交所执行的操作。