日期:2014-05-16  浏览次数:20473 次

Oracle JOB 用法小结
    http://www.bitscn.com/pdb/oracle/200604/19366.html
  一、设置初始化参数 job_queue_processes
  sql> alter system set job_queue_processes=n;(n>0)
  job_queue_processes最大值为1000
  
  查看job queue 后台进程
  sql>select name,description from v$bgprocess;

  假设有一个存储过程p_test,如何才能每20分钟执行一次?
  1、把init.ora中如下两个参数打开。
  1.JOB_QUEUE_INTERVAL=60
  2.
  3.JOB_QUEUE_PROCESSES=4
  4.
  5.job_queue_keep_connections=true
  然后重启一个库,如果原来已经打开了则不用这步了。

    二、oracle JOB 的创建列子详解
    http://www.blogjava.net/baoyaer/articles/236802.html
创建
variable job_feeid_create  NUMBER;
begin
    sys.dbms_job.submit(:job_feeid_create,'wlk_check_fee;',sysdate,'TRUNC(SYSDATE+1)');
commit;
end;
在命令控制台中这样就可以建产一个作业了。sysdate表示当前作业将来执行的时间,sysdate+1表示调用频率。

描述                    INTERVAL参数值
每天午夜12点            'TRUNC(SYSDATE + 1)'
每天早上8点30分         'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午12点         'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每个月第一天的午夜12点    'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6点10分    'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'


运行

begin
  dbms_job.run(:job_feeid_create);
  end;

查询作业记录
select   *   from   user_jobs

具体讲解:
       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.确保Oracle的系统已经配置了任务队列管理器的启动参数
            SNP的启动参数位于Oracle的初始化文件中,该文件放在$ORACLE_HOME/dbs路径下,如果Oracle的SID是myora8的话,则初始化文件就是   initmyora8.ora,在文件中对SNP启动参数的描述部分如下:
            job_queue_process=n
            job_queue_interval=N
            第一行定义SNP进程的启动个数为n。系统缺省值为0,正常定义范围为0~36,根据任务的多少,可以配置不同的数值。
            第二行定义系统每隔N秒唤醒该进程一次。系统缺省值为60秒,正常范围为1~3600秒。事实上,该进程执行完当前任务后,就进入睡眠状 态,睡眠一段时间后,由系统的总控负责将其唤醒。
            如果该文件中没有上面两行,请按照如上配置添加。配置完成后,需要重新启动数据库,使其生效。注意:如果任务要求执行的间隔很短的 话,N的配置也要相应地小一点。
       3.将任务加入到数据库的任务队列中
              用Oracle的dbms_job包中的存储过程,将任务加入到任务队列中:
dbms_job.submit( job out binary_integer,
what       in   archar2,
next_date     in   date,
interval     in   varchar2,
no_parse     in   boolean)

其中:
         ●job:输出变量,是此任务在任务队列中的编号;
         ●what:执行的任务的名称及其输入参数;
&nbs