创建、修改和删除作业可以通过以下两种方式来实现。一是通过系统过程来实现;二是通过图形化客户端 MANAGER 管理工具实现。用户选择其中的一种即可。
4.1 通过系统过程实现
4.1.1 创建、修改和删除作业
4.1.1.1 创建作业
在创建操作员之后,就可以创建作业了。创建作业通过系统过程 SP_CREATE_JOB 实现。
语法如下:
SP_CREATE_JOB (
job_name varchar(128),
enabled int,
enable_email int,
email_optr_name varchar(128),
email_type int,
enabled_netsend int,
netsend_optr_name varchar(128),
netsend_type int,
describe varchar(500)
)
参数详解
- JOB_NAME
作业名称。只能由_、-、$、大写字母 A 至 Z、小写字母 a 至 z、数字 0 至 9 组成,且第一个字符不能是数字,同时不能是 DM 关键字。作业名称不区分大小写,作业不能重名,重名则报错。
- ENABLE
作业是否启用。1:启用;0:不启用。
- ENABLE_EMAIL、EMAIL_OPTR_NAME、EMAIL_TYPE
ENABLE_EMAIL:作业是否开启邮件系统。1:是;0:否。如果开启,那么该作业相关的一些日志会通过邮件通知操作员;不开启就不会发送邮件。
EMAIL_OPTR_NAME:指定操作员名称。如果开启了邮件通知功能,邮件会发送给该操作员。在创建时系统会检测这个操作员是否存在,如果不存在则报错。
EMAIL_TYPE:如果在开启了邮件发送之后,在什么情况下发送邮件。情况分为三种:0、1、2。0 表示在作业执行成功后发送;1 表示在作业执行失败后发送;2 表示在作业执行结束后发送。
- ENABLE_NETSEND、NETSEND_OPTR_NAME、NETSEND_TYPE
ENABLE_NETSEND:作业是否开启网络发送。1:是;0:否。如果开启,那么这个作业相关的一些日志会通过网络发送通知操作员;如果不开启就不会通知。
NETSEND_OPTR_NAME:指定操作员名称。如果开启了网络信息通知功能,则会通过网络发送来通知该操作员。在创建时系统会检测这个操作员是否存在,如果不存在则报错。
NETSEND_TYPE:如果在开启了网络发送之后,在什么情况下发送网络信息。这个情况也有三种,和上面的 EMAIL_TYPE 是完全一样的。
说明网络发送功能只有WINDOWS早期版本上才支持(比如WIN 2000/XP),且一定要开启MESSAGER服务。WINDOWS7、8系统因为取消了MESSAGER服务,所以该功能也不支持。
- DESCRIBE
作业描述信息,最长 500 个字节。
例 创建一个名为 TEST 的作业。
SP_CREATE_JOB('TEST', 1, 1, 'TOM', 2, 1, 'TOM', 2, '每一个测试作业');
创建完成这个作业后,系统就会在 SYSJOBS 中插入一条相应的记录,但是这个作业不会做任何事情,只是一个空的作业,如果需要让它执行,还需要配置这个作业。
4.1.1.2 修改作业
如果 DBA 或作业用户发现某一个作业中的信息不合理需要修改,可以调用系统过程 SP_ALTER_JOB 来实现;如果 DBA 或作业用户需要重命名作业,可以调用系统过程 SP_RENAME_JOB 来实现;如果 DBA 需要修改作业所属模式,可以调用系统过程 SP_JOB_SET_SCHEMA 来实现。
只允许 DBA 或作业拥有者使用 SP_ALTER_JOB 或 SP_RENAME_JOB 对作业进行修改;只允许 DBA 使用 SP_JOB_SET_SCHEMA 修改作业所属的模式。
1)SP_ALTER_JOB
语法如下:
SP_ALTER_JOB (
JOB_NAME VARCHAR(128),
ENABLED INT,
ENABLE_EMAIL INT,
EMAIL_OPTR_NAME VARCHAR(128),
EMAIL_TYPE INT,
ENABLED_NETSEND INT,
NETSEND_OPTR_NAME VARCHAR(128),
NETSEND_TYPE INT,
DESCRIBE VARCHAR(500)
)
参数详解
函数 SP_ALTER_JOB 的参数和 SP_CREATE_JOB 的参数完全相同(请参考 4.1.1.1 创建作业),除了 JOB_NAME 不可修改外,其他的属性都可修改。对于可修改参数,如果要修改,则指定新值;如果不修改,则继续指定原值。作业属性修改后,需要重新配置作业,使修改生效。
例 下面的语句修改了作业 TEST 的一些信息。
SP_ALTER_JOB('TEST', 0, 1, 'DBA', 2, 1, 'DBA', 2, '修改一个作业');
SP_JOB_CONFIG_START('TEST');
SP_JOB_CONFIG_COMMIT('TEST');
2)SP_RENAME_JOB
语法如下:
SP_RENAME_JOB (
JOB_NAME VARCHAR(128),
NEW_NAME VARCHAR(128)
)
参数详解
-
JOB_NAME
作业名称,必须是已经存在的作业名称。
-
NEW_NAME
新的作业名称,不能与已经存在的作业重名。
例 将名称为 TEST 的作业修改为 TEST2。
SP_RENAME_JOB('TEST', 'TEST2');
如果在作业的调度周期内,需要暂停或暂停后重新启用作业,可以调用系统过程 SP_ENABLE_JOB 来实现。SP_ENABLE_JOB 除了会修改作业在系统表 SYSJOBS 中的 ENABLE 字段外,还会修改作业创建的触发器为 ENABLE 或 DISABLE 状态。
语法如下:
SP_ENABLE_JOB (
JOB_NAME VARCHAR(128),
ENABLED INT
)
参数详解
- JOB_NAME
作业名称。必须是有效的标识符,同时不能是 DM 关键字。作业必须存在,否则报错。 - ENABLE
作业是否启用。1:启用;0:不启用。
例 下面的语句将作业 TEST 暂停。
SP_ENABLE_JOB('TEST', 0);
3)SP_JOB_SET_SCHEMA
语法如下:
SP_JOB_SET_SCHEMA (
JOB_NAME VARCHAR(128),
SCHEMA_NAME VARCHAR(128)
)
参数详解
-
JOB_NAME
作业名称。必须是有效的标识符,同时不能是 DM 关键字。作业必须存在,否则报错。
-
SCHEMA_NAME
模式名称。必须是有效的模式,否则报错。
例 修改作业 TEST 的所属模式为名为 USERS 的有效模式。
SP_JOB_SET_SCHEMA('TEST','USERS');
4.1.1.3 删除作业
如果一个作业已经执行完成,或者由于其它什么原因需要删除作业,可以调用系统过程 SP_DROP_JOB 实现。只允许 DBA 用户或者作业拥有者使用 SP_DROP_JOB 删除作业。
语法如下:
SP_DROP_JOB (
JOB_NAME VARCHAR(128)
)
参数详解
- JOB_NAME
作业名称。在删除时会检测这个作业是否存在,如果不存在则系统报错。
在删除一个作业时,系统会同时将与这个作业相关联的所有对象都删除。包括步骤、调度等,也就是会分别从作业表 SYSJOBSTEPS 以及 SYSJOBSCHEDULES 中删除属于这个作业的步骤及调度。
例 删除作业 TEST。
SP_DROP_JOB('TEST');
4.1.2 配置作业
上面所述的内容都是最基本的一些操作,所创建的作业都还不能执行任何操作,只是一个空的作业,如果想要这个作业能执行一些指定的操作,还需要对这个作业进行配置。
配置一个作业主要包括以下几个步骤:
- 开始作业配置;
- 指定要开始配置一个作业;
- 为指定的作业增加步骤;
- 为指定的作业增加调度;
- 结束作业配置。
只有在结束作业配置后,这个作业才算配置完成,同时如果这个作业是 ENABLE 状态的,那么它会立即生效。也就是从“结束作业配置”时刻开始就会根据它所定义的调度来执行操作了。此外,属于需要在作业配置过程中执行的系统过程,在执行过程中会产生回滚日志,若未正常结束作业配置,当前事务仍会处于活动状态。
4.1.2.1 开始作业配置
用系统过程 SP_JOB_CONFIG_START 指定对一个作业配置的开始。
语法如下:
SP_JOB_CONFIG_START (
job_name varchar(128)
)
参数详解
- JOB_NAME
要配置的作业的名称。执行时会检测这个作业是否存在,如果不存在则报错。
开始作业配置之后到结束作业配置之前这段时间,当前会话会处于作业配置状态。配置状态不允许添加、删除、修改其他作业的步骤或调度。开始作业配置和结束作业配置两个过程配合使用,保证作业配置的完整性。
例 开始对作业 TEST 进行配置。
SP_JOB_CONFIG_START('TEST');
4.1.2.2 设置作业执行节点
DSC 环境下,用系统过程 SP_JOB_SET_EP_SEQNO 指定作业执行节点。
语法如下:
SP_JOB_SET_EP_SEQNO (
job_name varchar(128),
ep_seqno int
)
参数详解
- JOB_NAME
要配置的作业的名称。执行时会检测这个作业是否存在,如果不存在则报错。
- EP_SEQNO
DSC 集群环境中执行该作业的节点号,取值范围 0~15。单机场景中 EP_SEQNO 参数无实际意义。
作业配置过程中,此系统过程的调用为可选。未调用此过程设置作业执行节点号,默认作业在控制节点上执行。
例 下面的例子设置了作业在指定的节点号上执行。
SP_JOB_SET_EP_SEQNO('TEST',2);
DPC 环境下,用系统过程 SP_JOB_SET_RAFT_NAME 指定作业执行节点。
语法如下:
SP_JOB_SET_RAFT_NAME (
JOB_NAME VARCHAR(128),
RAFT_NAME VARCHAR(128)
)
参数详解
-
JOB_NAME
要配置的作业的名称。执行时会检测这个作业是否存在,如果不存在则报错。
-
RAFT_NAME
DPC 环境中,实例的 RAFT_NAME。
作业配置过程中,此系统过程的调用为可选。未调用此过程设置实例的 RAFT_NAME,默认作业在当前节点上执行。
例 下面的例子设置了作业在指定的实例 RAFT1 上执行。
SP_JOB_SET_RAFT_NAME('TEST','RAFT1');
4.1.2.3 作业步骤
增加、删除作业步骤必须是在配置作业开始后才能进行,否则系统会报错,这样处理主要是为了保证作业配置的完整性。
4.1.2.3.1 增加步骤
1.增加步骤
增加作业的步骤通过系统过程 SP_ADD_JOB_STEP 或 SP_ADD_JOB_STEP_EX 实现。
1)SP_ADD_JOB_STEP
语法如下:
SP_ADD_JOB_STEP (
job_name varchar(128),
step_name varchar(128),
type int,
command text,
succ_action int,
fail_action int,
retry_attempts int,
retry_interval int,
output_file_path varchar(256),
append_flag int
)
参数详解
- JOB_NAME
作业的名称。表示正在给哪一个作业增加步骤,这个参数必须为上面调用 SP_JOB_CONFIG_START 函数时指定的作业名,否则系统会报错,同时系统会检测这个作业是否存在,不存在也会报错。
- STEP_NAME
表示增加的步骤名。只能由_、-、$、大写字母 A 至 Z、小写字母 a 至 z、数字 0 至 9 组成,且第一个字符不能是数字,同时不能是 DM 关键字。步骤名不区分大小写,同一个作业不能有两个同名的步骤,创建时会检测这个步骤是否已经存在,如果存在则报错。
- TYPE
步骤的类型。取值范围 0、1、2、3、4、5 和 6。说明如下:
0:表示执行一段 SQL 语句或者是语句块。
1:表示执行基于 V1.0 版本的备份还原(没有 WITHOUT LOG 和 PARALLEL 选项)。
2:表示重组数据库。
3:表示更新数据库的统计信息。
4:表示执行 DTS(数据迁移)。需要注意,通过作业步骤方式执行 DTS 时,作业步骤的执行状态和作业历史中的成功与失败仅表明 DTS 是否启动成功,由于服务器无法获取 DTS 迁移过程中的具体执行结果,DTS 的执行结果或错误信息需要查看 DTS 自身的日志。
5:表示执行基于 V1.0 版本的备份还原(有 WITHOUT LOG 和 PARALLEL 选项)。
6:表示执行基于 V2.0 版本的备份还原。
- COMMAND
指定不同步骤类型(TYPE)下,步骤在运行时所执行的语句。它不能为空,TYPE 不为 0 时,长度不能超过 3600。建议 COMMAND 内容较长时用存储过程封装。
当 TYPE=0 时,指定要执行的 SQL 语句或者语句块。如果要指定多条语句,在语句之间必须用分号隔开。不支持多条 DDL 语句一起执行,否则在执行时可能会报出不可预知的错误信息。
当 TYPE=1 时,指定的是一个字符串。该字符串由三个部分组成:[备份模式][备份压缩类型][base_dir,…,base_dir|bakfile_path]。三部分详细介绍如下:
1.第一部分是一个字符,表示备份模式。0:完全备份;1:增量备份。如果第一个字符不是这两个值中的一个,系统会报错。
2.第二部分是一个字符,表示备份时是否进行压缩。0:不压缩;1:压缩。
3.第三部分是一个文件路径,表示备份文件的路径。路径命令有具体的格式,分以下两种:
1)对于增量备份,因为它必须要指定一个或者多个基础备份路径,每个路径之间需要用逗号隔开,之后接着是备份路径,基础备份路径与备份路径需要用“|”隔开,如果不指定备份路径,则不需要指定“|”,系统会备份到 INI 参数 BAK_PATH 指定的默认备份路径。例如,11E:\base_bakdir1,
base_bakdir2|bakdir。
2)对于完全备份,因为不需要指定基础备份路径所以就不需要“|”符号了,可以直接在第三个字节开始指定备份路径。例如,01E:\bakdir。如果不指定备份路径,则系统会备份到 INI 参数 BAK_PATH 指定的默认备份路径。
当 TYPE 是 2、3 或 4 时,要执行的语句就是由系统内部根据不同类型生成的不同语句或者过程。
当 TYPE=5 时,指定的是一个字符串。该字符串由六个部分组成:[备份模式][备份压缩类型][备份日志类型][备份并行类型][预留][base_dir,…,base_dir | bakfile_path | parallel_file]。六部分详细介绍如下:
1.第一部分是一个字符,表示备份模式。0:完全备份;1:增量备份。如果第一个字符不是这两个值中的一个,系统会报错。
2.第二部分是一个字符,表示备份时是否进行压缩。0:不压缩;1:压缩。
3.第三部分是一个字符,表示是否备份日志。0:备份;1:不备份。
4.第四部分是一个字符,表示是否并行备份。0:普通备份;1:并行备份,并行备份映射放到最后,以“|”分割。
5.第五部分是一个保留字符,用 0 填充。
6.第六部分是一个文件路径,表示备份文件的路径。路径命令有具体的格式,分以下两种:
1)对于增量备份,因为它必须要指定一个或者多个基础备份路径,每个路径之间需要用逗号隔开,之后接着是备份路径,最后是并行备份映射文件;并行映射文件,基础备份路径与备份路径需要用“|”隔开,如果不指定备份路径与并行映射文件,则不需要指定“|”,例如:11010E:\base_bakdir1,
2)对于完全备份,因为不需要指定基础备份路径所以就不需要“|”符号了,可以直接在第六个字节开始指定备份路径;例如:01000E:\bakdir。如果不指定备份路径,系统会备份到 INI 参数 BAK_PATH 指定的默认备份路径。
当 TYPE=6 时,指定的是一个字符串。该字符串由九个部分组成:[备份模式][备份压缩类型][备份日志类型][备份并行数][USE PWR][MAXPIECESIZE][RESV1][RESV2][base_dir,…,base_dir | bakfile_dir]。九部分详细介绍如下:
1.第一部分是一个字符,表示备份模式。0:完全备份;1:差异增量备份;3:归档备份;4:累积增量备份。如果第一个字符不是这四个值中的一个,系统会报错。
2.第二部分是一个字符,表示备份时是否进行压缩。取值范围为 0~9。0 表示不压缩,1 表示 1 级压缩,2 表示 2 级压缩,以此类推,9 表示 9 级压缩。
3.第三部分是一个字符,表示是否备份日志。0 备份;1 不备份。
4.第四部分是一个字符,表示并行备份并行数。取值范围 0~9。其中,0 表示不进行并行备份;1 表示使用并行数默认值 4;2~9 表示并行数。
5.第五部分为一个字符,表示并行备份时,是否使用 USE PWR 优化增量备份。0:不使用;1:使用。(只是语法支持,没有实际作用)
6.第六部分为一个字符,表示备份片大小的上限(MAXPIECESIZE)。0 表示采用默认值(32 位系统默认为 2G,64 位系统默认为 4G);1 表示 128M;2 表示 256M;,3 表示 512M;4 表示 1G;5 表示 2G;6 表示 4G;7 表示 8G;8 表示 16G;9 表示 32G。
7.第七部分为一个字符,表示是否在备份完归档后,删除备份的归档文件。0:不删除;1:删除。
8.第八部分是一个保留字符,用 0 填充。
9.第九部分是一个文件路径,表示备份文件的路径。路径命令有具体的格式,分以下两种:
1)对于增量备份,因为它必须要指定一个或者多个基础备份路径,每个路径之间需要用逗号隔开,之后接着是备份路径。基础备份路径与备份路径需要用“|”隔开,例如,11000000E:\base_bakdir1,base_bakdir2|bakdir 就是一个合法的增量备份命令。
2)对于完全备份,就不需要“|”符号了,可以直接在第九个字节开始指定备份路径。例如,01000000E:\bakdir。如果不指定备份路径,系统会备份到 INI 参数 BAK_PATH 指定的默认备份路径。
- SUCC_ACTION
指定步骤执行成功后,下一步该做什么事。取值范围 0、1、2、3。说明如下:
0:表示不报告步骤执行成功,并结束作业。
1:表示报告步骤执行成功,并结束作业。
2:表示不报告步骤执行成功,并执行下一步。
3:表示报告步骤执行成功,并执行下一步。
SUCC_ACTION 的值用两位二进制数来表示,低位为 0 表示不报告步骤结果,1 表示报告步骤结果;高位为 0 表示不执行下一步,1 表示执行下一步。
- FAIL_ACTION
指定步骤执行失败后,下一步该做什么事。取值范围 0、1、2、3。说明如下:
0:表示不报告步骤执行失败,并结束作业。
1:表示报告步骤执行失败,并结束作业。
2:表示不报告步骤执行失败,并执行下一步。
3:表示报告步骤执行失败,并执行下一步。
FAIL_ACTION 的值用两位二进制数来表示,低位为 0 表示不报告步骤结果,1 表示报告步骤结果;高位为 0 表示不执行下一步,1 表示执行下一步。
- RETRY_ATTEMPTS
表示当步骤执行失败后,需要重试的次数。取值范围 0~99999。
- RETRY_INTERVAL
表示在每两次步骤执行重试之间的间隔时间。取值范围 0~2147483647,单位秒。
- OUTPUT_FILE_PATH
表示步骤执行时输出文件的路径。该参数已废弃,没有实际意义。
- APPEND_FLAG
输出文件的追写方式。如果指定输出文件,那么这个参数表示在写入文件时是否从文件末尾开始追写。1:是;0:否。如果是 0,那么从文件指针当前指向的位置开始追写。
例 下面的语句为作业 TEST 增加了步骤 STEP1。
SP_ADD_JOB_STEP('TEST', 'STEP1', 0, 'insert into myinfo values(1000, ''Hello
World''); ', 0, 0, 2, 1, NULL, 0);
STEP1 指定的是执行 SQL 语句,其 COMMAND 参数指定的是向 MYINFO 表中插入一条记录,执行成功和失败的下一步动作都是不报告步骤执行结果并结束作业,同时指定了失败后只重试两次,时间间隔为 1 秒钟。
2)SP_ADD_JOB_STEP_EX
语法如下:
SP_ADD_JOB_STEP_EX (
JOB_NAME VARCHAR(128),
STEP_NAME VARCHAR(128),
TYPE INT,
COMMAND TEXT,
SUCC_ACTION INT,
FAIL_ACTION INT,
RETRY_ATTEMPTS INT,
RETRY_INTERVAL INT,
OUTPUT_FILE_PATH VARCHAR(256),
APPEND_FLAG INT,
DESCRIBE VARCHAR(500)
)
参数详解
除 DESCRIBE 外,其余参数都与 SP_ADD_JOB_STEP 的参数相同,可参考 SP_ADD_JOB_STEP 中的说明。
- DESCRIBE
表示作业步骤的注释信息,最大长度为 500 个字节。
例 下面的语句为作业 TEST 增加步骤 STEP。
SP_ADD_JOB_STEP_EX('TEST', 'STEP', 0, 'INSERT INTO MYINFO VALUES(1000, ''HELLO WORLD''); ', 0, 0, 2, 1, NULL, 0, '一个测试步骤');
2. 选择执行指定步骤
可以通过系统过程 SP_JOB_STEP_SET_NEXT_STEP 来指定执行成功或失败的下一步的步骤名称。
语法如下:
SP_JOB_STEP_SET_NEXT_STEP (
JOB_NAME VARCHAR(128),
STEP_NAME VARCHAR(128),
SUCC_NEXT_STEP VARCHAR(128),
FAIL_NEXT_STEP VARCHAR(128)
)
参数详解
-
JOB_NAME
作业的名称。表示正在给哪一个作业增加步骤,这个参数必须为上面调用 SP_JOB_CONFIG_START 函数时指定的作业名,否则系统会报错,同时系统会检测这个作业是否存在,不存在也会报错。
-
STEP_NAME
步骤名称。表示正在设置的步骤,必须是已经创建好的步骤,若步骤不存在会报错。
-
SUCC_STEP_NAME
指定步骤执行成功时,下一步骤的名称,必须是已经创建好的步骤或者为 NULL。只有在配置步骤时指定步骤的 SUCC_ACTION 参数为 2 或者 3 时才有效。
-
FAIL_STEP_NAME
指定步骤执行失败时,下一步骤的名称,必须是已经创建好的步骤或者为 NULL。只有在配置步骤时指定步骤的 FAIL_ACTION 参数为 2 或者 3 时才有效。
4.1.2.3.2 修改步骤
1)SP_ALTER_JOB_STEP
修改作业的步骤通过系统过程 SP_ALTER_JOB_STEP 或 SP_ALTER_JOB_STEP_EX 实现。
语法如下:
SP_ALTER_JOB_STEP (
JOB_NAME VARCHAR(128),
STEP_NAME VARCHAR(128),
TYPE INT,
COMMAND TEXT,
SUCC_ACTION INT,
FAIL_ACTION INT,
RETRY_ATTEMPTS INT,
RETRY_INTERVAL INT,
OUTPUT_FILE_PATH VARCHAR(256),
APPEND_FLAG INT
)
参数详解
所有参数与 SP_ADD_JOB_STEP 的参数一样,可参考 4.1.2.3.1 增加步骤。
2)SP_ALTER_JOB_STEP_EX
语法如下:
SP_ALTER_JOB_STEP_EX (
JOB_NAME VARCHAR(128),
STEP_NAME VARCHAR(128),
TYPE INT,
COMMAND TEXT,
SUCC_ACTION INT,
FAIL_ACTION INT,
RETRY_ATTEMPTS INT,
RETRY_INTERVAL INT,
OUTPUT_FILE_PATH VARCHAR(256),
APPEND_FLAG INT,
DESCRIBE VARCHAR(500)
)
参数详解
所有参数与SP_ADD_JOB_STEP_EX的参数一样,可参考[4.1.2.3.1 增加步骤](#4.1.2.3.1 增加步骤)。
3)SP_RENAME_JOB_STEP
作业步骤重命名通过系统过程 SP_RENAME_JOB_STEP 实现。
语法如下:
SP_RENAME_JOB_STEP (
JOB_NAME VARCHAR(128),
STEP_NAME VARCHAR(128),
NEW_STEP VARCHAR(128)
)
参数详解
-
JOB_NAME
作业名称,必须是已经存在的作业名称。
-
STEP_NAME
步骤名称,必须是已经存在的步骤名称。
-
NEW_STEP
新的步骤名称,不能和已存在的步骤重名。
4.1.2.3.3 删除步骤
如果用户发现一个作业中的某个步骤不需要了,可以通过系统过程 SP_DROP_JOB_STEP 删除这个步骤。若其他步骤依赖当前步骤,不可删除。如需删除,先修改其他步骤的 SUCC_STEP_NAME 或 FAIL_STEP_NAME。
语法如下:
SP_DROP_JOB_STEP (
job_name varchar(128),
step_name varchar(128)
)
参数详解
- JOB_NAME
作业名称。表示正在删除该作业下的步骤。这个参数必须为前面调用 SP_JOB_CONFIG_START 函数时指定的作业名,否则系统会报错,同时系统会检测这个作业是否存在,不存在也会报错。
- STEP_NAME
要删除的步骤名。删除时会检测这个步骤是否存在,如果不存在则报错。
例 为作业 TEST 删除步骤 STEP1。
SP_DROP_JOB_STEP('TEST', 'STEP1');
4.1.2.4 作业调度
增加、删除调度必须是在配置作业开始后才能进行,否则系统会报错,这样处理主要是为了保证作业配置的完整性。
4.1.2.4.1 增加调度
增加调度通过调度系统过程 SP_ADD_JOB_SCHEDULE 实现。
语法如下:
SP_ADD_JOB_SCHEDULE (
job_name varchar(128),
schedule_name varchar(128),
enable int,
type int,
freq_interval int,
freq_sub_interval int,
freq_minute_interval int,
starttime varchar(128),
endtime varchar(128),
during_start_date varchar(128),
during_end_date varchar(128),
describe varchar(500)
)
参数详解
- JOB_NAME
作业名称。指定要给该作业增加调度,这个参数必须是配置作业开始时指定的作业名,否则报错,同时系统还会检测这个作业是否存在,如果不存在也会报错。
- SCHEDULE_NAME
待创建的调度名称。只能由_、-、$、大写字母 A 至 Z、小写字母 a 至 z、数字 0 至 9 组成,且第一个字符不能是数字,同时不能是 DM 关键字。调度名称不区分大小写,指定的作业不能创建两个同名的调度,创建时会检测这个调度是否已经存在,如果存在则报错。需要注意,参数 JOB_NAME 和参数 SCHEDULE_NAME 的总长度不能超过 253。
- ENABLE
表示调度是否启用,布尔类型。1:启用;0:不启用。
- TYPE
指定调度类型。取值范围 0、1、2、3、4、5、6、7、8。分别介绍如下:
0:表示指定作业只执行一次。
1:按天的频率来执行。
2:按周的频率来执行。
3:在一个月的某一天执行。
4:在一个月的第一周第几天执行。
5:在一个月的第二周的第几天执行。
6:在一个月的第三周的第几天执行。
7:在一个月的第四周的第几天执行。
8:在一个月的最后一周的第几天执行。
当 TYPE=0 时,其执行时间由下面的参数 DURING_START_DATE 指定。
- FREQ_INTERVAL
与 TYPE 有关。表示不同调度类型下的发生频率。说明如下:
当 TYPE=0 时,这个值无效,系统不做检查。
当 TYPE=1 时,表示每几天执行,取值范围为 1~100。
当 TYPE=2 时,表示的是每几个星期执行,取值范围没有限制。
当 TYPE=3 时,表示每几个月中的某一天执行,取值范围没有限制。
当 TYPE=4 时,表示每几个月的第一周执行,取值范围没有限制。
当 TYPE=5 时,表示每几个月的第二周执行,取值范围没有限制。
当 TYPE=6 时,表示每几个月的第三周执行,取值范围没有限制。
当 TYPE=7 时,表示每几个月的第四周执行,取值范围没有限制。
当 TYPE=8 时,表示每几个月的最后一周执行,取值范围没有限制。
- FREQ_SUB_INTERVAL
与 TYPE 和 FREQ_INTERVAL 有关。表示不同 TYPE 的执行频率,在 FREQ_INTERVAL 基础上,继续指定更为精准的频率。说明如下:
当 TYPE=0 或 1 时,这个值无效,系统不做检查。
当 TYPE=2 时,表示的是某一个星期的星期几执行,可以同时选中七天中的任意几天。取值范围 1~127。具体如何取值,请用户参考如下规则。因为每周有七天,所以 DM 数据库系统内部用七位二进制来表示选中的日子。从最低位开始算起,依次表示周日、周一...周五、周六。选中周几,就将该位置 1,否则置 0。例如,选中周二和周六,7 位二进制就是 1000100,转化成十进制就是 68,所以 FREQ_SUB_INTERVAL 就取值 68。
当 TYPE=3 时,表示将在一个月的第几天执行。取值范围 1~31。
当 TYPE 为 4、5、6、7 或 8 时,都表示将在某一周内第几天执行。取值范围 1~7,分别表示从周日到周六。
- FREQ_MINUTE_INTERVAL
表示一天内每隔多少分钟执行一次。有效值范围 0~1439,单位分钟,0 表示一天内执行一次。
- STARTTIME
定义作业被调度的起始时间。当 TYPE=0 时,这个值无效。其余取值下,必须是有效的时间,不可以为空。
- ENDTIME
定义作业被调度的结束时间。可以为空。但如果不为空,指定的必须是有效的时间字符串。
- DURING_START_DATE
指定作业被调度的起始日期。必须是有效的日期字符串,不可以为空。
- DURING_END_DATE
指定作业被调度的结束日期。可以为空,DURING_END_DATE 和 ENDTIME 都为空,调度活动会一直持续下去。但如果不为空,必须是有效的日期字符串,同时必须是在 DURING_START_DATE 日期之后。
- DESCRIBE
表示调度的注释信息,最大长度为 500 个字节。
例 1 下面的语句为作业 TEST 增加名为 SCHEDULE3 的调度。
SP_ADD_JOB_SCHEDULE('TEST', 'SCHEDULE3', 1, 1, 1, 0, 1, CURTIME, '23:59:59',
CURDATE, NULL, '一个测试调度');
上面的例子中,为作业 TEST 创建一个新的调度,调度名为 SCHEDULE3;ENABLE 为 1,即启用这个调度;其调度类型 TYPE 为 1,表示按天的频率来执行;FREQ_INTERVAL 为 1,说明每天都要执行;在这种类型下 FREQ_SUB_INTERVAL 参数就不会检查,随机写 0;FREQ_MINUTE_INTERVAL 指定的是 1,说明每隔一分钟就执行一次;STARTTIME 指定是从当前时间开始,CURTIME 表示系统当前时间;ENDTIME 指定 23:59:59,表示每天都是执行到这个时间为止;DURING_START_DATE 为调度的起始日期,表示系统当前日期;DURING_END_DATE 指定的为 NULL,表示这个调度指定的日期范围为从开始执行那刻起,永不停止;DESCRIBE 指定为‘一个测试调度’,这是对这个调度的注释。
例 2 支持跨天调度,下面的语句为作业 TEST 增加名为 SCHEDULE4 的跨天调度。
SP_ADD_JOB_SCHEDULE('TEST', 'SCHEDULE4', 1, 1, 1, 0, 1, '23:59:59','1:00:00', CURDATE, NULL, '一个跨天测试调度');
上面的例子中,为作业 TEST 创建一个新的调度,调度名为 SCHEDULE4;STARTTIME 指定为 23:59:59,表示每天都是这个时间开始执行;ENDTIME 指定为 1:00:00,表示执行到次日 1:00:00 结束。
4.1.2.4.2 修改调度
1)SP_ALTER_JOB_SCHEDULE
修改调度通过系统过程 SP_ALTER_JOB_SCHEDULE 实现。
语法如下:
SP_ALTER_JOB_SCHEDULE (
JOB_NAME VARCHAR(128),
SCHEDULE_NAME VARCHAR(128),
ENABLE INT,
TYPE INT,
FREQ_INTERVAL INT,
FREQ_SUB_INTERVAL INT,
FREQ_MINUTE_INTERVAL INT,
STARTTIME VARCHAR(128),
ENDTIME VARCHAR(128),
DURING_START_DATE VARCHAR(128),
DURING_END_DATE VARCHAR(128),
DESCRIBE VARCHAR(500)
)
参数详解
所有参数与 SP_ADD_JOB_SCHEDULE 的参数一样,可参考 4.1.2.3.1 节。
2)SP_RENAME_JOB_SCHEDULE
修改调度名称通过系统过程 SP_RENAME_JOB_SCHEDULE 实现。
语法如下:
SP_RENAME_JOB_SCHEDULE (
JOB_NAME VARCHAR(128),
SCHEDULE_NAME VARCHAR(128),
NEW_SCHEDULE VARCHAR(128)
)
参数详解
-
JOB_NAME
作业名称,必须是已经存在的作业名称。
-
SCHEDULE_NAME
调度名称,必须是已经存在的调名称。
-
NEW_SCHEDULE
新的调度名称,不能和已存在的调度重名。新的调度名称 NEW_SCHEDULE 与作业名称 JOB_NAME 的长度总和需要小于 253。
4.1.2.4.3 删除调度
删除调度必须是在配置作业开始后才能进行,否则系统会报错,这样处理主要是为了保证作业配置的完整性。如果不再需要某一个调度,可以将其删除。调用的函数为 SP_DROP_JOB_SCHEDULE。
语法如下:
SP_DROP_JOB_SCHEDULE (
job_name varchar(128),
schedule_name varchar(128)
)
参数详解
- JOB_NAME
作业名称。表示的是正在删除该作业下的调度,这个参数必须为上面调用 SP_JOB_CONFIG_START 函数时指定的作业名,否则系统会报错,同时系统会检测这个作业是否存在,不存在也会报错。
- SCHEDULE_NAME
要删除的调度的调度名。删除时会检测这个调度是否存在,如果不存在则报错。
例 删除作业 TEST 中名为 SCHEDULE3 的调度。
SP_DROP_JOB_SCHEDULE('TEST', 'SCHEDULE3');
4.1.2.5 结束作业配置
在配置完成后,用户需要对前面所做的配置进行提交,表示对作业的配置已经完成,同时将这个作业加入到运行队列。这一步可以通过系统过程 SP_JOB_CONFIG_COMMIT 实现。
语法如下:
SP_JOB_CONFIG_COMMIT (
job_name varchar(128)
)
参数详解
- JOB_NAME
待结束配置的作业的名称。
调用这个过程时,系统会检测当前会话是否处于作业配置状态,如果不处于配置状态,则系统会报“非法的作业配置操作”的错误。
在成功执行该过程后,系统会将前面所做的所有操作提交,同时将这个作业加入到运行队列,运行的内容包括这个作业下定义的所有步骤的执行内容,执行方式就是根据这个作业下定义的所有的调度定义的执行方式来执行。
4.1.3 查看、清除作业日志记录
4.1.3.1 查看作业日志记录
作业执行情况的日志存储于表 SYSJOBHISTORIES2 中,当一个作业执行完成后,系统会向这个表中插入一条作业执行情况的记录;作业步骤的执行情况的日志存储在表 SYSSTEPHISTORIES2 中,若进行作业步骤设置时选择“报告结果”,则每当一个作业步骤执行完成时都会向这个表中插入一条作业步骤执行情况的记录(对于这两个系统表的具体说明请见 2.1 系统表和系统视图)。仅拥有 DBA 权限的用户可以查看这两个表来获取作业的日志记录。
4.1.3.2 清除作业日志记录
因为日志记录会不断增加,越来越庞大,所以用户需要及时清理过时的日志。
可以通过系统过程 SP_JOB_CLEAR_HISTORIES 清除作业的日志记录。
语法如下:
SP_JOB_CLEAR_HISTORIES (
JOB_NAME varchar(128)
)
功能
清除迄今为止某个作业的所有日志记录,即删除表 SYSJOBHISTORIES2、SYSSTEPHISTORIES2 中的相关记录。如果该作业还在继续工作,那么后续会在表 SYSJOBHISTORIES2、SYSSTEPHISTORIES2 中产生该作业的新日志。非 SYSDBA 用户只能清除属于当前用户创建的作业的日志记录。
参数详解
-
JOB_NAME
待清除日志的作业名。
例 清除迄今为止作业 TEST 的所有日志记录。
SP_JOB_CLEAR_HISTORIES ('TEST');
SP_JOB_CLEAR_HISTORIES (
JOB_NAME VARCHAR(128),
BEFORE_TIME DATETIME
)
功能
清除指定时间 BEFORE_TIME 之前某个作业的所有日志记录,即删除表 SYSJOBHISTORIES2、SYSSTEPHISTORIES2 中的 START_TIME 小于 BEFORE_TIME 的相关记录。非 SYSDBA 用户只能清除属于当前用户创建的作业的日志记录。
参数详解
-
JOB_NAME
待清除日志的作业名。
-
BEFORE_TIME
删除 BEFORE_TIME 时间之前的日志记录。BEFORE_TIME 若为空,则删除所有时间的作业日志记录。
例 清除 2022-08-17 00:00:00 之前作业 TEST 的所有日志记录。
SP_JOB_CLEAR_HISTORIES ('TEST', '2022-08-17 00:00:00');
4.1.4 执行作业
4.1.4.1 立即执行一次作业
SP_DBMS_JOB_RUN 可用来立即执行一次作业。
语法如下:
SP_DBMS_JOB_RUN (
JOB_ID INTEGER
)
功能
立即执行一次作业。
SP_DBMS_JOB_RUN 会立即执行一段按照作业步骤配置规则而形成的语句块,而不是通过触发器调度周期来触发作业。需要注意的是,SP_DBMS_JOB_RUN 执行语句块成功,但在触发器中可能不支持。
参数详解
-
JOB_ID
待运行的作业 ID。可通过查询 SYSJOBS 系统表得到。
例 立即执行一次 ID 为 1680153662 的作业。
SP_DBMS_JOB_RUN(1680153662);
4.1.5 停止作业
4.1.5.1 停止已经触发的作业
作业执行过程中,因内容较多,或者由于作业步骤配置不当,可能会出现步骤之间存在死循环、作业触发后长时间未结束的现象,可以通过删除作业或者调用系统方法 SP_STOP_RUNNING_JOB 来停止已经触发的作业。
语法如下:
SP_STOP_RUNNING_JOB (
JOB_ID INTEGER
)
功能
停止当前已经触发的作业的会话。一般用于作业执行内容较多导致运行时间较长,或者由于步骤配置不当,步骤间出现死循环,导致作业长时间运行未结束的情况。不会影响作业的下一次调度,因此建议先重新配置作业后,再停止当前已经触发的作业会话。
使用 SP_STOP_RUNNING_JOB 停止的作业会话不能是当前会话。例如,将 SP_STOP_RUNNING_JOB 配置在作业步骤中,并且将 JOB_ID 设为当前作业时,不会起到停止作业的效果。
参数详解
-
JOB_ID
待停止运行的作业 ID。可通过查询 SYSJOBS 系统表得到,也可通过查询 V$JOBS_RUNNING 动态视图,获取运行时间较长的作业的 ID。
例 停止正在运行的 ID 为 1680153662 的作业。
SP_STOP_RUNNING_JOB(1680153662);
4.2 通过图形化客户端实现
可以通过图形化客户端 MANAGER 工具实现作业的创建和配置等操作。
点击代理中的作业。可以看到新建作业、设置过滤和清除过滤、查看作业历史信息和清理作业历史信息、刷新按钮。如下所示:
4.2.1 新建作业
点击新建作业按钮,会出现作业对话框。作业对话框用于实现作业的创建与配置,包含常规、作业步骤、作业调度、DDL 四部分。
4.2.1.1 常规
作业的常规属性设置页面。如下所示:
参数详解
- 作业名
作业的标识名称。
- 启用
是否启用这个作业。
- 作业描述
作业的一些描述信息。
- 邮件通知
在邮件通知开启的情况下,作业相关的一些日志会通过邮件来通知操作员,如果不开启则不会发送邮件。操作员列表用来选择要发送的操作员,发送时机列表用来选择消息发送的时机。
- 网络通知
在网络通知开启的情况下,作业相关的一些日志会通过网络来通知操作员,如果不开启则不会发送消息,这个功能只有在 WINDOWS 操作系统下才会执行,同时必须开启服务 MESSAGER 才能发送成功。操作员列表用来选择要发送的操作员,发送时机列表用来选择消息发送的时机。
4.2.1.2 作业步骤
4.2.1.2.1 作业步骤设置页面
点击作业步骤界面。如下所示:
参数详解
- 上移
上移选中的作业步骤。
- 下移
下移选中的作业步骤。
- 编辑
修改选中的作业步骤。
- 添加
添加一个新的作业步骤,参见作业步骤对话框。
- 删除
删除选中的作业步骤。
4.2.1.2.2 作业步骤对话框
作业步骤对话框用于实现作业步骤的创建与修改。包括常规和高级两部分。
4.2.1.2.2.1 常规
作业步骤的常规属性设置页面。如下所示:
参数详解
- 作业名称
作业步骤所属作业的标识名称。
- 步骤名称
作业步骤的名称。
- 步骤类型
标识该步骤的类型,步骤的类型主要有以下几种:
1)SQL 脚本
2) 备份数据库
3)重组数据库
4)更新统计信息
5)数据迁移
针对不同的步骤类型,需要不一样的深入设置。下面详细介绍:
1)当类型为 SQL 脚本时,用户需要指定要执行的 SQL 语句或者语句块。
2)当类型为备份数据库时,界面如下所示:
3)当类型为重组数据库和更新统计信息时,不需要进一步设置任何东西。
4)当类型为数据迁移时,界面如下所示:
通过点击“浏览”,选择要打开的配置文件。其中,配置文件通过 DM 数据迁移工具(DTS)导出,导出步骤为:点击选中导航中要导出的迁移,右键选择“导出配置文件”。
4.2.1.2.2.2 高级
作业步骤的高级属性配置页面。如下所示:
参数详解
- 作业步骤完成后时的操作
- 成功时
指定这个步骤执行成功后,下一步该做什么事,有四个可选项:
- 不报告执行成功并结束作业
- 报告执行成功并结束作业
- 不报告执行成功并继续执行下一步
- 报告执行成功并继续执行下一步
- 失败时
指定这个步骤执行失败后,下一步该做什么事,有四个可选项:
- 不报告执行失败并结束作业
- 报告执行失败并结束作业
- 不报告执行失败并继续执行下一步
- 报告执行失败并继续执行下一步
- 重试次数
表示当一个步骤执行失败后,需要重试的次数。
- 重试间隔
表示的是在每两次步骤执行重试之间的间隔时间。
- 脚本输出文件
- 输出文件
表示步骤执行时如果有输出结果,输出信息的文件路径。该参数已废弃。
- 追加方式
输出是否以追加的方式写到输出文件。如果勾选,表示在写入文件时从文件末尾开始追写,否则从文件指针当前指向的位置开始追写。
4.2.1.3 作业调度
4.2.1.3.1 作业调度设置页面
点击作业调度界面。如下所示:
参数详解
- 新建
新建一个作业调度,参见作业调度对话框。
- 编辑
修改选中的作业调度。
- 删除
删除选中的作业调度。
4.2.1.3.2 作业调度对话框
作业调度对话框用于实现作业调度的创建与修改。
作业调度的常规属性设置页面。
参数详解
- 作业名称
作业调度所属的作业名。
- 名称
作业调度的名称。
- 启用
指定作业调度是否启用。
- 调度类型
分为反复执行和执行一次两种类型,参数不一样。执行一次只有时间和描述。下面详细介绍反复执行类型的参数。
- 发生频率
频率类别有天、周、月。
- 每日频率
每日频率有执行一次,可选择相应的执行时间;也可多次执行,需要选择相应的执行时间。
- 持续时间
默认开始时间是今天,默认无结束日期;也可以选择开始时间和结束时间,但结束时间必须大于开始时间。
- 描述
作业调度的附加描述信息。
4.2.1.4 DDL
显示作业创建与配置的 SQL 语句。
参数详解
- 保存
保存 SQL 脚本到文件中。
4.2.2 设置、清除过滤
当作业过多时,可以通过设置过滤条件来选择符合条件的作业。
点击作业,选中设置过滤,会出现如下界面。其中,过滤条件有包含、不包含和等于三种。例如,设置过滤条件为名称中包含 TEST 的作业。
过滤条件使用完后,想恢复原状,看到所有作业,此时需要清除过滤条件,选中清除过滤即可。
4.2.3 查看、清理作业历史信息
4.2.3.1 查看历史作业信息
查看作业历史信息视图用于显示作业步骤的执行情况日志。作业每执行一次,自动向该视图中插入一条相关信息。这个视图中的所有记录都是由作业在运行过程中系统自动插入的,不是由用户来操作的。
参数详解
- 编号
编号为每一条作业历史记录的一个唯一标识。
- 作业名
表示的是某一条历史记录是由哪一个作业产生的,用作业名表示。
- 步骤名
表示的是这个历史记录是由哪一个步骤产生的,用步骤名表示。
- RAFT
DMDPC 环境下,作业触发的 RAFT 组名。
- 错误类型
这个列一般情况不用,现在都是 0。
- 错误码
表示的是在步骤执行错误后,产生的错误码。
- 错误信息
表示的是这个警报所处的数据库实例名。
- 开始时间
任务的开始时间。
- 开始时间
任务的结束时间。
- 重试次数
表示这条历史记录是第几次重试时产生的,这个列记录其当前次数。
- 是否通知
表示这条历史记录是否已经(邮件及网络发送)通知用户,如果通知则这个值为 1,否则为 0。
4.2.3.2 清理作业历史信息
清理作业历史信息,清理的是除迄今为止该作业的所有日志记录,即删除表 SYSJOBHISTORIES2、SYSSTEPHISTORIES2 中的相关记录。如果该作业还在继续工作,那么后续会产生新的历史信息。
4.2.4 管理作业
选中要管理的作业,右击查看菜单。
如上图所示,用户可根据需要对作业进行修改、删除、立即执行、启用、禁用或设置目录等操作。
MANAGER 工具支持对作业设置多级目录,当作业数量较多时,可以通过设置目录来实现作业的分层显示。仅 SYSDBA 用户支持该功能,其余用户无法分层显示作业。
举例说明:
假设当前存在作业 myJob_1 和 myJob_2,对 myJob_1 作业设置目录如下:
对 myJob_2 作业设置目录如下:
最终分层显示效果如下: