快捷搜索:  汽车  科技

schedule定时任务设置时间(schedule定时任务的来龙去脉)

schedule定时任务设置时间(schedule定时任务的来龙去脉)如果要创建外部操作系统命令的job 还必须有CREATE EXTERNAL JOB权限。要执行DBMS_SCHEDULER需要有CREATE JOB权限。1)创建1个SCHEDULER来定义计划1个PROGRAM来定义任务内容,再创建1个JOB,为这个JOB指定上面的SCHEDULER和PROGRAM。2)直接创建JOB,在参数里面直接指定计划和任务内容。

概述

关于Oracle定时任务管理一般有两个方式,前面已经介绍了DBMS_JOB这种方式,今天主要介绍下另外一种管理方式:DBMS_SCHEDULE。


DBMS_SCHEDULE

Oracle 10g之前,可以使用dbms_job来管理定时任务。10g之后,Oracle引入dbms_scheduler来替代先前的dbms_job

在功能方面 它比dbms_job提供了更强大的功能和更灵活的机制/管理。

使用dbms_scheduler创建一个定时任务有两种形式

1)创建1个SCHEDULER来定义计划

1个PROGRAM来定义任务内容,再创建1个JOB,为这个JOB指定上面的SCHEDULER和PROGRAM。

2)直接创建JOB,在参数里面直接指定计划和任务内容。

要执行DBMS_SCHEDULER需要有CREATE JOB权限。

如果要创建外部操作系统命令的job 还必须有CREATE EXTERNAL JOB权限。

如果要对于某个对象进行操作,必须是它的owner,或者对它具有alter权限,或者有create any job权限。

如果要创建/操作job_class,还需要有MANAGE SCHEDULER权限。job_class都是创建在sys schema中的。

schedule定时任务设置时间(schedule定时任务的来龙去脉)(1)

schedule定时任务设置时间(schedule定时任务的来龙去脉)(2)

schedule定时任务设置时间(schedule定时任务的来龙去脉)(3)

schedule定时任务设置时间(schedule定时任务的来龙去脉)(4)


参数说明

1)schedule_name program_name job_name

这些名字在整个sql名字空间内必须唯一。比如 job_name不能和某个表名相同。

2)repeat_interval

定义job的计划,可以指定的形式相当丰富,也相当灵活,很强大。

举几个例子

a) 05/02 和 09/22 的 8:00 a.m. 1:00 p.m. 6:00 p.m.

'freq=daily;byhour=8 13 18;byminute=0;bysecond=0;bydate=0502 0922'

b) 每个月的最后一个工作日(注意 INTERVAL如果不指定 默认为1)

'FREQ=MONTHLY;BYDAY=MON TUE WED THU FRI;BYSETPOS=-1'

c) 1/10开始的5天,即1/10~1/14

BYDATE=0110 SPAN:5D

表示从指定日期开始;-表示到指定日期结束;

^表示围绕指定日期的n天,如果n为偶数,调整为n 1。

d) 以下三种表示方法等同

BYDATE=0205-OFFSET:2W BYDATE=0205-14D (the OFFSET: keyword is optional) BYDATE=0122

3)start_date

实际上是schedule生效的日期,

对于一个定时执行的schedule 实际上的开始日期取决于repeat_interval参数。

如果start_date为null 等同于job被enable的时刻。

Oracle取start_date来作为repeat_interval的default值。

4)end_date

这个时间之后,job将不再被执行。

5)program_type/program_action/number_of_arguments/job_type/job_action

program_type有三种形式,program_action是一个PL/SQL block,不支持参数,number_of_arguments必须为0,必须以分号结尾。

program_action是一个存储过程,注意不支持INOUT or OUT参数,也不支持function.

参数最多255个,可以通过SET_JOB_ARGUMENT_VALUE过程来设定。

job_type类似于program_type,只是多了'CHAIN'这种类型来创建任务链。

6) enabled

如果为TRUE 创建时候检查program/job有效性,如果通过检查把program/job置为ENABLED.

在program/job使用前必须通过ENABLE过程把它置为ENABLED。

如果program为disabled,仅仅enable一个job,那么job会按计划执行,但是会失败。

7)auto_drop

如果为TRUE 在job完成之后或者被自动disabled之后job将被自动删除。

如果满足以下条件,job被视为完成。

a) 过了end_date。

b) 达到了最大运行次数(max_runs 可以通过SET_ATTRIBUTE来指定)

c) 非重复任务,即只运行一次的任务,并且已经运行了1次。

如果满足以下条件,job被视为自动disabled.

a) 达到了最大运行失败次数(max_failures 可以通过SET_ATTRIBUTE来指定)

相关数据字典

1) dba_scheduler_jobs/user_scheduler_jobs Enabling 一个 disabled 状态的job会重设本视图中的RUN_COUNT FAILURE_COUNT and RETRY_COUNT. 2) dba_scheduler_programs/user_scheduler_programs 3) dba_scheduler_schedules/user_scheduler_schedules 4) dba_scheduler_job_log/dba_scheduler_job_run_details 5) dba_scheduler_job_classes 6) 默认情况下,数据库自身定义了一个PURGE_JOB的任务。

该任务每天凌晨3点钟启动,清除30天前所产生的任务日志。


这块还是需要重点掌握的,概念东西做个理解就行,后面会再整理了下涉及的一些命令,感兴趣的朋友可以关注一下~

schedule定时任务设置时间(schedule定时任务的来龙去脉)(5)

猜您喜欢: