DBMS_SCHEDULER 包

DBMS_SCHEDULER包提供一系列调度相关的存储过程及方法供PL/SQL调用,目前主要兼容ORACLE的DBMS_SCHEDULER包中几个常用的方法。

33.1 相关方法

33.1.1 SCHEDULE对象

  1. CREATE_SCHEDULE过程

创建一个调度。

语法如下:

PROCEDURE DBMS_SCHEDULER.CREATE_SCHEDULE(

	SCHEDULE_NAME IN VARCHAR,

	START_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,

	REPEAT_INTERVAL IN VARCHAR,

	END_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,

	COMMENTS IN VARCHAR DEFAULT NULL);

参数详解

  • SCHEDULE_NAME

调度名称。要求在包模式下名称唯一。不能为空,若为设置,则报错。

  • START_DATE

调度第一次有效日期或者时间。对于重复的调度,START_DATE是个参照值,这种情况START_DATE不是调度的开始时间,调用的开始决定于REPEATE_INTERVAL的设置。START_DATE用于决定调度的第一个实例。

  • REPEATE_INTERVAL

调度重复间隔,用于指定调用隔多久重复一次。它是基于日历语法的表达式。对于命名的调度,REPEATE_INTERVAL不支持PL/SQL表达式。

  • END_DATE

作业停止运行时间。如果为未设置,作业则一直有效。

  • COMMENTS

调度相关的评论或注释。默认为空。

  1. DROP_SCHEDULE过程

删除一个调度。

语法如下:

PROCEDURE DBMS_SCHEDULER.DROP_SCHEDULE(

	SCHEDULE_NAME IN VARCHAR,

	FORCE IN BOOLEAN DEFAULT FALSE);

参数详解

  • SCHEDULE_NAME

调度名称。仅支持单独一个调度名称。

  • FORCE

设为FALSE,说明调度删除前不能被任何作业引用,否则报错。

设为TRUE,所有引用这个调度的作业在调度删除之前都将调为无效。

使用该调度,但正在运行的作业不受影响。

如果为NULL,则取值为FALSE。

33.1.2 PROGRAM对象

  1. CREATE_PROGRAM过程

创建一个程序。通过CREATE_PROGRAM方法创建的PROGRAM对象,在视图DBA_SCHEDULER_PROGRAMS或USER_SCHEDULER_PROGRAMS中可以查看到。

语法如下:

PROCEDURE DBMS_SCHEDULER.CREATE_PROGRAM(

	PROGRAM_NAME IN VARCHAR,

	PROGRAM_TYPE IN VARCHAR,

	PROGRAM_ACTION IN VARCHAR,

	NUMBER_OF_ARGUMENTS IN INT DEFAULT 0,

	ENABLED IN BOOLEAN DEFAULT FALSE,

	COMMENTS IN VARCHAR DEFAULT NULL);

参数详解

  • PROGRAM_NAME

程序名称。要求在包模式下名称中名称唯一。若未设置,则报错。

  • PROGRAM_TYPE

程序类型。未设置,则报错。支持类型如下:

PLSQL_BLOCK:说明程序是一个PL/SQL语句块,即DM的SQL程序设计里的语句块。此类型的程序或者作业不允许设置参数个数,也就是说设置的参数个数必须为0;

STORED_PROCEURE:说明程序是一个PL/SQL存储过程。支持存储过程,不支持带有返回值的函数。包含输入输出或者输出参数的PL/SQL存储过程不支持。

  • PROGRAM_ACTION

定义程序的动作。可能的动作如下:

对于PL/SQL语句块,程序动作就是去执行PL/SQL代码。

对于存储过程,程序动作是存储过程的名称。如果存储过程与作业不属于同一个模式,则需要指定存储过程名称的时候,指定模式名。

若未指定程序动作,则报错。

  • number_of_arguments

定义程序包含的参数的个数。若未设置,则默认为0。一个程序最多可以指定255个参数。

  • enabled

指定程序是否以激活的方式创建。若设置为TRUE,则执行合法性检测,检测成功,则创建程序并置ENABLED状态。默认设置为FALSE,那么程序不以激活的方式创建,可以在程序使用之前通过调用ENABLE过程来激活。

如果为NULL,则取值为FALSE。

  • COMMENTS

程序的相关评论或者注释。默认为空。

  1. DEFINE_PROGRAM_ARGUMENT过程

该过程为重载过程。通过DEFINE_PROGRAM_ARGUMENT方法定义的PROGRAM参数信息,可以在DBA_SCHEDULER_PROGRAM_ARGS或USER_SCHEDULER_PROGRAM_ARGS视图中查看得到。

1)定义一个程序参数,不带默认值。

语法如下:

PROCEDURE DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(

	PROGRAM_NAME IN VARCHAR,

	ARGUMENT_POSITION IN INT,

	ARGUMENT_NAME IN VARCHAR DEFAULT NULL,

	ARGUMENT_TYPE IN VARCHAR,

	OUT_ARGUMENT IN BOOLEAN DEFAULT FALSE

	);

2)定义一个程序参数,带默认值。

语法如下:

PROCEDURE DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(

	PROGRAM_NAME IN VARCHAR,

	ARGUMENT_POSITION IN INT,

	ARGUMENT_NAME IN VARCHAR DEFAULT NULL,

	ARGUMENT_TYPE IN VARCHAR,

	DEFAULT_VALUE IN VARCHAR,

	OUT_ARGUMENT IN BOOLEAN DEFAULT FALSE

);

参数详解

  • PROGRAM_NAME

待定义参数的程序名。该程序必须已经存在。

  • ARGUMENT_POSITION

待定义参数的位置,可选值,从1开始到NUMBER_OF_ARGUMENTS。若指定位置已经定义过,则将被覆盖。

  • ARGUMENT_NAME

定义参数名称,可选项。若设置,则要确保在程序所有参数名中唯一。若设置,则可能被其他包过程使用,包括SET_JOB_ARGUEMENT_VALUE过程。

  • ARGUMENT_TYPE

定义参数使用数据的类型。调度不证实也不使用这个类型。只有在程序用户决定赋值给参数时才使用。所有可用的SQL数据类型均允许,不支持用户自定义类型。

  • DEFAULT_VALUE

参数默认值。若作业未给参数设值,则将默认值赋值给对应参数。

  • OUT_ARGUMENT

预留参数,以后使用。必须设置为FALSE。如果为NULL,则取值为FALSE。

  1. DROP_PROGRAM过程

删除一个程序。

语法如下:

PROCEDURE DBMS_SCHEDULER.DROP_PROGRAM(

	PROGRAM_NAME IN VARCHAR,

	FORCE IN BOOLEAN DEFAULT FALSE

);

参数详解

  • PROGRAM_NAME

待删除的程序名。

  • FORCE

设为FALSE,说明程序删除前不能被任何作业引用,否则报错。

设为TRUE,所有引用这个程序的作业在调度删除之前都将调为无效。

使用该程序,且正在运行的作业不受影响,并允许继续运行。

如果为NULL,则取值为FALSE。

33.1.3 JOB对象

  1. CREATE_JOB过程

创建作业。通过CREATE_JOB创建的JOB对象,可以在DBA_SCHEDULER_JOBS或USER_SCHEDULER_JOBS视图中查看得到。

1)不使用已经存在的程序(PROGRAM)或者调度(SCHEDULE)创建作业。

语法如下:

PROCEDURE DBMS_SCHEDULER.CREATE_JOB(

	JOB_NAME IN VARCHAR,

	JOB_TYPE IN VARCHAR,

	JOB_ACTION IN VARCHAR,

	NUMBER_OF_ARGUMENTS IN INT DEFAULT 0,

	START_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,

	REPEAT_INTERVAL IN VARCHAR DEFAULT NULL,

	END_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,

	JOB_CLASS IN VARCHAR DEFAULT 'DEFAULT_JOB_CLASS',

	ENABLED IN BOOLEAN DEFAULT FALSE,

	AUTO_DROP IN BOOLEAN DEFAULT TRUE,

	COMMENTS IN VARCHAR DEFAULT NULL,

	CREDENTIAL_NAME IN VARCHAR DEFAULT NULL,

	DESTINATION_NAME IN VARCHAR DEFAULT NULL);

2)使用命名程序(PROGRAM)和命名调度(SCHEDULE)创建作业。

语法如下:

PROCEDURE DBMS_SCHEDULER.CREATE_JOB(

	JOB_NAME IN VARCHAR,

	PROGRAM_NAME IN VARCHAR,

	SCHEDULE_NAME IN VARCHAR,

	JOB_CLASS IN VARCHAR DEFAULT 'DEFAULT_JOB_CLASS',

	ENABLED IN BOOLEAN DEFAULT FALSE,

	AUTO_DROP IN BOOLEAN DEFAULT TRUE,

	COMMENTS IN VARCHAR DEFAULT NULL,

	JOB_STYLE IN VARCHAR DEFAULT 'REGULAR',

	CREDENTIAL_NAME IN VARCHAR DEFAULT NULL,

	DESTINATION_NAME IN VARCHAR DEFAULT NULL);

3)使用命名程序(PROGRAM)和内置调度(SCHEDULE)创建作业。

语法如下:

PROCEDURE DBMS_SCHEDULER.CREATE_JOB(

	JOB_NAME IN VARCHAR,

	PROGRAM_NAME IN VARCHAR,

	START_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,

	REPEAT_INTERVAL IN VARCHAR DEFAULT NULL,

	END_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,

	JOB_CLASS IN VARCHAR DEFAULT 'DEFAULT_JOB_CLASS',

	ENABLED IN BOOLEAN DEFAULT FALSE,

	AUTO_DROP IN BOOLEAN DEFAULT TRUE,

	COMMENTS IN VARCHAR DEFAULT NULL,

	JOB_STYLE IN VARCHAR DEFAULT 'REGULAR',

	CREDENTIAL_NAME IN VARCHAR DEFAULT NULL,

	DESTINATION_NAME IN VARCHAR DEFAULT NULL);

参数详解

  • JOB_NAME

作业名称。要求在包模式下名称中名称唯一,在其它模式下使用时,必须加模式名前缀。若未设置,则报错。使用GENERATE_JOB_NAME过程可以自动生成一个作业名。详见GENERATE_JOB_NAME过程

  • JOB_TYPE

创建作业类型。未设置,则报错。支持类型如下:

PLSQL_BLOCK:指定作业是一个匿名的PL/SQL语句块。此类型的程序或者作业不允许设置参数个数,也就是说设置的参数个数必须为0;

STORED_PROCEURE:指定作业是一个PL/SQL存储过程。支持存储过程,不支持带有返回值的函数。

  • JOB_ACTION

定义作业的动作。可能的动作如下:

对于PL/SQL语句块,程序动作就是去执行PL/SQL代码。

对于存储过程,程序动作是存储过程的名称。如果存储过程与作业不属于同一个模式,则需要指定存储过程名称的时候,指定模式名。

若未指定作业动作,则报错。

  • number_of_arguments

定义作业预期的参数个数。若未设置,则默认为0。一个程序最多可以指定255个参数。

  • PROGRAM_NAME

和作业关联的program名称。

  • SCHEDULE_NAME

作业使用的调度名称。

  • START_DATE

作业起始日期。如果START_DATE和REPEAT_INTERVAL都为NULL,表示作业在ENABLE后立即执行。

  • REPEAT_INTERVAL

作业重复执行及间隔时长。仅支持日历语法格式。

  • END_DATE

作业结束日期。

  • JOB_CLASS

不支持,仅作兼容参数用。

  • enabled

指定作业创建时是否启用。默认为FALSE。作业如果未启用,则系统不会调度执行。作业创建时设置为TRUE,会去检查作业是否有效。作业ENABLE时,如果作业所使用的PROGRAM无效,作业创建失败。

如果为NULL,则取值为FALSE。

  • AUTO_DROP

如果为TRUE,作业自动删除。默认为TRUE。自动删除的条件如下:

  • 作业的结束日期已经过期
  • 作业不是重复执行作业,并且只执行一次

如果为NULL,则取值为FALSE,作业不会自动删除。

  • COMMENTS

程序的相关评论或者注释。默认为空。

  • JOB_STYLE

不支持,只作兼容参数用。

  • CREDENTIAL_NAME

不支持,只作兼容参数用。

  • DESTINATION_NAME

不支持,只作兼容参数用。

  1. SET_JOB_ARGUMENT_VALUE过程

重载过程。通过SET_JOB_ARGUMENT_VALUE设置的JOB参数值,可以在DBA_SCHEDULER_JOB_ARGS或USER_SCHEDULER_JOB_ARGS视图中查询得到。

  1. 通过指定位置设置参数值。

语法如下:

PROCEDURE DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(

JOB_NAME IN VARCHAR,

ARGUMENT_POSITION IN INT,

ARGUMENT_VALUE IN VARCHAR

);
  1. 通过指定参数名称,设置相应参数值。仅适用于作业使用了已经存在的程序对象,并且程序参数通过调用DEFINE_PROGRAM_ARGUMENT过程定义了参数名称。

语法如下:

PROCEDURE DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(

	JOB_NAME IN VARCHAR,

	ARGUMENT_NAME IN VARCHAR,

	ARGUMENT_VALUE IN VARCHAR

);

参数详解

  • JOB_NAME

待设置参数值的作业名称。

  • ARGUMENT_NAME

待设置参数值的程序参数名称。

  • ARGUMENT_POSITION

待设置参数值的程序参数位置,从1开始。

  • ARGUMENT_VALUE

设置到程序参数上的新值,暂仅支持字符串类型的值。

  1. DROP_JOB过程

删除一个作业过程。作业删除时,作业上所有设置参数值也都删除。

语法如下:

PROCEDURE DBMS_SCHEDULER.DROP_JOB(

	JOB_NAME IN VARCHAR,

	FORCE IN BOOLEAN DEFAULT FALSE,

	defer IN BOOLEAN DEFAULT FALSE,

	Commit_semantics IN VARCHAR2 DEFAULT 'STOP_ON_FIRST_ERROR'

);

参数详解

  • JOB_NAME

待删除的作业名。

  • FORCE

设为TRUE,调度首先尝试中止正在运行的作业实例(通过调用STOP_JOB过程,参数force设置FALSE)。如果为NULL,则取值为FALSE。

  • DEFER

设为TRUE,调度运行正在运行的作业完成,然后删除。如果为NULL,则取值为FALSE。

  • COMMIT_SEMANTICS

提交语义,暂不处理。

  1. RUN_JOB过程

立即执行一次作业。

语法如下:

PROCEDURE RUN_JOB (JOB_NAME IN VARCHAR,	USE_CURRENT_SESSION IN BOOLEAN DEFAULT TRUE);

参数详解

  • JOB_NAME

待运行的作业名。

  • USE_CURRENT_SESSION

作业是否运行在和存储过程被调用的同一个会话中。不支持此功能,仅作兼容。如果为NULL,则取值为FALSE。

  1. STOP_JOB过程

停止正在运行的作业。

语法如下:

PROCEDURE STOP_JOB (

	JOB_NAME 		IN VARCHAR,

	FORCE 			IN BOOLEAN DEFAULT FALSE,

	COMMIT_SEMANTICS IN VARCHAR DEFAULT 'STOP_ON_FIRST_ERROR');

参数详解

  • JOB_NAME

待停止的作业名。

  • FORCE

FALSE表示中断作业,DM会用中断会话的方式停止作业,VM里面会定期检测会话是否中断;

TRUE表示立即停止作业,目前不支持这种方式。

如果为NULL,则取值为FALSE。

  • COMMIT_SEMANTICS

仅语法支持。

33.1.4 全局调度属性

全局调度属性是作用于整个SCHEDULER中所有作业上。

表 全局属性列表
属性名称 取值 备注
Default_timezone Start_date未指定时,用于重复作业和窗口应用日历语法格式串时获取时区信息 不支持,仅作兼容使用
Event_expiry_time 以秒为单位,作业从调度事件队列中产生的过期事件;若为NULL,则过期时间为24小时。 不支持,仅作兼容使用
Log_history 作业日志和窗口日志的保存天数,默认30天。 不支持,仅作兼容使用
Max_job_slave_processes 特殊系统配置和加载的从进程的最大个数。默认是NULL,有效值范围为1-999. 不支持,仅作兼容使用
Email_server 调度用于发送作业状态事件邮件通知使用的SMTP服务器的地址。如果为NULL,则不能发送。 支持
Email_port 调度用于发送作业状态事件邮件通知使用的SMTP服务器的端口号,默认25。 扩展支持,DM特有的选项
Email_password 邮件发送连接SMTP服务器的密码。 扩展支持,加密保存。
Email_sender 发送作业状态邮件通知的默认邮件地址,默认为NULL 支持
Email_mimetype 邮件的MIMETYPE,设置邮件使用的内容和编码方式,默认TEXT/PLAIN; CHARSET=US-ASCII; 中文可调整为TEXT/PLAIN; CHARSET=GB18030 扩展支持,DM特有的选项
  1. SET_SCHEDULER_ATTRIBUTE过程

设置全局调度的一个属性。设置属性值会立即有效,但结果不一定立即出现。全局调度属性可以在DBA_SCHEDULER_GLOBAL_ATTRIBUTE视图中查询得到。

语法如下:

PROCEDURE SET_SCHEDULER_ATTRIBUTE(

	ATTRIBUTE IN VARCHAR,

	VALUE IN VARCHAR);

参数详解

  • ATTRIBUTE

属性名称,详见上表。

  • VALUE

属性值,详见上表说明,根据实际情况设置。

  1. GET_SCHEDULER_ATTRIBUTE过程

获取全局调度的一个属性。

语法如下:

PROCEDURE GET_SCHEDULER_ATTRIBUTE(

	ATTRIBUTE IN VARCHAR,

	VALUE OUT VARCHAR);

参数详解

  • ATTRIBUTE

属性名称,详见上表。

  • VALUE

属性值,详见上表说明,根据实际情况设置。

33.1.5 邮件通知

编辑作业事件的邮件通知。

表 在邮件中SUBJECT和BODY参数中可使用的变量
变量名称 释义
%job_owner% 创建的作业的模式
%job_name% -
%job_subname% 用于基于事件的作业,设置了parallel_instances属性或者用于CHAIN步骤(STEPS)
%event_type% 见表2
%event_timestamp% 事件时间戳
%log_id% 指向视图*_SCHEULER_JOB_LOG和*_SCHEDULER_JOB_RUN_DETAILS中的 LOG_ID列。
%error_code% 错误码
%error_message% 错误信息
%run_count% 运行次数
%failure_count% 失败次数
%retry_count% 重试次数
表 调度抛出的事件类型
事件类型 释义
Job_all_events 不是一个事件,是一个常量,用于提供一种简单的方法激活所有事件
Job_broken 作业必须已经disabled并且调整到BROKEN状态,因为执行失败次数超过了作业属性max_failures设置值。
Job_chain_stalled 运行CHAIN的作业进入CHAIN_STALLED状态。A running chain becomes stalled if there are no steps running or scheduled to run and the chain evaluation_interval is set to NULL. No progress will be made in the chain unless there is manual intervention.
Job_completed 作业成功完成,达到max_runs或者end_date
Job_disabled 调度本身调整作业disabled,或者调用SET_ATTRIBUTE。
Job_failed 作业失败,可以是抛出错误,也可以是异常中断。
Job_over_max_dur 作业执行超过了max_run_duration属性设置的最大运行周期。(注意:没必要使用作业raise_events属性来激活这个事件;总是激活状态)
Job_run_completed 作业运行或者失败、或者成功或者停止
Job_sch_lim_reached 达到作业调用limit。作业未开始,因为启动作业延迟超过了作业属性schedule_limit定义值。
Job_started 作业启动了。
Job_stopped 调用STOP_JOB停止了作业。
Job_succeeded 作业成功完成。
  1. ADD_JOB_EMAIL_NOTIFICATION过程

为作业添加一个邮件通知。无论哪个指定的作业状态事件触发,邮件会发送到指定链表中的接收端。

语法如下:

PROCEDURE ADD_JOB_EMAIL_NOTIFICATION(

	JOB_NAME 	IN VARCHAR,

	RECIPIENTS 	IN VARCHAR,

	SENDER 		IN VARCHAR DEFAULT NULL,

	SUBJECT 	IN VARCHAR DEFAULT DBMS_SCHEDULER.DEFAULT_NOTIFICATION_SUBJECT,

	BODY 		IN VARCHAR DEFAULT DBMS_SCHEDULER.DEFAULT_NOTIFICATION_BODY,

	EVENTS 		IN VARCHAR DEFAULT 'JOB_FAILED,JOB_BROKEN,JOB_SCH_LIM_REACHED,JOB_CHAIN_STALED,JOB_OVER_MAX_DUR',

	FILTER_CONDITION IN VARCHAR DEFAULT NULL);

参数详解

  • JOB_NAME

添加邮件通知的目标作业名称,不能为NULL。

  • Recipients

逗号隔开的接收端的EMAIL地址链表。列出的所有邮件通知都会发送到所有的接收端地址。不能为NULL。

  • Sender

发送端的EMAIL地址。若为NULL或者忽略,则使用全局调度属性中的email_sender。

  • Subject

邮件主题。目前仅支持默认主题:

DamengScheduler Job Notification - %job_owner%.%job_name% %event_type%

其中,%中间代表是要插入的变量值。

  • Body

邮件内容。目前仅支持默认邮件内容格式:

 'Job: %job_owner%.%job_name%

 Event: %event_type%

 Date: %event_timestamp%

 Log id: %log_id%

 Run count: %run_count%

 Failure count: %failure_count%

 Retry count: %retry_count%

 Error code: %error_code%

 Error message:%error_message%'

其中,%中间代表是要插入的变量值。

  • Events

以逗号隔开的发送邮件通知的作业状态事件。不能为NULL。列表中任何一个事件触发都会向接收端发送通知。如果忽略,则以下默认事件发送通知:

JOB_FAILED、JOB_BROKEN、JOB_SCH_LIM_REACHED、JOB_CHAIN_STALLED、JOB_OVER_MAX_DUR。
  • Filter_condition

用于过程要发送邮件通知的事件。如果为NULL,所有指定事件发生时机都会产生一个邮件通知并发送。Filter_condition必须是一个布尔类型SQL
WHERE表达式,引用:event绑定变量。绑定变量自动绑定到代表抛出事件的对象上(实现中并未支持,仅作兼容处理)。

例如,过滤条件为:

:event.error_code=600 或者 :error.error_code=700
  1. REMOVE_JOB_EMAIL_NOTIFICATION过程

移除作业的邮件通知。可以移除所有的邮件通知,或者仅移除指定接收者或指定事件的邮件通知。执行作业删除时,会将作业上所有的邮件通知移除。

语法如下:

PROCEDURE REMOVE_JOB_EMAIL_NOTIFICATION(

	JOB_NAMEIN VARCHAR,

	RECIPIENTS IN VARCHAR DEFAULT NULL,

	EVENTS IN VARCHAR DEFAULT NULL);

参数详解

  • JOB_NAME

移除邮件通知的目标作业。不能为NULL。

  • recipients

逗号隔开的要移除满足配置指定接收者的邮件通知。若为NULL,则移除邮件通知时,忽略接口端的过滤。

  • Events

逗号隔开的要移除满足配置直指定事件的邮件通知。若为NULL,则移除邮件通知时,忽略指定事件的过滤。

33.1.6 其他

  1. GENERATE_JOB_NAME函数

返回一个唯一的作业名称。名称格式为{前缀}N,其中N是从一个序列获取的数字。若未指定前缀,则默认产生名字为JOB$_1、JOB$_2、JOB$_3等。若设置前缀为’DM’,则生成JOB名称为DM1、DM2、DM3等。

语法如下:

PROCEDURE DBMS_SCHEDULER.GENERATE_JOB_NAME(

	prefix IN VARCHAR DEFAULT 'JOB$_'

)RETURN VARCHAR;

参数详解

  • PREFIX

生成作业名的前缀

  1. EVALUATE_CALENDAR_STRING过程

计算日历字符串。

语法如下:

PROCEDURE DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING (

	CALENDAR_STRING 		IN VARCHAR,

	START_DATE 				IN TIMESTAMP WITH TIME ZONE,

	RETURN_DATE_AFTER 		IN TIMESTAMP WITH TIME ZONE,

	NEXT_RUN_DATE 			OUT TIMESTAMP WITH TIME ZONE

);

参数详解

  • CALENDAR_STRING

待计算的日历格式字符串。必须是按照日历语法。

  • START_DATE

日历字符串有效的起始日期和时间。若指定为NULL,则起始时间为当前时间。

  • RETURN_DATE_AFTER

使用START_DATE和CALENDAR_STRING,调度就有足够的信息来决定所有有效执行日期。设置这个参数,调度知道匹配哪个可能的时间退出。若未设置,则系统直接使用系统时间戳。

  • NEXT_RUN_DATE

匹配CALENDAR_STRING和START_DATE,并在RETURN_DATE_AFTER参数值之后发生的第一个时间戳。

  1. SET_ATTRIBUTE过程

设置SCHEDULER对象的一个属性,目前仅支持JOB对象的属性设置。

语法如下:

PROCEDURE SET_ATTRIBUTE(

		NAME IN VARCHAR,

	ATTRIBUTE IN VARCHAR,

		VALUE IN {BOOLEAN | VARCHAR | TIMESTAMP |

				TIMESTAMP WITH TIME ZONE |

				INTERVAL DAY TO SECOND});

参数详解

  • NAME

设置的对象名称。目前仅支持对JOB对象属性设置。

  • ATTRIBUTE

属性名称。

  • JOB对象支持的属性有以下属性:
  • auto_drop:作业是否自动删除

如果为TRUE,作业自动删除。默认为TRUE。自动删除的条件如下:

1)作业的结束日期已经过期

2)作业不是重复执行作业,并且只执行一次

  • program_name:作业执行的程序名称,若JOB对象设置了JOB_TYPE、JOB_ACTION、NUMBER_OF_ARGUMENTS,则不允许再设置PROGRAM_NAME属性。
  • schedule_name:作业所使用的调度名称,若JOB对象设置了START_DATE、END_DATE、REPEAT_INTERVL属性,则不允许再设置SCHEDULE_NAME属性。
  • repeat_interval:作业执行的重复/间隔规则,仅支持日历语法。若JOB对象设置了SCHEDULE_NAME属性,则不允许设置该属性。
  • end_date:作业截止日期。若JOB对象设置了SCHEDULE_NAME属性,则不允许设置该属性。
  • start_date:作业起始日期。若JOB对象设置了SCHEDULE_NAME属性,则不允许设置该属性。
注意

Repeat_interval、end_date、start_date属性设置的前提是JOB对象未设置SCHEDULE_NAME属性。若事先设置了SCHEDULE_NAME属性,但后来这个SCHEDULE对象被删除了,那么JOB对象对应的SCHEDULE_NAME属性会被置空,用户可以通过组合设置repeat_interal、end_date、start_date属性或者重新设置SCHEDULE_NAME属性,完成调度相关内容的补充,确保JOB对象可以正常执行调度

  • max_run_duration:作业允许运行的最大时间长度。参数数据类型为INTERVAL DAY TO SECOND,必须为有效的间隔类型串。
  • comments:作业的相关评论或注释。
  • number_of_arguments:作业的参数个数,等同create_job中的number_of_arguments参数。若JOB对象设置了PROGRAM_NAME属性,则不允许设置该属性。
  • job_action:作业的动作内容,等同create_job中的job_action参数。若JOB对象设置了PROGRAM_NAME属性,则不允许设置该属性。
  • job_type:作业的动作类型,等同create_job中job_type参数。若JOB对象设置PROGRAM_NAME属性,则不允许设置该属性。
注意

Number_of_arguments、job_action、job_type属性设置的前提是JOB对象未设置PROGRAM_NAME属性。若事先设置了PROGRAM_NAME属性,但后来这个PROGRAM对象被删除了,那么JOB对象对应的PROGRAM_NAME属性会被置空,用户可以通过组合设置number_of_arguments、job_action、job_type属性或者重新设置PROGRAM_NAME属性,完成程序相关内容的补充,确保JOB对象可以正常执行工作。

  • 以下属性仅作兼容,未实现功能:
restartable

allow_runs_in_restricted_mode

follow_default_timezone

instance_stickiness

parallel_instances

stop_on_windows_close

instance_id

max_failures

max_runs

job_priority

logging_level

credential_name

database_role

destination

destination_name

event_spec

job_class

job_weight

raise_events

schedule_limit
  • VALUE

设置的属性值。

  1. PURGE_LOG过程

清理日志。

语法如下:

PROCEDURE PURGE_LOG (

	LOG_HISTORY IN INT DEFAULT 0,

		WHICH_LOG IN VARCHAR DEFAULT 'JOB_AND_WINDOW_LOG',

		JOB_NAME IN VARCHAR DEFAULT NULL)

参数详解

  • LOG_HISTORY

历史记录保留天数。取值范围0-999,如果为0,则清空历史记录。

  • WHICH_LOG

指定清理的日志类型,不支持,仅作兼容参数用。注:DBMS_SCHEDULER日志只支持JOB_LOG类型日志,WHICH_LOG指定与否,PURGE_LOG均删除作业日志。

  • JOB_NAME

指定清理日志历史记录的作业名称。

  1. DISABLE过程

使指定的对象失效。目前仅支持PROGRAM和JOB。

语法如下:

PROCEDURE DISABLE (

	NAME IN VARCHAR,

	FORCE IN BOOLEAN DEFAULT FALSE,

	COMMIT_SEMANTICS IN VARCHAR DEFAULT 'STOP_ON_FIRST_ERROR')

参数详解

  • NAME

DISABLE对象名称。目前仅支持JOB和PROGRAM

  • FORCE

是否强制DISABLE对象。参数不支持,仅作兼容用,目前处理都为强制DISABLE

  • COMMIT_SEMANTICS

不支持,仅作兼容用。

  1. ENABLE过程

使指定的对象生效。目前仅支持PROGRAM和JOB。

语法如下:

PROCEDURE ENABLE(

	NAME IN VARCHAR,

	COMMIT_SEMANTICS IN VARCHAR DEFAULT 'STOP_ON_FIRST_ERROR')

参数详解

  • NAME

ENABLE对象名称。目前仅支持JOB和PROGRAM。

作业ENABLE时,如果作业所使用的PROGRAM无效,作业创建失败。

  • COMMIT_SEMANTICS

不支持,仅作兼容用。

33.2 创建、删除语句

创建或删除DBMS_SCHEDULER系统包。

语法如下:

void

SP_INIT_DBMS_SCHEDULER_SYS (

	CREATE_FLAG int

)

参数详解

  • CREATE_FLAG

为1时表示创建DBMS_SCHEDULER包;为0表示删除该系统包。

返回值

举例说明

创建DBMS_JOB系统包。

SP_INIT_DBMS_SCHEDULER_SYS (1);

33.3 相关视图

MPP环境下,作业只在节点号最小的节点上执行。所有视图,都只显示本站点的相关信息。

  1. DBA_SCHEDULER_PROGRAMS

记录PROGRAM对象信息。

序号 说明
1 OWNER PROGRAM所有者
2 PROGRAM_NAME PROGRAM名称
3 PROGRAM_TYPE PROGRAM类型,仅支持PLSQL_BLOCK和STORED_PROCEDURE类型
4 PROGRAM_ACTION PROGRAM执行的动作
5 NUMBER_OF_ARGUMENTS 参数个数
6 ENABLED 是否启用
7 DETACHED 不支持,仅作兼容用
8 SCHEDULE_LIMIT 不支持,仅作兼容用
9 PRIORITY 不支持,仅作兼容用
10 WEIGHT 不支持,仅作兼容用
11 MAX_RUNS 不支持,仅作兼容用
12 MAX_FAILURES 不支持,仅作兼容用
13 MAX_RUN_DURATION 不支持,仅作兼容用
14 NLS_ENV 不支持,仅作兼容用
15 COMMENTS PROGRAM评论或注释
  1. DBA_SCHEDULER_PROGRAM_ARGS

记录PROGRAM对象的参数定义信息。

序号 说明
1 OWNER PROGRAM所有者
2 PROGRAM_NAME PROGRAM名称
3 ARGUMENT_NAME 参数名称
4 ARGUMENT_POSITION 当前参数在参数列表中所在位置
5 ARGUMENT_TYPE 参数的数据类型
6 METADATA_ATTRIBUTE 不支持,仅作兼容用
7 DEFAULT_VALUE 参数默认值,字符串格式
8 DEFAULT_ANYDATA_VALUE 不支持,仅作兼容用
9 OUT_ARGUMENT 是否为输出参数
  1. DBA_SCHEDULER_SCHEDULES

记录SCHEDULE对象信息。

序号 说明
1 OWNER 调度的所有者
2 SCHEDULE_NAME 调度名称
3 SCHEDULE_TYPE 调度类型,取值ONCE,CALENDAR
4 START_DATE 起始时间
5 REPEAT_INTERVAL 调度的重复/间隔规则
6 EVENT_QUEUE_OWNER 不支持,仅作兼容用
7 EVENT_QUEUE_NAME 不支持,仅作兼容用
8 EVENT_QUEUE_AGENT 不支持,仅作兼容用
9 EVENT_CONDITION 不支持,仅作兼容用
10 FILE_WATCHER_OWNER 不支持,仅作兼容用
11 FILE_WATCHER_NAME 不支持,仅作兼容用
12 END_DATE 结束时间
13 COMMENTS 调度的评论或注释
  1. DBA_SCHEDULER_JOBS

记录JOB对象信息。

序号 说明
1 OWNER 作业的所有者
2 JOB_NAME 作业名称
3 JOB_SUBNAME 作业子名称,不支持,仅作兼容用
4 JOB_STYLE 作业风格,仅支持REGULAR
5 JOB_CREATOR 作业原始的创建者
6 CLIENT_ID 不支持,仅作兼容用
7 GLOBAL_UID 不支持,仅作兼容用
8 PROGRAM_OWNER 和作业关联的PROGRAM的所有者
9 PROGRAM_NAME 和作业关联的PROGRAM的名称
10 JOB_TYPE 作业类型,取值PLSQL_BLOCK,STORED_PROCEDURE, 不支持EXECUTABLE和CHAIN
11 JOB_ACTION 作业执行的动作
12 NUMBER_OF_ARGUMENTS 作业参数个数
13 SCHEDULE_OWNER 调度的所有者
14 SCHEDULE_NAME 和作业相关联的调度名称
15 SCHEDULE_TYPE 调度的类型
16 START_DATE 作业起始时间
17 REPEAT_INTERVAL 作业的重复/间隔规则
18 EVENT_QUEUE_OWNER 不支持,仅作兼容用
19 EVENT_QUEUE_NAME 不支持,仅作兼容用
20 EVENT_QUEUE_AGENT 不支持,仅作兼容用
21 EVENT_CONDITION 不支持,仅作兼容用
22 EVENT_RULE 不支持,仅作兼容用
23 FILE_WATCHER_OWNER 不支持,仅作兼容用
24 FILE_WATCHER_NAME 不支持,仅作兼容用
25 END_DATE 作业对束时间
26 JOB_CLASS 不支持,仅作兼容用
27 ENABLED 作业是否启用
28 AUTO_DROP 作业结束时是否自动删除
29 RESTARTABLE 作业执行失败是否重新启动。不支持,仅作兼容用
30 STATE 当前作业的状态
31 JOB_PRIORITY 不支持,仅作兼容用
32 RUN_COUNT 不支持,仅作兼容用
33 MAX_RUNS 不支持,仅作兼容用
34 FAILURE_COUNT 不支持,仅作兼容用
35 MAX_FAILURES 不支持,仅作兼容用
36 RETRY_COUNT 不支持,仅作兼容用
37 LAST_START_DATE 不支持,仅作兼容用
38 LAST_RUN_DURATION 不支持,仅作兼容用
39 NEXT_RUN_DATE 作业下一次执行时间
40 SCHEDULE_LIMIT 不支持,仅作兼容用
41 MAX_RUN_DURATION 作业执行的最大持续时间
42 LOGGING_LEVEL 不支持,仅作兼容用
43 STOP_ON_WINDOW_CLOSE 不支持,仅作兼容用
44 INSTANCE_STICKINESS 不支持,仅作兼容用
45 RAISE_EVENTS 不支持,仅作兼容用
46 SYSTEM 不支持,仅作兼容用
47 JOB_WEIGHT 不支持,仅作兼容用
48 NLS_ENV 不支持,仅作兼容用
49 SOURCE 不支持,仅作兼容用
50 NUMBER_OF_DESTINATIONS 不支持,仅作兼容用
51 DESTINATION_OWNER 不支持,仅作兼容用
52 DESTINATION 不支持,仅作兼容用
53 CREDENTIAL_OWNER 不支持,仅作兼容用
54 CREDENTIAL_NAME 不支持,仅作兼容用
55 INSTANCE_ID 不支持,仅作兼容用
56 DEFERRED_DROP 不支持,仅作兼容用
57 ALLOW_RUNS_IN_RESTRICTED_MODE 不支持,仅作兼容用
58 COMMENTS 作业的评论或注释
59 FLAGS 内部使用字段
  1. DBA_SCHEDULER_JOB_ARGS

记录JOB对象的参数值信息。

序号 说明
1 OWNER 参数所属作业的所有者
2 JOB_NAME 参数所属作业名称
3 ARGUMENT_NAME 参数名称
4 ARGUMENT_POSITION 当前参数在参数列表中所在位置
5 ARGUMENT_TYPE 参数的数据类型
6 VALUE 参数值,字符串格式
7 ANYDATA_VALUE 其他格式的参数值
8 OUT_ARGUMENT 是否为输出参数
  1. DBA_SCHEDULER_JOB_RUN_DETAILS

记录JOB运行过程中的详细信息。

序号 说明
1 LOG_ID 日志唯一ID
2 LOG_DATE 日志记录的日期
3 OWNER 作业的所有者
4 JOB_NAME 作业名称
5 JOB_SUBNAME 作业子名称,不支持,仅作兼容用
6 STATUS 作业运行状态
7 ERROR## 作业出错时的错误码
8 REQ_START_DATE 作业请求运行时间,不支持,仅作兼容用
9 ACTUAL_START_DATE 作业实际执行起始时间
10 RUN_DURATION 不支持,仅作兼容用
11 INSTANCE_ID 不支持,仅作兼容用
12 SESSION_ID 作业执行所在会话ID
13 SLAVE_PID 不支持,仅作兼容用
14 CPU_USED 不支持,仅作兼容用
15 CREDENTIAL_OWNER 不支持,仅作兼容用
16 CREDENTIAL_NAME 不支持,仅作兼容用
17 DESTINATION_OWNER 不支持,仅作兼容用
18 DESTINATION 不支持,仅作兼容用
19 ADDITIONAL_INFO 作业运行过程中相关信息
  1. DBA_SCHEDULER_JOB_LOG

记录作业日志信息。

序号 说明
1 LOG_ID 日志唯一ID
2 LOG_DATE 日志记录的日期
3 OWNER 作业的所有者
4 JOB_NAME 作业名称
5 JOB_SUBNAME 作业子名称,不支持,仅作兼容用
6 JOB_CLASS 不支持,仅作兼容用
7 OPERATION 不支持,仅作兼容用
8 STATUS 作业运行状态
9 USER_NAME 用户名
10 CLIENT_ID 不支持,仅作兼容用
11 GLOBAL_UID 不支持,仅作兼容用
12 CREDENTIAL_OWNER 不支持,仅作兼容用
13 CREDENTIAL_NAME 不支持,仅作兼容用
14 DESTINATION_OWNER 不支持,仅作兼容用
14 DESTINATION 不支持,仅作兼容用
16 ADDITIONAL_INFO 作业运行过程中相关信息
  1. DBA_SCHEDULER_GLOBAL_ATTRIBUTE

记录SCHEDULER包的全局属性。

序号 说明
1 ATTRIBUTE_NAME 属性名称,不包括EMAIL_PASSWORD
2 VALUE 属性值
  1. DBA_SCHEDULER_RUNNING_JOBS

描述数据库中由DBMS_SCHEDULER包创建的且正在执行的作业。

序号 说明
1 OWNER 作业所有者
2 JOB_NAME 作业名称
3 JOB_SUBNAME 作业子名称,不支持,仅作兼容用
4 JOB_STYLE 作业风格,仅支持REGULAR
5 DETACHED 不支持,仅作兼容用
6 SESSION_ID 作业执行的会话ID
7 SLAVE_PROCESS_ID 不支持,仅作兼容用
8 SLAVE_OS_PROCESS_ID 不支持,仅作兼容用
9 RUNNING_INSTANCE 执行作业的实例号
10 RESOURCE_CONSUMER_GROUP 不支持,仅作兼容用
11 ELAPSED_TIME 作业已经执行的时长
12 CPU_USED 不支持,仅作兼容用
13 DESTINATION_OWNER 不支持,仅作兼容用
14 DESTINATION 不支持,仅作兼容用
15 CREDENTIAL_OWNER 不支持,仅作兼容用
16 CREDENTIAL_NAME 不支持,仅作兼容用
17 LOG_ID 不支持,仅作兼容用
  1. DBA_SCHEDULER_RUNNING_JOBS

描述当前用户拥有的由DBMS_SCHEDULER包创建的且正在执行的作业,结构与DBA_SCHEULER_RUNNING_JOBS相同。

33.4 日历语法

33.4.1日历语法格式

DM支持的日历语法格式:

	repeat_interval::=

	<frequency子句>[;<interval子句\>] [;<bymonth子句[;<byweekno子句>][;] [;<bymonthday子句[;<byhour子句>] [;<byminute子句>][;]

	<frequency子句>::= FREQ = <predefined_frequency>

	<predefined_frequency>:: = YEARLY | MONTHLY | WEEKLY | DAILY | HOURLY MINUTELY | SECONDLY

	<interval子句> ::= INTERVAL = <intervalnum>

	<intervalnum> ::= <取值1到99>

	<bymonth子句> ::= BYMONTH = <monthlist>

	<monthlist> ::= <month>{,<month>}

	<month> ::= <numeric_month> | <char_month>

	<numeric_month> ::= 1 | 2 | 3 ... |12

	<char_month> ::= JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG |  OCT | NOV | DEC

	<byweekno子句>::= BYWEEKNO = <weeknumber_list>

	<weeknumber_list> ::= <weeknumber>{,<weeknumber>}

	<weeknumber> ::= [<minus>] <weekno>

	<weekno> ::= <取值1到53>

	<byyearday子句> ::= BYYEARDAY = <yearday_list>

	<yearday_list> ::= <yearday>{, <yearday>}

	<yearday> ::= [<minus>] <yeardaynum>

	<yeardaynum> ::= <取值1到366>

	<bymonthday子句null> ::= BYMONTHDAY = null<monthday_listnull>

	<monthday_list> ::= <monthday>{, <monthday>}

	<monthday> ::= [<minus>] <monthdaynum>

	<monthdaynum> ::= <取值1到31>

	<byday子句> ::= BYDAY = <byday_list>

	<byday_list> ::= <byday>{,<byday>}

	<byday> ::= [<weekdaynum>] <day>

	<weekdaynum> ::= [<minus>] <daynum>

	<daynum> ::= <取值1到53> /* 当frequency 为 yearly */

	<daynum> ::= <取值1到5> /* 当frequency 为 monthly */

	<day> ::= MON | TUE | WED | THU | FRI | SAT | SUN

	<byhour子句> ::= BYHOUR = <hour_list>

	<hour_list> ::= <hour>{, <hour>}

	<hour> ::= <取值0到23>

	<byminute子句> ::= BYMINUTE = <minute_list>

	<minute_list> ::= <minute>{, <minute>}

	<minute> := <取值0到59>

	<bysecond子句> ::= BYSECOND = <second_list>

	<second_list> ::= <second>{, <second>}

	<second> ::= <取值0到59>

	<minus> ::= -

参数详解

  • <minus>为负数(-),表示倒数。
  • <byweekno>只有在freq=yearly时有效。
  • <daynum>freq=yearly时,<byday>里面<daynum>范围为1-53;freq=monthly时,<byday>里面<daynum>范围为1-5。
  • SECONDLY,<bysecond子句>秒级设置目前仅语法支持,实际不起作用。

举几个简单的日历写法。例如:

  1. 每年的第1天执行:freq=yearly;byyearday=1;
  2. 每月的最后一天执行一次:freq=monthly;bymonthday=-1;
  3. 每月1, 3, 5号执行:freq=monthly;bymonthday=1,3,5;
  4. 每月第一周,周1执行: freq=monthly;byday=1MON;
  5. 每天执行一次,12点执行:freq=daily;byhour=12

33.4.2 版本升级

达梦数据库产品注重向下兼容性,虽然版本不断地更新升级,但在绝大多数情况下,使用高版本的执行码启动低版本的数据库时,会自动执行一系列更新升级动作。对于待升级的数据库,用户只需要保证它之前是正常退出的即可。

在数据库升级操作前,建议先进行数据备份。

需要注意的是,从V7.6.1.67版本和V8.1.1.107开始,对日历表达式触发器进行了改进。使得老版本升级后的新版本需要进行额外的升级操作,下面进行详细的说明。

33.4.2.1 日历表达式触发器升级

日历表达式触发器就是使用了“日历语法”的时间触发器。主要应用于DMBS_SCHEDULER包中。当使用PROCEDURE DBMS_SCHEDULER.CREATE_JOB创建JOB时,只要使用了REPEAT_INTERVAL参数,按照日历语法格式指定了调度重复间隔,那么系统内部就会自动生成一个日历表达式触发器。
老版本中,触发器日历表达式 encode到sysobjects视图info6字段时,指针偏移多移动了31字节,decode时也同样多移动了31字节,导致日历表达式涉及秒级间隔触发,部分秒数实际未触发。在V7.6.1.67以上的DM7版本和V8.1.1.107以上的DM8版本中,此问题已被修正,均不存在此问题。

33.4.2.1.1 版本说明

DM7支持从DM7老版本升级到V7.6.1.67以上版本,DM8支持从DM8老版本升级到V8.1.1.107以上版本。但是,从老版本升级的新版本,需要手动重新创建日历触发器,使sysobjects视图info6字段重新填写,来修正上述问题。
非日历表达式触发器无此问题,无需修正。

33.4.2.1.2 升级步骤

待升级的日志表达式触发器分为两种情况:一种是DMBS_SCHEDULER包相关,另一种是非DMBS_SCHEDULER包相关。下面详细介绍如下:

  1. DMBS_SCHEDULER包相关

由DMBS_SCHEDULER包创建的作业,内部会生成日历表达式触发器,对于仍然有效的日历表达式触发器,只需要重新enable该作业,系统内部会重建该触发器。步骤如下:

  1. 查询系统视图,获取预期仍然有效的作业名称。
SQL> SELECT JOB_NAME,ENABLED FROM DBA_SCHEDULER_JOBS WHERE ENABLED='TRUE';
   行号       JOB_NAME   ENABLED

---------- -------- -------

1	         TEST_JOB   TRUE
  1. 重新生成作业的触发器。
begin
dbms_scheduler.enable(name='TEST_JOB');
end;
/
  1. 至此,升级完成。
  1. 非DMBS_SCHEDULER包相关
    其它非DMBS_SCHEDULER包相关的日历表达式触发器,可以通过查询系统表或MANAGER工具获取触发器DDL创建脚本,然后重新执行一遍DDL脚本即可,以此来完成升级工作。

33.5 举例说明

使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。

SP_INIT_DBMS_SCHEDULER_SYS(1);

准备工作:

drop table test cascade;

create table test(c1 varchar, c2 varchar);

create or replace procedure proc1(c1 varchar, c2 varchar)

as

begin

insert into test values(c1, c2);

commit;

end;

/

创建PROGRAM:

begin

dbms_scheduler.create_program(

program_name=>'PROG1',

program_type=>'STORED_PROCEDURE',

program_action=>'PROC1',

number_of_arguments=>2);

end;

/

定义program参数:

begin

dbms_scheduler.define_program_argument(

program_name=>'PROG1',

argument_position=>1,

argument_name=>'C1',

argument_type=>'VARCHAR'

);

end;

/

begin

dbms_scheduler.define_program_argument(

program_name=>'PROG1',

argument_position=>2,

argument_name=>'C2',

argument_type=>'VARCHAR'

);

end;

/

设置PROGRAM为ENABLE状态:

begin

dbms_scheduler.enable('PROG1');

end;

/

创建作业:

begin

dbms_scheduler.create_job(

job_name=>'test_job',

program_name=>'PROG1',

start_date=>'2018-05-18 8:55:00',

repeat_interval=>'FREQ=MINUTELY;INTERVAL=1',

end_date=>'2018-05-20 9:15:00',

enabled=>FALSE,

auto_drop=>FALSE,

comments=>'test_job',

job_style=>'REGULAR'

);

end;

/

设置作业参数值:

begin

dbms_scheduler.set_job_argument_value(

job_name=>'test_job',

argument_position=>1,

argument_value=>'abc'

);

end;

/
begin

dbms_scheduler.set_job_argument_value(

job_name=>'test_job',

argument_name=>'C2',

argument_value=>'abc'

);

end;

/

配置全局调度属性:

begin

DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE(

	'email_server',

	'192.168.0.212');

end;

/

begin

DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE(

	'email_sender',

	'shenning@dameng.shanghai');

end;

/

begin

DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE(

	'email_port',

	'25');

end;

/

begin

DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE(

	'email_password',

	'888888');

end;

/

begin

DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE(

	'email_mimetype',

	'TEXT/PLAIN; CHARSET=GB18030');

end;

/

添加作业邮件通知:

BEGIN

DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION(

	Job_name => 'test_job',

	Recipients => 'shenning@dameng.shanghai',

	Sender => 'shenning@dameng.shanghai',

events => 'JOB_ALL_EVENTS');

END;

/

--设置作业为ENABLE

begin

dbms_scheduler.enable(name=test_job');

end;

/

删除作业邮件通知:

BEGIN

DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION(

	Job_name => 'test_job');

END;

/
微信扫码
分享文档
扫一扫
联系客服