WEB开发网
开发学院数据库Oracle 教你在Oracle数据库中实现定时操作 阅读

教你在Oracle数据库中实现定时操作

 2007-05-12 12:25:43 来源:WEB开发网   
核心提示: ●next_date:任务执行的时间;●interval:任务执行的时间间隔,下面详细讨论一下dbms_job.submit中的参数interval,教你在Oracle数据库中实现定时操作(3),严格地讲,interval是指上一次执行结束到下一次开始执行的时间间隔,要想删除该任务,只需运

●next_date:任务执行的时间;

●interval:任务执行的时间间隔。

下面详细讨论一下dbms_job.submit中的参数interval。严格地讲,interval是指上一次执行结束到下一次开始执行的时间间隔,当interval设置为null时,该job执行结束后,就被从队列中删除。假如我们需要该job周期性地执行,则要用‘sysdate+m’表示。

将任务加入到任务队列之前,要确定执行任务的数据库用户,若用户是scott, 则需要确保该用户拥有执行包dbms_job的权限;若没有,需要以DBA的身份将权利授予scott用户:

  svrmgrl> grant execute on dbms_job to scott;

4.将要执行的任务写成存储过程或其他的数据库可执行的pl/sql程序段

例如,我们已经建立了一个存储过程,其名称为my_job,在sql/plus中以scott用户身份登录,执行如下命令:

  sql> variable n number;
  sql> begin
  dbms_job.submit(:n‘my_job;’,sysdate,
  ‘sysdate+1/360’);
  commit;
  end;
  /

系统提示执行成功。

  Sql> print :n;

系统打印此任务的编号,例如结果为300。

如上,我们创建了一个每隔4分钟执行一次的任务号为300的任务。可以通过Oracle提供的数据字典user_jobs察看该任务的执行情况:

  sql> select job,next_date,next_sec,failures,broken from user_jobs;

执行结果如下:job next_date next_sec failures broken
300 2000/10/10 11:45:15 0 N

这表示任务号为300的任务,下一次将在2000/10/10 11:45:15执行,此任务的执行失败记录为0次。注意:当执行job出现错误时,Oracle将其记录在日志里,失败次数每次自动加1。当执行失败次数达到16时,Oracle就将该job标志为broken。此后,Oracle不再继续执行它,直到用户调用过程dbms_job.broken,重新设置为not broken,或强制调用dbms_job.run来重新执行它。

除了以上我们讨论的submit存储过程之外,Oracle还提供了其他许多存储过程来操作任务。例如:dbms_job.change 、 dbms_job.what、dbms_job.interval可以用来修改提交的任务。要想删除该任务,只需运行dbms_job.remove(n)即可,其中n为任务号。

上一页  1 2 3 

Tags:Oracle 数据库 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接