主要用作oracle数据库存储过程中定时操作使用方法
实现的功能:
每隔一分钟自动向getSysDate表中插入当前的系统时间。 中心方法: 1)在命令窗口下: exec GETUSERS1('LMM','LMM'); 2)在sql窗口下:
begin
GETUSERS1('LMM','LMM');
end;
一、创建一个测试表 aaa
create table aaa(test date);
//test---字段型:date
create or replace procedure abc as
begin
insert into aaa values (sysdate);
end ;
三、创建JOB,即创建待执行的[定时任务]过程 ppp.sql
在sql窗口下:
variable job1 number;
begin
dbms_job.submit(:job1,'abc;',sysdate,'sysdate+1/1440');
end;
//此时:找到创建个job值。例如:
Select job from job_users;
显示结果:
例如: Jon 值为23
说明:每创建一个成功job后,在job_users表中有一个job值。
四、启动JOB,根据上述查找的job值,即启动并运行定时任务过程
在sql窗口下:
-- 运行一个job
主要用作oracle数据库存储过程中定时操作使用方法
begin
dbms_job.run(23); //写入:job值
end;
五、查看运行效果
select to_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>/
--相关视图
select * from dba_jobs;
select * from all_jobs;
select * from user_jobs;
-- 查看正在运行job状态值(包括:job的进程号)
select * from dba_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);
主要用作oracle数据库存储过程中定时操作使用方法
修改:要执行的操作: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
1、每分钟执行
TRUNC(sysdate,'mi')+1/(24*60)
2、每天定时执行
例如:
每天凌晨0点执行 TRUNC(sysdate+1)
每天凌晨1点执行
TRUNC(sysdate+1)+1/24 每天早上8点30分执行
TRUNC(SYSDATE+1)+(8*60+30)/(24*60)
3、每周定时执行
例如:
每周一凌晨2点执行
TRUNC(next_day(sysdate,1))+2/24
TRUNC(next_day(sysdate,'星期一'))+2/24
主要用作oracle数据库存储过程中定时操作使用方法
每周二中午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、每半年定时执行
例如:
每年7月1日和1月1日凌晨1点执行
ADD_MONTHS(TRUNC(sysdate,'yyyy'),6)+1/24 7、每年定时执行
例如:
每年1月1日凌晨2点执行
ADD_MONTHS(TRUNC(sysdate,'yyyy'),12)+2/24

