当前位置:数据库 > Oracle >>

oracle定时器简单操作

oracle定时器简单操作
 
首先创建一张测试表:
Sql代码  create table JOBTEST ( ID VARCHAR2(50) primary key, NAME VARCHAR2(20), AGE NUMBER(3) )   然后写好定时器要调用的存储过程:Sql代码  create or replace procedure myprocedure is begin insert into jobtest values(to_char(sysdate,'yyyy-MM-dd hh:mm:ss'),'july',22); commit; end;   
接下来就要建立定时器了:
Sql代码  var myjob number; begin dbms_job.submit(:myjob,'myprocedure;',sysdate,'sysdate+1/24/60/60'); end;     
最后启动定时器:
Sql代码  begin dbms_job.run(:myjob); end;     
 启动之后,该定时器(理论上)会一秒钟想数据表jobtest中插入一条记录。但是事实上每隔大概五秒才执行一次(原因未知)。
如果建立以上sql语句之后,定时器并未运行,请一dba角色运行select * from v$parameter t where t.name like 'job%';看value的值是多少,如果等于0,则将它设置为大于0的值即可:
可以在C:\oracle\admin\july\pfile\init.ora文件中修改但需要重启动数据库 (july指的是实例名):
  job_queue_interval =   10   
  job_queue_processes =  4;
  如果不想重启动数据库   
  ALTER SYSTEM SET job_queue_processes=5;
查看定时器:以dba角色登录执行select   *   from   dba_jobs;或者当前用户select * from user_jobs;
 删除定时器 begin dbms_job.remove(jobno);    end;    commit;jobno 为 job查询列表中的编号,删除后必须提交事务才能彻底删除。也可以以dba登录后从dba_jobs表中删除。
偶尔一些定时器执行时间很长,在其执行期间要将其停止,必须将其进程kill,然后等待其释放资源,相关语句:
Sql代码  select * from V$session t order by t.USERNAME,t.SID;   Sql代码  select sid,serial#,username,program,machine,status from v$session; select * from v$access t where t.OWNER='july';   Sql代码  alter system kill session 'x,y';   
 
定时器的参数说明:
myjob参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作;
what参数是将被执行的PL/SQL代码块,这里指的是一个存储过程,注意名字后面的分号;
next_date参数指识何时将运行这个工作。写Job的时候可以不指定该值;
interval参数何时这个工作将被重执行。
关于interval的设置,参考以下几个例子:
1、 每分钟执行
Interval => TRUNC(sysdate,’mi’) + 1 / (24*60)
2、 每天定时执行
例如:每天的凌晨2点执行
Interval => TRUNC(sysdate) + 1 +2 / (24)
3、 每周定时执行
例如:每周一凌晨2点执行
Interval => TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天
4、 每月定时执行
例如:每月1日凌晨2点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24
5、 每季度定时执行
例如每季度的第一天凌晨2点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24
6、 每半年定时执行
例如:每年7月1日和1月1日凌晨2点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24
7、 每年定时执行
例如:每年1月1日凌晨2点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,