天天看点

oracle定时任务job的相关操作

job的相关操作

      • 1.创建job基本语法:
      • 2.查询job:
      • 3.其他job相关的存储过程:
      • 4.常用时间间隔

1.创建job基本语法:

declare 
  job_n number;
begin
  dbms_job.submit(job => job_n,
    what => 'procedures_name;',                --执行的存储过程的名字," ; "必须有         
    next_date => sysdate,
    interval => 'TRUNC(sysdate+1)+22/24');     --每天十点执行
  commit;
end;
           

(1)使用dbms_job.submit()存储过程,这个过程有五个参数:job、what、next_date、interval与no_parse。

procedure submit(
	job       OUT binary_ineger,
	what      IN varchar2,
	next_date IN date,
	interval  IN varchar2,
	no_parse  IN booean:=FALSE
)
           

job参数是输出参数,由submit()过程返回的binary_ineger,这个值用来唯一标识一个工作。一般定义一个变量接收,可以去user_jobs视图查询job值。

what参数是将被执行的PL/SQL代码块,存储过程名称等。

next_date参数指识何时将运行这个工作。

interval参数指何时这个工作将被重执行。

no_parse参数指示此工作在提交时或执行时是否应进行语法分析——默认值false。TRUE指示此PL/SQL代码在它第一次执行时应进行语法分析,而FALSE指示本PL/SQL代码应立即进行语法分析。

(2)isubmit()过程用来用特定的job号提交一个job。参数与submit()相同。

2.查询job:

查询当前用户下的job:

select * from user_jobs;

查询所有job:

select * from dba_jobs;

查询正在运行的job:

select * from dba_jobs_running;

3.其他job相关的存储过程:

(1) broken() 过程更新一个已提交的工作的状态,典型地是用来把一个已破工作标记为未破工作。这个过程有三个参数:job、broken与next_date。

procedure broken (
	job IN binary_integer,
	broken IN boolean,
	next_date IN date := SYSDATE
)
           

job参数是工作号,唯一标识工作。

broken参数指示此工作是否将标记为破——true说明此工作将标记为破,而false说明此工作将标记为未破。

next_date参数指示在什么时候此工作将再次运行。此参数缺省值为当前日期和时间。

(2) change() 过程用来改变指定job的设置。

这个过程有四个参数:job、what、next_date、interval。

procedure change (
	job IN binary_integer,
	what IN varchar2,
	next_date IN date,
	interval IN varchar2
)
           

job参数是一个整数值,它唯一标识此工作。

what参数是由此job运行的一块PL/SQL代码块。

next_date参数指示何时此job将被执行。

interval参数指示一个job重执行的频度。

(3) remove()过程来删除一个已计划运行的job。这个过程接收一个参数:

job参数唯一地标识一个工作,这个参数的值是由为此工作调用submit()过程返回的job参数的值,已在运行的job不能删除。

(4) run() 过程用来立即执行一个指定的job。这个过程只接收一个参数:

job参数标识将被立即执行的工作。job创建之后,看情况需不需要立即执行job,如果next_date在当前日期之后,如果执行run的话立即会执行一次,否则是到指定的时间执行;如果你设置的next_date的时间在当前日期之前那么当时run和不run都会在系统当前的时间执行一次。

4.常用时间间隔

1、每分钟执行

TRUNC(sysdate,‘mi’)+1/(24*60)

2、每天定时执行

例如:

每天凌晨0点执行

TRUNC(sysdate+1)

每天凌晨1点执行

TRUNC(sysdate+1)+1/24

每天早上8点30分执行

TRUNC(SYSDATE+1)+(860+30)/(2460)

3、每周定时执行

例如:

每周一凌晨2点执行

TRUNC(next_day(sysdate,1))+2/24

TRUNC(next_day(sysdate,‘星期一’))+2/24

每周二中午12点执行

TRUNC(next_day(sysdate,2))+12/24

TRUNC(next_day(sysdate,‘星期二’))+12/24

4、每月定时执行

例如:

每月1日凌晨0点执行

TRUNC(LAST_DAY(SYSDATE)+1)

每月1日凌晨1点执行

TRUNC(LAST_DAY(SYSDATE)+1)+1/24

5、每季度定时执行

每季度的第一天凌晨0点执行

TRUNC(ADD_MONTHS(SYSDATE,3),‘q’)

每季度的第一天凌晨2点执行

TRUNC(ADD_MONTHS(SYSDATE,3),‘q’)+2/24

每季度的最后一天的晚上11点执行

TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),‘q’)-1/24

6、每半年定时执行

例如:

每年7月1日和1月1日凌晨1点执行

ADD_MONTHS(TRUNC(sysdate,‘yyyy’),6)+1/24

7、每年定时执行

例如:

每年1月1日凌晨2点执行

ADD_MONTHS(TRUNC(sysdate,‘yyyy’),12)+2/24