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

你可能感兴趣的:(oracle 定时器 job)