oracal关于job也就是定时任务

来源:互联网 发布:英雄联盟和刀塔2 知乎 编辑:程序博客网 时间:2024/06/04 08:45


实现的功能:

     每隔一分钟自动向getSysDate表中插入当前的系统时间。

中心方法:

1)在命令窗口下:exec GETUSERS1('LMM','LMM');
2)sql窗口下:
begin
GETUSERS1('LMM','LMM');
end;


一、创建一个测试表 aaa

create table aaa(test date);    //test---字段型:date

二、创建要定时执行的[存储]过程: abc.sql

create or replace procedure abcas
begin
   insert into aaa values (sysdate);
end ;

三、创建JOB,即创建待执行的[定时任务]过程 ppp.sql
sql窗口下:

declare
   job1 number;
begin
  dbms_job.submit(job1,'abc;',sysdate,'sysdate+1/1440');
end;

//此时:找到创建JOB[定时任务]过程 ppp.sql成功后,会有一个job_users表中有一个job值。例如:

 select * from dba_jobs

  显示结果:

    例如:      Jon 值为23

  说明:每创建一个成功job后,在job_users表中有一个job值。


四、启动JOB,根据上述查找的job值,即启动并运行定时任务过程
sql窗口下:

-- 运行一个job
begin
  dbms_job.run(23);   //写入:job
end;

五、查看运行效果

selectto_char(test,'yyyy/mm/dd hh24:mi:ss') from aaa;

结果如下:

2007/08/03 10:53:11
2007/08/03 11:05:51


六.终止定时器执行。

-- 终止(删除)一个job进程。(重新数据库后,才看得到进程号消失)

begin

   dbms_job.remove(23);(即:进程号,要看:select *from user_jobs表中what对应的进程名称相信的的job过程号)

end;   

 

七.重新启动job方法,即重新运行[定时任务]过程即可

  Sql>@ppp.sql;

 Sql>/

 

--相关视图

select *fromdba_jobs;

select * from all_jobs;

select *fromuser_jobs;

 

-- 查看正在运行job状态值(包括:job的进程号)

select *fromdba_jobs_running;

Select * from job_users;

 



参数补充说明:

DBMS_JOB.SUBMIT(:jobno,    //job

'your_procedure;',             //
要执行的过程
trunc(sysdate)+1/24,          //
下次执行时间
'trunc(sysdate)+1/24+1'       //
每次间隔时间
);


删除定时执行: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);

修改:job_queue_processes的值:(保证其不为0否则JOB不自动运行),可通过select * from v$parameter;查看其值,或者直接用show parameter job_queue_processes;查看如下:

NAME TYPE VALUE
--------------- ----------- ------------
job_queue_processes integer 10


方法1.startup pfile='C:oracleora90databaseinitorcl.ora';
    这个方法用来修改initorcl.ora文件的job_queue_processes参数,然后重新启动数据库

方法2.alter system set job_queue_processes=10

 

JOB常见的执行时间给你写出一些:
1、每分钟执行

TRUNC(sysdate,'mi')+1/(24*60)

2、每天定时执行
例如:
每天凌晨0点执行
TRUNC(sysdate+1)
每天凌晨1点执行
TRUNC(sysdate+1)+1/24
每天早上830分执行
TRUNC(SYSDATE+1)+(8*60+30)/(24*60)

3、每周定时执行
例如:
每周一凌晨2点执行
TRUNC(next_day(sysdate,1))+2/24
TRUNC(next_day(sysdate,'星期一'))+2/24
每周二中午12点执行
TRUNC(next_day(sysdate,2))+12/24
TRUNC(next_day(sysdate,'星期二'))+12/24

4、每月定时执行
例如:
每月1日凌晨0点执行
TRUNC(LAST_DAY(SYSDATE)+1)
每月1日凌晨1点执行
TRUNC(LAST_DAY(SYSDATE)+1)+1/24

5、每季度定时执行
每季度的第一天凌晨0点执行

TRUNC(ADD_MONTHS(SYSDATE,3),'q')
每季度的第一天凌晨2点执行
TRUNC(ADD_MONTHS(SYSDATE,3),'q')+2/24
每季度的最后一天的晚上11点执行
TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24

6、每半年定时执行
例如:
每年71日和11日凌晨1点执行
ADD_MONTHS(TRUNC(sysdate,'yyyy'),6)+1/24

7、每年定时执行
例如:
每年11日凌晨2点执行
ADD_MONTHS(TRUNC(sysdate,'yyyy'),12)+2/24


 实例

---创建定时任务declare   job1 number;begin  --job1 系统自动分配的定时任务编号  --testp 调用的存储过程  --sysdate 下一次执行的时间  --sysdate+1/1440 时间间隔  dbms_job.submit(job1,'TESTP;',sysdate,'sysdate+1/(1440*60)');  commit;end;

--查看定时任务编号select * from user_jobs--启动定时任务begin  dbms_job.run(84);  commit;end;--暂停定时任务begin  dbms_job.broken(84,true);  commit;end;--删除定时任务begin  dbms_job.remove(84);  commit;end;--修改定时任务修改:要执行的操作: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); sys.dbms_job.remove(job1);   



原创粉丝点击