****************2007-02-01Job管理******************* Job管理字典(dba_jobs): SQL> select * from dba_jobs; dba_jobs:描述数据库里所有的Job 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)          任务运行的其他一些会话参数  =================================================================================== 相关View dba_jobs all_jobs user_jobs dba_jobs_running 包含正在运行job相关信息 相关参数: 初始化相关参数job_queue_processes alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000  job_queue_interval = 10  //调度作业刷新频率秒为单位   show paramter background_dump_dest   //诊断故障相关目录文件 包括(alter.log 和trace) 管理命令: 停止作业 SQL> exec dbms_job.broken(1,true)    //1:Job 唯一标识号 PL/SQL 过程已成功完成。 SQL>commit  //必须提交否则无效 启动作业 SQL> exec dbms_job.broken(1,false)  x PL/SQL 过程已成功完成。 =================================================================================== 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;
创建JOB variable jobno number; begin   dbms_job.submit(:jobno, 'statspack.snap;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);   commit; end; print jobno 例如,我们已经建立了一个存储过程,其名称为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;  系统提示执行成功。  Sql> print :n;  系统打印此任务的编号,例如结果为300。  简单例子 创建测试表 SQL> create table TEST(a date); 表已创建。 创建一个自定义过程 SQL> create or replace procedure MYPROC as   2  begin   3  insert into TEST values(sysdate);   4  end;   5  / 过程已创建。 创建JOB SQL> variable job1 number; SQL>  SQL> begin   2  dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440'); --每天1440分钟,即一分钟运行test过程一次   3  end;   4  / PL/SQL 过程已成功完成。 运行JOB SQL> begin   2  dbms_job.run(:job1);   3  end;   4  / PL/SQL 过程已成功完成。 SQL> select to_char(a,'yyyy/mm/dd hh24:mi:ss') 时间 from TEST; 时间 ------------------- 2001/01/07 23:51:21 2001/01/07 23:52:22 2001/01/07 23:53:24 删除JOB SQL> begin   2  dbms_job.remove(:job1);   3  end;   4  / PL/SQL 过程已成功完成。 ===================================================================================
a、利用dbms_job.run()立即执行该job    sql>begin    sql>dbms_job.run(:jobno) 该jobno为submit过程提交时返回的job number    sql>end;    sql>/ b、利用dbms_job.broken()重新将broken标记为false    sql>begin    sql>dbms_job.broken (:job,false,next_date)    sql>end;    sql>/ =================================================================================== SQL> create table a(a date); Table created 创建一个过程 SQL> create or replace procedure test as   2  begin   3  insert into a values(sysdate);   4  end;   5  / Procedure created 提交作业 SQL> declare   2  job1 number;   //定义一个数字型变量   3  begin   4  dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440');  //按分钟算一天1440分钟   5  end;   6  / PL/SQL procedure successfully completed job1 --------- 4 SQL> commit; Commit complete 运行作业 SQL> begin   2  dbms_job.run(4);   3  end;   4  / PL/SQL procedure successfully completed 删除作业 SQL> begin   2  dbms_job.remove(4);   3  end;   4  / PL/SQL procedure successfully completed SQL> commit; Commit complete
job change//修改作业 execute dbms_job.change(186,null,null,'sysdate+3'); execute dbms_job.change(186,'scott.test(update)'); 执行计划 描述                    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)' 
       
(本文已被浏览 5002 次)
|
|