oracle定时job粗解

其中一篇随笔我写了oracle的存储过程大概的介绍,存储过程除了自身有in的param,来进行程序调用处理之外,还可以通过定时任务的方式调用来执行。

应用场景:

  数据同步:有两个显示菜单,“信息编辑”,“信息查看”。前一个是面向员工随时填写、查看的,因此数据必须是实时的,而大部分开发场景下,这些数据不是只存在一张表内的,而是多表进行关联,这样速度会稍微慢些,但是是保证数据实时的;而后者的菜单时面向领导的,领导要求查看到的信息是大致准确的就可以,因此要做一个定时的任务,在半夜或者使用量的低谷期进行数据同步。

常用参数:

字段(列)                          类型                           描述 
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)'

--查询
select * from dba_jobs;
select * from all_jobs;
select a.*,rowid from user_jobs a;
select * from dba_jobs_running;
-- 创建job
declare
job_id number;--声明一个out变量
begin
-- 按天,每天09:30:00执行这个存储过程proc_myproc,并且输出一个job_id变量,其值为该job的ID号
dbms_job.submit(
job_id, --参数是输出参数,由submit()过程返回的binary_ineger,这个值用来唯一标识一个工作。一般定义一个变量接收,可以去user_jobs视图查询job值。
'sap_salesrep_info_v_p;', --参数是将被执行的PL/SQL代码块,存储过程名称等。
sysdate, --参数指识何时将运行这个工作。
'trunc(sysdate,''mi'') + 1/ 144' --参数何时这个工作将被重执行。
);
-- 把job的ID号打印出来
dbms_output.put_line(job_id);
end;
-- 运行job
begin
-- 这个7为job_id,请换为你自己对应的job号
dbms_job.run(7);
end;
-- 启用job
begin
dbms_job.broken(7,false);
end;
-- 禁用job
begin
dbms_job.broken(7,true);
end;
-- 删除一个job
begin
dbms_job.remove(375);
end;

原文地址:https://www.cnblogs.com/qiujiababy/p/8243884.html