创建、修改和删除作业可以通过以下两种方式来实现。一是通过系统过程来实现;二是通过图形化客户端 MANAGER 管理工具实现。这里主要围绕系统过程来实现的内容进行阐述。
1、创建作业
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 作业名称
ENABLE:作业是否启用 1:启用;0:不启用
ENABLE_EMAIL:作业是否开启邮件系统1:是;0:否 若开启,会把作业相关日志邮件通知操作员
EMAIL_OPTR_NAME:操作员名称
EMAIL_TYPE:在什么情况下发送邮件 0 执行成功后发送;1 执行失败后发送;2 执行结束后发送
ENABLE_NETSEND:作业是否开启网络发送 1:是;0:否
NETSEND_OPTR_NAME: 指定操作员名称
NETSEND_TYPE:在什么情况下发送网络信息 0成功后发送;1 失败后发送;2 结束后发送
DESCRIBE:作业描述信息 最长 500 个字节
SP_CREATE_JOB('TEST', 1, 1, 'TOM', 2, 1, 'TOM', 2, '每一个测试作业');
2、修改作业
SP_ALTER_JOB (
JOB_NAMEVARCHAR(128),
ENABLEDINT,
ENABLE_EMAILINT,
EMAIL_OPTR_NAMEVARCHAR(128),
EMAIL_TYPEINT,
ENABLED_NETSENDINT,
NETSEND_OPTR_NAMEVARCHAR(128),
NETSEND_TYPEINT,
DESCRIBEVARCHAR(500)
)
SP_ALTER_JOB('TEST', 0, 1, 'DBA', 2, 1, 'DBA', 2, '修改一个作业');
SP_JOB_CONFIG_START('TEST');
SP_JOB_CONFIG_COMMIT('TEST');
系统过程:SP_RENAME_JOB (修改作业名)
SP_RENAME_JOB (
JOB_NAMEVARCHAR(128),
NEW_NAMEVARCHAR(128)
)
SP_RENAME_JOB('TEST', 'TEST2');
系统过程:SP_ENABLE_JOB (暂停或暂停后重新启用作业)
SP_ENABLE_JOB (
JOB_NAMEVARCHAR(128),
ENABLEDINT
)
SP_ENABLE_JOB('TEST', 0);
系统过程:SP_JOB_SET_SCHEMA (设置作业模式)
SP_JOB_SET_SCHEMA (
JOB_NAMEVARCHAR(128),
SCHEMA_NAMEVARCHAR(128)
)
eg:修改作业 TEST 的所属模式为名为 USERS 的有效模式
SP_JOB_SET_SCHEMA('TEST','USERS');
3、删除作业
SP_DROP_JOB (
JOB_NAME VARCHAR(128)
)
SP_DROP_JOB('TEST');
4、配置作业
SP_JOB_CONFIG_START (
job_name varchar(128)
)
SP_JOB_CONFIG_START('TEST');
SP_JOB_SET_EP_SEQNO (
job_name varchar(128),
ep_seqno int
)
EP_SEQNO:DSC 集群环境中执行该作业的节点号,取值范围 0~15。
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)
)
RAFT_NAME:DPC 环境中,实例的 RAFT_NAME
SP_JOB_SET_RAFT_NAME('TEST',’RAFT1’);
4.1作业步骤
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
)
TYPE:步骤的类型,取值范围 0、1、2、3、4、5 和 6。
0:表示执行一段 SQL 语句或者是语句块。
1:表示执行基于 V1.0 版本的备份还原(没有 WITHOUT LOG 和 PARALLEL 选项)。
2:表示重组数据库。
3:表示更新数据库的统计信息。
4:表示执行 DTS(数据迁移)。
5:表示执行基于 V1.0 版本的备份还原(有 WITHOUT LOG 和 PARALLEL 选项)。
COMMAND:指定不同步骤类型(TYPE)下,步骤在运行时所执行的语句。
当 TYPE=0 时,指定要执行的 SQL 语句或者语句块。
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,那么从文件指针当前指向的位置开始追写。
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 秒钟。
选择执行指定步骤:系统过程 SP_JOB_STEP_SET_NEXT_STEP
SP_JOB_STEP_SET_NEXT_STEP (
JOB_NAMEVARCHAR(128),
STEP_NAMEVARCHAR(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 时才有效。
SP_ALTER_JOB_STEP (
JOB_NAMEVARCHAR(128),
STEP_NAMEVARCHAR(128),
TYPEINT,
COMMANDTEXT,
SUCC_ACTIONINT,
FAIL_ACTIONINT,
RETRY_ATTEMPTSINT,
RETRY_INTERVALINT,
OUTPUT_FILE_PATHVARCHAR(256),
APPEND_FLAGINT
)
作业步骤重命名通过系统过程 SP_RENAME_JOB_STEP 实现。
SP_RENAME_JOB_STEP (
JOB_NAMEVARCHAR(128),
STEP_NAMEVARCHAR(128),
NEW_STEPVARCHAR(128)
)
JOB_NAME:作业名称,必须已经存在的作业名称。
STEP_NAME:步骤名称,必须是已经存在的步骤名称。
SP_DROP_JOB_STEP (
job_name varchar(128),
step_name varchar(128)
)
SP_DROP_JOB_STEP('TEST', 'STEP1');
4.2作业调度
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)
)
TYPE:调度类型。取值范围 0、1、2、3、4、5、6、7、8。
0:表示指定作业只执行一次。
1:按天的频率来执行。
2:按周的频率来执行。
3:在一个月的某一天执行。
4:在一个月的第一周第几天执行。
5:在一个月的第二周的第几天执行。
6:在一个月的第三周的第几天执行。
7:在一个月的第四周的第几天执行。
FREQ_SUB_INTERVAL:与 TYPE 和 FREQ_INTERVAL 有关。表示不同 TYPE 的执行频率,在 FREQ_INTERVAL 基础上,继续指定更为精准的频率。
FREQ_MINUTE_INTERVAL:表示一天内每隔多少分钟执行一次。有效值范围 0~1439,单位分钟,0 表示一天内执行一次。
STARTTIME:定义作业被调度的起始时间。必须是有效的时间字符串,不可以为空。
ENDTIME:定义作业被调度的结束时间。可以为空。但如果不为空,指定的必须是有效的时间字符串。
DURING_START_DATE:指定作业被调度的起始日期。必须是有效的日期字符串,不可以为空。
DURING_END_DATE:指定作业被调度的结束日期。可以为空,DURING_END_DATE 和 ENDTIME 都为空,调度活动会一直持续下去。但如果不为空,必须是有效的日期字符串,同时必须是在 DURING_START_DATE 日期之后。
DESCRIBE:表示调度的注释信息,最大长度为 500 个字节。
SP_ADD_JOB_SCHEDULE('TEST', 'SCHEDULE3', 1, 1, 1, 0, 1, CURTIME, '23:59:59',
CURDATE, NULL, '一个测试调度');
eg:支持跨天调度,下面的语句为作业 TEST 增加名为 SCHEDULE4 的跨天调度。
SP_ADD_JOB_SCHEDULE('TEST', 'SCHEDULE4', 1, 1, 1, 0, 1, '23:59:59','1:00:00', CURDATE, NULL, '一个跨天测试调度');
SP_ALTER_JOB_SCHEDULE (
JOB_NAMEVARCHAR(128),
SCHEDULE_NAMEVARCHAR(128),
ENABLEINT,
TYPEINT,
FREQ_INTERVALINT,
FREQ_SUB_INTERVALINT,
FREQ_MINUTE_INTERVALINT,
STARTTIMEVARCHAR(128),
ENDTIMEVARCHAR(128),
DURING_START_DATEVARCHAR(128),
DURING_END_DATEVARCHAR(128),
DESCRIBEVARCHAR(500)
)
所有参数与 SP_ADD_JOB_SCHEDULE 的参数一样
SP_RENAME_JOB_SCHEDULE (
JOB_NAMEVARCHAR(128),
SCHEDULE_NAMEVARCHAR(128),
NEW_SCHEDULEVARCHAR(128)
)
删除调度:系统过程:SP_DROP_JOB_SCHEDULE
SP_DROP_JOB_SCHEDULE (
job_name varchar(128),
schedule_name varchar(128)
)
eg:删除作业 TEST 中名为 SCHEDULE3 的调度
SP_DROP_JOB_SCHEDULE('TEST', 'SCHEDULE3');
4.3结束作业配置
SP_JOB_CONFIG_COMMIT (
job_name varchar(128)
)
5、查看、清除作业日志记录
创建的每一个作业信息都存储在作业表 SYSJOBS 中。通过查看表 SYSJOBS,可以看到所有已经创建的作业。
因为日志记录会不断增加,越来越庞大,所以用户需要及时清理过时的日志。
可以通过系统过程 SP_JOB_CLEAR_HISTORIES 清除作业的日志记录。
SP_JOB_CLEAR_HISTORIES (
JOB_NAME varchar(128)
)
SP_JOB_CLEAR_HISTORIES ('TEST');
SP_JOB_CLEAR_HISTORIES (
JOB_NAME VARCHAR(128),
BEFORE_TIME DATETIME
)
JOB_NAME:待清除日志的作业名。
BEFORE_TIME:删除 BEFORE_TIME 时间之前的日志记录。BEFORE_TIME 若为空,则删除所有时间的作业日志记录。
eg:清除 2022-08-17 00:00:00 之前作业 TEST 的所有日志记录
SP_JOB_CLEAR_HISTORIES ('TEST', '2022-08-17 00:00:00');
6、执行作业
执行作业:SP_DBMS_JOB_RUN
SP_DBMS_JOB_RUN (
JOB_ID INTEGER
)
JOB_ID:待运行的作业 ID。可通过查询 SYSJOBS 系统表得到。
SP_DBMS_JOB_RUN(1680153662);
7、停止作业
停止作业:SP_STOP_RUNNING_JOB
SP_STOP_RUNNING_JOB (
JOB_ID INTEGER
)
JOB_ID待停止运行的作业 ID。可通过查询 SYSJOBS 系统表得到,也可通过查询 V:JOBS_RUNNING 动态视图,获取运行时间较长的作业的 ID。
eg:停止正在运行的 ID 为 1680153662 的作业
SP_STOP_RUNNING_JOB(1680153662);
总结
到这里就完成了对达梦数据库中作业系统使用的介绍,更多相关内容请移步达梦数据库官方地址: