obeckham 发表于 2018-9-12 07:19:25

Oracle job 管理

  查看数据库job
  select * from dba_jobs;
  初始化相关的参数:job_queue_process
  altersystemset job_queue_process=1000scope=spfile;
  建议最大job进程数不要超过1000,oracle11g默认job队列进程数为1000.
  dba_jobs:描述数据库所有的job信息.
  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标示任务中断,以后不会运行
  INTERVALVARCHAR2(200) 用于计算下一运行时间的表达式
  FAILURES NUMBER任务运行连续没有成功的次数
  WHAT VARCHAR2(2000) 执行任务的PL/SQL块
  CURRENT_SESSION_LABEL RAWMLSLABEL该任务的信任Oracle会话符
  CLEARANCE_HI RAWMLSLABEL该任务可信任的Oracle最大间隙
  CLEARANCE_LO RAWMLSLABEL该任务可信任的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)'
  user_jobs:描述当前用户所有的job信息.
  dba_jobs_running:查看正在运行的job.
  根据后台trace文件和alertlog查看job的情况
  show parameterbackground_dump_dest;
  停止一个Job操作
  exec dbms_job.broken(1,true);
  commit;
  启动一个job操作
  exec dbms_job.broken(1,false);
  commit;
  查看job的具体作用:
  selectjob,what,to_char(last_date,'yyyy-mm-dd HH24:mi:ss'),
  to_char(next_date,'yyyy-mm-dd HH24:mi:ss'),interval
  from dba_jobs ;
  创建一个定时任务
  创建之后非立刻启动:
  1.创建一个测试表
  createtable test ( a date);
  2.创建job调用的存储过程
  createorreplaceprocedure myproc
  as
  begin
  insertinto test values(sysdate);
  end;
  /
  3.创建一个Job
  variable job number;
  begin
  dbms_job.submit(:job,'MYPROC;',sysdate,'sysdate+1/1440');
  end;
  /
  4.启动定时任务
  begin
  dbms_job.run(:job);
  end;
  /
  5.测试job是否插入数据
  select * from test;
  删除JOb
  begin
  dbms_job.remove(:job);
  end;
  /
  利用dbms_job.run()立即执行该job
  begin
  dbms_job.run(:jobNo);
  end ;
  /
  利用dbms_job.broken()重新将broken标记为false
  begin
  dbms_job.broken(:jobNo,false,next_date);
  end;
  /
  实例2,创建之后非立刻启动:
  1.创建一个测试表
  createtable a ( a date);
  2.创建job调用的存储过程
  createorreplaceprocedure myproc
  as
  begin
  insertinto a values(sysdate);
  end;
  /
  3.创建一个Job
  variable job number;
  begin
  dbms_job.submit(:job,'TEST;',sysdate,'sysdate+1/1440');
  end;
  /
  commit;
  4.查看job编号
  select job,what from user_jobs;
  5.运行job
  begin
  dbms_job.run(70);
  end;
  /
  commit;
  5.检查数据
  select * from a;

页: [1]
查看完整版本: Oracle job 管理