`
yde986
  • 浏览: 98762 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Oracle中实现后台自动执行的定时操作(定时器)

阅读更多

1.确保Oracle的工作模式答应启动任务队列治理器:
  Oracle定时执行“Job Queue”的后台程序是SNP进程,而要启动SNP进程,首先要确保整个系统的模式是可以启动SNP进程的,这需要以DBA的身份去执行如下命令:
  svrmgrl> alter system enable restricted session;
  或sql> alter system disenable restricted session;
  利用如上命令更改系统的会话方式为disenable restricted,为SNP的启动创造条件。
2. Dbms_job.submit的语法为:
   dbms_job.submit( job out binary_integer,
  whatinarchar2,
  next_date indate,
  intervalinvarchar2,
  no_parseinboolean);
   其中:
  ●job:输出变量,是此任务在任务队列中的编号;
  ●what:执行的任务的名称及其输入参数;
  ●next_date:任务执行的时间;
  ●interval:任务执行的时间间隔。
   将任务加入到任务队列之前,要确定执行任务的数据库用户,若用户是scott, 则需要确保该用户拥有执行包dbms_job的权限;若没有,需要以DBA的身份将权利授予scott用户:
  svrmgrl> grant execute on dbms_job to scott;
3. 实例:
  Java代码
SQL> declare  
 2  n number;  
 3  begin  
 4  dbms_job.submit(n, 'PKG_RPT_REVERSAL.P_FORM4_REVERSAL_ENTRY;',SYSDATE, null);  
 5  commit;  
 6  end;  
 7  /  
 
L/SQL procedure successfully completed 

 SQL> declare
  2  n number;
  3  begin
  4  dbms_job.submit(n, 'PKG_RPT_REVERSAL.P_FORM4_REVERSAL_ENTRY;',SYSDATE, null);
  5  commit;
  6  end;
  7  /
 
PL/SQL procedure successfully completed

PKG_RPT_REVERSAL.P_FORM4_REVERSAL_ENTRY的代码如下:
Java代码
/* 
* insert data into t_prod_tmp table 
*/ 
PROCEDURE P_INSERT_PROD_TMP(I_PROCESS_DATE IN DATE)AS  
  M_START_DATE date;  
  M_END_DATE date;  
  BEGIN  
    select trunc(I_PROCESS_DATE, 'MONTH') into M_START_DATE from dual;  
    M_END_DATE := ADD_MONTHS(M_START_DATE, 1);  
      
   INSERT INTO T_PROD_TMP  
    (POLICY_ID, CHANGE_ID, SERVICE_ID, FINISH_TIME)  
   SELECT PC.POLICY_ID,PC.CHANGE_ID,PC.SERVICE_ID,PC.FINISH_TIME  
   FROM T_POLICY_CHANGE PC, T_ACTUARY_FORM4_TRANSACTION FT  
   WHERE PC.CHANGE_STATUS = '4' ----撤销状态  
   AND PC.SERVICE_ID = FT.TRANS_ID  
   AND FT.TRANS_STATUS = '1' -----有效Service  
   AND PC.FINISH_TIME >= M_START_DATE  
   AND PC.FINISH_TIME < M_END_DATE  
   AND PC.WITHDRAW_TIME <= PC.FINISH_TIME ---Service Undo操作时间应该先于finish_time  
   ORDER BY PC.POLICY_ID,PC.FINISH_TIME;  
     
  END P_INSERT_PROD_TMP;  
  /* 
  * Function Entry  
  */ 
  PROCEDURE P_FORM4_REVERSAL_ENTRY AS  
  BEGIN  
     ---- insert data about service reversal Trans into T_PROD_TMP Table-----  
     P_INSERT_PROD_TMP(SYSDATE);  
     ---some actions on database are as follows...  
  END P_FORM4_REVERSAL_ENTRY;  
end PKG_RPT_REVERSAL; 

/*
* insert data into t_prod_tmp table
*/
PROCEDURE P_INSERT_PROD_TMP(I_PROCESS_DATE IN DATE)AS
  M_START_DATE date;
  M_END_DATE date;
  BEGIN
    select trunc(I_PROCESS_DATE, 'MONTH') into M_START_DATE from dual;
    M_END_DATE := ADD_MONTHS(M_START_DATE, 1);
   
   INSERT INTO T_PROD_TMP
    (POLICY_ID, CHANGE_ID, SERVICE_ID, FINISH_TIME)
   SELECT PC.POLICY_ID,PC.CHANGE_ID,PC.SERVICE_ID,PC.FINISH_TIME
   FROM T_POLICY_CHANGE PC, T_ACTUARY_FORM4_TRANSACTION FT
   WHERE PC.CHANGE_STATUS = '4' ----撤销状态
   AND PC.SERVICE_ID = FT.TRANS_ID
   AND FT.TRANS_STATUS = '1' -----有效Service
   AND PC.FINISH_TIME >= M_START_DATE
   AND PC.FINISH_TIME < M_END_DATE
   AND PC.WITHDRAW_TIME <= PC.FINISH_TIME ---Service Undo操作时间应该先于finish_time
   ORDER BY PC.POLICY_ID,PC.FINISH_TIME;
  
  END P_INSERT_PROD_TMP;
  /*
  * Function Entry
  */
  PROCEDURE P_FORM4_REVERSAL_ENTRY AS
  BEGIN
     ---- insert data about service reversal Trans into T_PROD_TMP Table-----
     P_INSERT_PROD_TMP(SYSDATE);
     ---some actions on database are as follows...
  END P_FORM4_REVERSAL_ENTRY;
end PKG_RPT_REVERSAL;

查看一下job执行情况:
SQL> select job,next_date,next_sec,failures,broken from user_jobs;

       JOB NEXT_DATE   NEXT_SEC                   FAILURES BROKEN
---------- ----------- ------------------------ ---------- ------
      1726 1/1/4000    00:00:00                            N
      2103 1/1/4000    00:00:00                            N
      2601 1/1/4000    00:00:00                            N
      4021 12/1/2009   00:00:00                          0 N
      6227 11/30/2009  13:22:22                          0 N
      6228 11/30/2009  13:22:17                          0 N
       973 1/1/4000    00:00:00                         17 Y
      2977 12/7/2009   00:00:00                          0 N
      2976 12/7/2009   00:00:00                          0 N
      3579 1/1/4000    00:00:00                         16 Y
     13063 12/1/2009   00:00:00                          0 N
     13149 12/1/2009   00:00:00                          0 N
     19683 11/30/2009  13:22:22                          0 N
     21929 11/30/2009  13:22:17                          0 N
     21930 11/30/2009  13:22:22                          0 N
如果事务到预定时间并没有执行,排除是过程本身的问题外,可能的原因是初始化参数job_queue_processes值为0或没有设置。用alter system set job_queue_processes=n;(n>0)做好设置。注:job_queue_processes最大值为1000

分享到:
评论

相关推荐

    在Oracle中实现后台自动执行的定时操作

    JOB使用 在Oracle中实现后台自动执行的定时操作

    ORACLE定时任务不能自动执行的检查修复步聚

    ORACLE定时任务不能自动执行的检查修复步聚。 oracle定时任务有时不能自动执行,据网上说可能是某个版本的BUG,一般通过这些步骤就能恢复了。 这是本人结合网络上的知识,解决实际问题时记录的。

    Oracle定时执行存储过程

    Oracle定时执行存储过程 Oracle定时执行存储过程

    oracle 定时执行计划任务

    Oracle 在10g 版本以前,计划任务用的是DBMS_JOB 包,10g 版本引入DBMS_SCHEDULER ...管理,但DBMS_JOB 包的使用相对比较简单,也基本能够满足定时执行计划任务的需求,故 接下来就先看看DBMS_JOB 包的使用方法。

    Linux下定时自动执行Oracle_SQL

    在工作中常用到自动执行一些统计查询语句,这个应该比较实用。

    Oracle定时器

    Oracle定时器的使用,可实现定时清除数据,定时汇总数据等功能。

    Oracle中通过命令行实现定时操作详解

    众所周知,一般操作系统会提供定时执行任务的方法,例如Unix平台上提供了让系统定时执行任务的命令Crontab。但是对于某些需求,例如一些对数据库表的操作,最为典型的是证券交易所每日收盘后的结算,它涉及大量的...

    如何在Oracle数据库中实现定时操作

    任务队列管理器允许我们定制任务的执行时间,并提供了灵活的处理方式,还可以通过配 置,安排任务在系统用户访问量少的时段内执行,极大地提高了工作效率。...本文主要介绍了如何在Oracle数据库中实现定时操作。

    用plsql建立oracle的定时器

    用plsql建立oracle的定时器,方便数据库定时运行

    oracle定时任务创建、查询等

    -- job 创建 begin dbms_scheduler.create_job ( job_name =&gt; 'AGENT_LIQUIDATION_JOB', ... job_type =&gt; 'STORED_PROCEDURE', ... job_action =&gt; 'AGENT_... comments =&gt; '执行代理商清分程序' ); end;

    Oracle数据库的一个定时器

    这是一个关于oracle的数据库定时器,作用是每年的第一天的凌晨一时更新数据库。原理是先写一个存储过程,然后写一个定时器在job里面,数据库会自动监测,到了时间就会执行存储过程完成任务。

    oracle数据库自动备份脚本

    备份oracle数据库,并压缩打包,传至远程FTP服务器,做到本地异地同时备份,可自动清理本地过期备份,自动保留N个最新备份(针对此种备份,不针对文件夹),老的备份自动删除,将此文件加入系统任务计划,则可实现定时...

    oracle触发器实现主键自动增长

    oracle触发器实现主键自动增长操作

    oracle 定时自动备份

    实现了oracle的自动备份 ,可自选备份地址及数据库。

    如何在Oracle中实现数据自动导入导出

    Oracle数据库的自动导入与导出,在许多地方有广泛的应用。例如:一个Oracle数据库应用系统开发结束后,如果要将系统安装到客户计算机上,就需要将初始数据导入到用户的Oracle数据库中。先把要安装的初始数据文件导出为...

    oracle自动备份脚本

    oracle自动备份脚本程序,每天定时执行备份操作。

    Centos7.6下设置Oracle定时自动备份和sudo设置.docx

    Centos7.6 下 Oracle 定时自动备份和 sudo 设置 本文将详细介绍 Centos7.6 下 Oracle 定时自动备份和 sudo 设置的过程。该过程包括编写数据库备份脚本文件、设置定时、sudo 设置等多个方面。 编写数据库备份脚本...

    oracle定时器

    在Oracle数据库中,我们经常会用到定时器Job来让数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作。但是,Oracle定时器Job时间的处理上,千变万化,...

    利用WSH实现Oracle逻辑备份的自动执行.pdf

    利用WSH实现Oracle逻辑备份的自动执行.pdf

Global site tag (gtag.js) - Google Analytics