达梦数据库job system使用介绍
在管理员的工作中,有许多日常工作都是固定不变的。 例如, 定期备份数据库,定期生成数据统计报表等等。DM 的作业系统为用户提供了创建作业,并对作业进行调度执行以完成相应管理任务的功能。 可以让这些重复的数据库任务自动完成,实现日常工作自动化。
通常作业的管理是由 DBA 来维护,普通用户没有操作作业的权限,为了让普通用户可以创建、配置和调度作业,需要赋予普通用户管理作业权限: ADMIN JOB。GRANT ADMIN JOB TO NORMAL_USER; 默认 DBA 拥有全部的作业权限; ADMIN JOB 权限可以添加、配置、调度和删除作业等,但没有作业环境初始化 SP_INIT_JOB_SYS(1)和作业环境销毁 SP_INIT_JOB_SYS(0)的权限。
作业的管理,需要创建一些系统表来存储作业相关的对象、历史记录等信息。这些系统表有SYSMAILINFO、SYSJOBHISTORIES、SYSJOBHISTORIES2、SYSSTEPHISTORIES2、SYSALERTHISTORIES、SYSOPERATORS、SYSJOBS、SYSJOBSTEPS、SYSJOBSCHEDULES、SYSALERTS、SYSALERTNOTIFICATIONS共十一张,均位于 SYSJOB 模式下。用户可以通过调用系统过程 SP_INIT_JOB_SYS()来创建SYSJOB模式及这些表。
创建 SYSJOB 模式及 11 张系统表的语句。语法如下:
SP_INIT_JOB_SYS(1);
删除 SYSJOB 模式及 11 张系统表的语句。语法如下:
SP_INIT_JOB_SYS(0);
1.创建作业通过系统过程 SP_CREATE_JOB 实现。
相关参数及解释如下:
SP_CREATE_JOB (
JOB_NAME VARCHAR(128), ###作业名称。
ENABLED INT, ###作业是否启用。 1 启用; 0 不启用。
ENABLE_EMAIL INT, ###作业是否开启邮件系统。 1 是; 0 否。
EMAIL_OPTR_NAME VARCHAR(128), ###指定操作员名称。
EMAIL_TYPE INT, ###在什么情况下发送邮件。 0 表示在作业执行成功后发送; 1 表示在作业执行失败后发送; 2 表示在作业执行结束后发送
ENABLED_NETSEND INT, ###作业是否开启网络发送。 1 是; 0 否。
NETSEND_OPTR_NAME VARCHAR(128), ###指定操作员名称
NETSEND_TYPE INT, ###在什么情况下发送网络信息。0 表示在作业执行成功后发送; 1 表示在作业执行失败后发送; 2 表示在作业执行结束后发送
DESCRIBE VARCHAR(8187) ###作业描述信息
)
2.修改作业用系统过程 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(8187)
)
函数 SP_ALTER_JOB 的参数和 SP_CREATE_JOB 的参数完全相同,除了 JOB_NAME 不可修改外,其他的属性都可修改。
3.删除作业调用系统过程SP_DROP_JOB 实现。
相关参数及解释如下:
SP_DROP_JOB (
JOB_NAME VARCHAR(128) ###作业名称
)
4.对一个作业配置的开始用系统过程 SP_JOB_CONFIG_START 实现。
相关参数及解释如下:
SP_JOB_CONFIG_START (
JOB_NAME VARCHAR(128) ###要配置的作业的名称
)
5.增加作业的步骤通过系统过程 SP_ADD_JOB_STEP 实现。
相关参数及解释如下:
SP_ADD_JOB_STEP (
JOB_NAME VARCHAR(128), ###作业的名称
STEP_NAME VARCHAR(128), ###增加的步骤名
TYPE INT, ###步骤的类型。取值 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 选项)。
6 表示执行基于 V2.0 版本的备份还原。
COMMAND VARCHAR(8187), ###所执行的语句
SUCC_ACTION INT, ###执行成功后,下一步该做什么事。取值 0 或 1。说明如下:
0 表示执行下一步。
1 表示报告执行成功,并执行下一步。
FAIL_ACTION INT, ###执行失败后,下一步该做什么事。取值 0 或 2。说明如下:
0 表示执行下一步。
2 表示报告执行失败,并结束作业。
RETRY_ATTEMPTS INT, ###执行失败后,需要重试的次数。 取值范围 0~100 次。
RETRY_INTERVAL INT, ###每两次步骤执行重试之间的间隔时间。 不能大于 10 秒钟。
OUTPUT_FILE_PATH VARCHAR(256), ###执行时输出文件的路径。 该参数已废弃,没有实际意义。
APPEND_FLAG INT ###输出文件的追写方式。 如果指定输出文件,那么这个参数表示在写入文件时是否从文件末尾开始追写。 1 是; 0 否。
如果是 0,那么从文件指针当前指向的位置开始追写
)
6.修改作业的步骤通过系统过程 SP_ALTER_JOB_STEP 实现。
相关参数及解释如下:
SP_ALTER_JOB_STEP (
JOB_NAME VARCHAR(128),
STEP_NAME VARCHAR(128),
TYPE INT,
COMMAND VARCHAR(8187),
SUCC_ACTION INT,
FAIL_ACTION INT,
RETRY_ATTEMPTS INT,
RETRY_INTERVAL INT,
OUTPUT_FILE_PATH VARCHAR(256),
APPEND_FLAG INT
)
所有参数解释与 SP_ADD_JOB_STEP 的参数一样
7. 通过系统过程SP_DROP_JOB_STEP 删除步骤。
相关参数及解释如下:
SP_DROP_JOB_STEP (
JOB_NAME VARCHAR(128), ###作业名称
STEP_NAME VARCHAR(128) ###要删除的步骤名
)
8.增加调度通过调度系统过程 SP_ADD_JOB_SCHEDULE 实现。
相关参数及解释如下:
SP_ADD_JOB_SCHEDULE (
JOB_NAME VARCHAR(128), ###作业名称
SCHEDULE_NAME VARCHAR(128), ###待创建的调度名称
ENABLE INT, ###表示调度是否启用,布尔类型。 1 启用; 0 不启用。
TYPE INT, ###调度类型。取值 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 INT, ###与 TYPE 有关。 表示不同调度类型下的发生频率。说明如下:
当 TYPE=0 时,这个值无效,系统不做检查。
当 TYPE=1 时,表示每几天执行, 取值范围为 1~100。
当 TYPE=2 时,表示的是每几个星期执行, 取值范围没有限制。
当 TYPE=3 时,表示每几个月中的某一天执行, 取值范围没有限制。
当 TYPE=4 时,表示每几个月的第一周执行, 取值范围没有限制。
当 TYPE=5 时,表示每几个月的第二周执行,取值范围没有限制。
当 TYPE=6 时,表示每几个月的第三周执行, 取值范围没有限制。
当 TYPE=7 时,表示每几个月的第四周执行,取值范围没有限制。
当 TYPE=8 时,表示每几个月的最后一周执行, 取值范围没有限制
FREQ_SUB_INTERVAL INT, ###与 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 INT, ###一天内每隔多少分钟执行一次。 有效值范围 1~1440,单位分钟。
STARTTIME VARCHAR(128), ###作业被调度的起始时间。
ENDTIME VARCHAR(128), ###作业被调度的结束时间。
DURING_START_DATE VARCHAR(128), ###作业被调度的起始日期。
DURING_END_DATE VARCHAR(128), ###作业被调度的结束日期。
DESCRIBE VARCHAR(500) ###调度的注释信息。
)
9.修改调度通过调度系统过程 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 的参数一样
10.删除调度必须是在配置作业开始后才能进行,否则系统会报错,调用的函数为SP_DROP_JOB_SCHEDULE。
相关参数及解释如下:
SP_DROP_JOB_SCHEDULE (
JOB_NAME VARCHAR(128), ###作业名称
SCHEDULE_NAME VARCHAR(128) ###要删除的调度名
)
11.结束作业配置通过系统过程 SP_JOB_CONFIG_COMMIT 实现。
相关参数及解释如下:
SP_JOB_CONFIG_COMMIT (
JOB_NAME VARCHAR(128) ###待结束配置的作业的名称
)
job测试
模拟创建job,每分钟向表中插入2条数据:
—创建测试表
SQL> CREATE TABLE tbl_base (
2 id int not null,
3 class1 varchar(8),
4 name varchar2(28),
5 gender varchar(8),
6 score number(10, 5)
7 );
操作已执行
已用时间: 68.900(毫秒). 执行号:3.
—创建存储过程
SQL> CREATE PROCEDURE insert_data
2 AS
3 BEGIN
4 INSERT INTO tbl_base (id,class1,name,gender,score) VALUES(1,‘class1’,‘nana’,‘true’,90);
5 INSERT INTO tbl_base (id,class1,name,gender,score) VALUES(2,‘class1’,‘nana’,‘false’,90);
6 END;
7 /
操作已执行
已用时间: 24.460(毫秒). 执行号:4.
—创建job
SQL> SP_INIT_JOB_SYS (1);
DMSQL 过程已成功完成
已用时间: 331.752(毫秒). 执行号:8.
SQL> call SP_CREATE_JOB(‘job_1’,1,0,’’,0,0,’’,0,‘插入数据’);
DMSQL 过程已成功完成
已用时间: 2.620(毫秒). 执行号:21.
SQL> call SP_JOB_CONFIG_START(‘job_1’);
DMSQL 过程已成功完成
已用时间: 1.020(毫秒). 执行号:22.
SQL> call SP_ADD_JOB_STEP(‘job_1’, ‘插入数据’, 0, ‘CALL insert_data;’, 1, 2, 0, 0, NULL, 0);
DMSQL 过程已成功完成
已用时间: 3.966(毫秒). 执行号:23.
SQL> call SP_ADD_JOB_SCHEDULE(‘job_1’, ‘插入数据’, 1, 1, 1, 0, 1, ‘15:30:00’, NULL, ‘2020-07-08 15:30:00’, NULL, ‘’);
DMSQL 过程已成功完成
已用时间: 2.574(毫秒). 执行号:24.
SQL> call SP_JOB_CONFIG_COMMIT(‘job_1’);
DMSQL 过程已成功完成
已用时间: 9.595(毫秒). 执行号:25.
—查看job信息
SQL> select JOB,LOG_USER,LAST_DATE,THIS_DATE,NEXT_DATE,NEXT_SEC,WHAT,FAILURES from dba_jobs;
行号 JOB LOG_USER LAST_DATE THIS_DATE NEXT_DATE NEXT_SEC WHAT FAILURES
1 1594193075 SYSDBA 2020-07-08 NULL 2020-07-08 15:31:00 CALL insert_data; 0
已用时间: 8.125(毫秒). 执行号:40.
—查看当前表中数据
SQL> select sysdate from dual;
行号 SYSDATE
1 2020-07-08 15:29:010
SQL> select * from tbl_base;
未选定
已用时间: 0.411(毫秒). 执行号:29.
—一分钟后查看表中数据
SQL> select sysdate from dual;
行号 SYSDATE
1 2020-07-08 15:31:05
SQL> select * from tbl_base;
行号 ID CLASS1 NAME GENDER SCORE
1 1 class1 nana true 90.00000
2 2 class1 nana false 90.00000
已用时间: 0.447(毫秒). 执行号:34.