Oracle Job 任务计划管理[作业,定期执行任务]<转>

常用命令:

SQL>select   *   from   v$parameter where name='job_queue_processes';   --查阅作业的进程号

SQL> select * from dba_jobs;--数据库所有的任务

SQL> select * from USER_JOBS;--数据库当前用户的所有任务

SQL>  select job,what,to_char(last_date,'yyyy-mm-dd HH24:mi:ss'),

           to_char(next_date,'yyyy-mm-dd HH24:mm'),interval from dba_jobs;--查看所有的任务信息

SQL>select job,what,last_date,next_date,interval from   dba_jobs ;--查看所有的任务信息

SQL> exec dbms_job.broken(1,true);--停止一个job

SQL> commit ;---必须提交否则停止无效
SQL> exec dbms_job.broken(1,false);--启动作业

SQL>exec sys.dbms_ijob.broken(98,true);--停其他用户的job

SQL> commit ;---必须提交否则停止无效

 

示例如下:

exec dbms_job.broken(:job) 停止
exec dbms_job.broken(186,true) //标记位broken
exec dbms_job.broken(186,false)//标记为非broken
exec dbms_job.broken(186,false,next_day(sysdate,'monday')) //标记为非broken,指定执行时间
exec dbms_job.remove(:job);删除
exec dbms_job.remove(186);
commit;

相关视图:
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息

 

job change//修改作业
execute dbms_job.change(186,null,null,'sysdate+3');
execute dbms_job.change(186,'scott.test(update)');

 

DBA_JOBS
===========================================
字段(列)           类型                  描述 
JOB                 NUMBER           任务的唯一标示号 
LOG_USER            VARCHAR2(30)     提交任务的用户 
PRIV_USER           VARCHAR2(30)     赋予任务权限的用户 
SCHEMA_USER         VARCHAR2(30)     对任务作语法分析的用户模式 
LAST_DATE           DATE             最后一次成功运行任务的时间 
LAST_SEC            VARCHAR2(8)      如HH24:MM:SS格式的last_date日期的小时,分钟和秒 
THIS_DATE      DATE             正在运行任务的开始时间,如果没有运行任务则为null 
THIS_SEC      VARCHAR2(8)      如HH24:MM:SS格式的this_date日期的小时,分钟和秒 
NEXT_DATE           DATE             下一次定时运行任务的时间 
NEXT_SEC            VARCHAR2(8)      如HH24:MM:SS格式的next_date日期的小时,分钟和秒 
TOTAL_TIME          NUMBER           该任务运行所需要的总时间,单位为秒 
BROKEN              VARCHAR2(1)      标志参数,Y标示任务中断,以后不会运行 
INTERVAL            VARCHAR2(200)    用于计算下一运行时间的表达式 
FAILURES     NUMBER      任务运行连续没有成功的次数 
WHAT                VARCHAR2(2000)   执行任务的PL/SQL块 
CURRENT_SESSION_LABEL RAW           MLSLABEL 该任务的信任Oracle会话符 
CLEARANCE_HI       RAW MLSLABEL      该任务可信任的Oracle最大间隙 
CLEARANCE_LO       RAW               MLSLABEL 该任务可信任的Oracle最小间隙 
NLS_ENV            VARCHAR2(2000)    任务运行的NLS会话设置 
MISC_ENV           RAW(32)           任务运行的其他一些会话参数


描述                     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)'

 

一个简单例子:     
    
  创建测试表   
  SQL>   create   table   a(a   date);   
    
  表已创建。   
    
  创建一个自定义过程   
  SQL>   create   or   replace   procedure   test (  p_init_date IN number)   as   
      2     begin   
      3     insert   into   a   values(to_date(p_init_date,'yyyy-mm-dd'));   
      4     end;   
      5     /   
    
  过程已创建。   
    
  创建JOB   
  SQL>   variable   job1   number;   
  SQL>   begin   --每天1440分钟,即一分钟运行test过程一次   
      2     dbms_job.submit(:job1,'test(20090101);',sysdate,'sysdate+1/1440' );

     3     end;   
      4     /   
    
  PL/SQL   过程已成功完成。  

job1
---------
41

    
  运行JOB   
  SQL>   begin   
      2     dbms_job.run(:job1);   ---或者dbms_job.run(41);  编号41是上面job1的任务号
      3     end;   
      4     /   
    
  PL/SQL   过程已成功完成。   
    
  SQL>   select   to_char(a,'yyyy/mm/dd   hh24:mi:ss')   时间   from   a;   
    
  时间   
  -------------------   
  2009/01/01   00:00:00   
  2009/01/01   00:00:00  
  2009/01/01   00:00:00  
    
  删除JOB   
  SQL>   begin   
      2     dbms_job.remove(:job1);     ---或者dbms_job.remove(41);  编号41是上面job1的任务号
      3     end;   
      4     /   
    
  PL/SQL   过程已成功完成。  

job1
---------
41

    
    
  select   job,to_char(next_date,'yyyy-mm-dd   hh24:mi:ss')   from   all_jobs;   
    
   

 

--以下任务是13:30以后开始执行一下个任务计划,并且每十分钟执行一次(注意这里任务计划是启动时就执行一次,所以13:26启动执行后,到13:36分执行第二次)
   variable   move_data   number;   
   begin   
       dbms_job.submit(:move_data,'SP_DGZQ_AUTO_MOVE_DATA(1);',sysdate+(13*60+30)/(24*60),'SYSDATE + 10/(24*60)');
    end;   
   / 
  ----------job的使用:   
    
  DBMS_JOB.SUBMIT(:jobno,//job号   
                                  'your_procedure;',//要执行的过程   
                                  trunc(sysdate)+1/24,//下次执行时间   
                                  'trunc(sysdate)+1/24+1'//每次间隔时间   
                                );   
  删除job:dbms_job.remove(jobno);   
  修改要执行的操作:job:dbms_job.what(jobno,what);   
  修改下次执行时间:dbms_job.next_date(job,next_date);   
  修改间隔时间:dbms_job.interval(job,interval);   
  停止job:dbms.broken(job,broken,nextdate);   
  启动job:dbms_job.run(jobno);   
  例子:   
  VARIABLE   jobno   number;   
  begin   
              DBMS_JOB.SUBMIT(:jobno,     
                              'Procdemo;',//Procdemo为过程名称     
                                SYSDATE,   'SYSDATE   +   1/720');   
                    commit;   
  end;   
    
  -----修改job_queue_processes的值(保证其不为0否则JOB不自动运行)   
  可通过select   *   from   v$parameter;查看其值;   
  方法1,startup   pfile='C:\oracle\ora90\database\initorcl.ora';   
  需要修改initorcl.ora文件的job_queue_processes参数,然后重新启动数据库以后才能生效   
  方法2,alter   system   set   job_queue_processes=10     
  不需要重新启动数据库就能生效,系统自动修改init.ora文件

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24199069/viewspace-682061/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24199069/viewspace-682061/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值