达梦数据库支持通过作业配置实现周期性任务的自动化执行,有效提升工作效率。常见的应用场景包括:定时数据备份、定期清理过期备份文件、周期性统计信息收集等。作业配置既可通过系统存储过程实现,也可使用图形化界面进行操作。

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:作业名。必须是有效的标识符,同时不能是 DM 关键字。作业不能重名,重名则报错。

ENABLED:是否启用作业。0:不启用,1:启用。

ENABLE_EMAIL:作业是否开启邮件系统。0:否,1:是。如果开启,那么该作业相关的一些日志会通过邮件通知操作员;不开启就不会发送邮件。

EMAIL_OPTR_NAME:指定操作员名称。如果开启了邮件通知功能,邮件会发送给该操作员。在创建时系统会检测这个操作员是否存在,如果不存在则报错。

EMAIL_TYPE:如果在开启了邮件发送之后,在什么情况下发送邮件。情况分为三种:0、 1、2。0 表示在作业执行成功后发送;1 表示在作业执行失败后发送;2 表示在作业执行结束后发送。

ENABLE_NETSEND:作业是否开启网络发送。1:是;0:否。

NETSEND_OPTR_NAME:指定操作员名称。

NETSEND_TYPE:跟EMAIL_TYPE 是完全一样的。

DESCRIBE:作业描述信息,最长 500 个字节。

1.2 配置作业

配置作业主要分为以下5个步骤:

1. 开始作业配置;

2. 指定要配置的作业;

3. 为指定的作业增加作业步骤;

4. 为指定的作业增加作业调度;

5. 结束作业配置。

下面通过系统过程的方式逐步实现每一个步骤:

1. 通过SP_JOB_CONFIG_START指定对一个作业开始配置。

SP_JOB_CONFIG_START (

JOB_NAME VARCHAR(128)  --作业名,执行时会检测作业名是否存在,不存在报错

)

2. 通过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:表示增加的步骤名。必须是有效的标识符,同时不能是 DM 关键字。同一个作业不能有两个同名的步骤,创建时会检测这个步骤是否已经存在,如果存在则报错。

TYPE:步骤的类型,取值范围为[0,6]。

0:表示执行一段 SQL 语句或者是语句块。

1:表示执行基于V1.0版本的备份还原(没有 WITHOUT LOG 和 PARALLEL 选项)。

2:表示重组数据库。

3:表示更新数据库的统计信息。

4:表示执行 DTS(数据迁移)。

5:表示执行基于V1.0版本的备份还原(有 WITHOUT LOG 和 PARALLEL 选项)。

6:表示执行基于V2.0版本的备份还原。

COMMAND:不同TYPE值时,COMMAND所代表的含义不同。当TYPE=6时,COMMAND指定的是一个字符串,该字符串由9部分组成:

第1部分:1个字符,表示备份模式。0:全备;1:差异增量备份;3:归档备份;4:累计增量备份。

第2部分:1个字符,表示备份时是否压缩。取值范围0~9,0表示不压缩,其余数字即为压缩级数。

第3部分:1个字符,表示是否备份日志。0:备份;1:不备份。

第4部分:1个字符,表示并行备份并行数。取值范围 0~9。0 表示不进行并行备份;1 表示使用并行数默认值 4;2~9 表示并行数。

第5部分:1个字符,表示并行备份时,是否使用 USE PWR 优化增量备份。0:不使用;1:使用。(只是语法支持,没有实际作用)

第6部分:1个字符,表示备份片大小的上限。0表示采用默认值(32位系统默认为 2G,64 位系统默认为 4G);1表示128M;2表示256M;3表示512M依次类推下一个数字代表前面备份片大小的2倍。

第7部分:1个字符,表示是否在备份完归档后,删除备份的归档文件。0:不删除;1:删除。

第8部分:1个保留字符,用0填充。

第9部分:文件路径,表示备份文件的存放路径。对于增量备份,必须要指定一个或者多个基础备份路径,每个基础备份路径用逗号隔开,之后接着是备份路径。基础备份路径要与增量备份路径用“|”隔开,例如:11000000/basebak01,basebak02|incre_bak

SUCC_ACTION/FAIL_ACTION:指定步骤执行成功/失败后的响应。取值范围:0,1,2,3

0:表示不报告步骤执行成功/失败,并结束作业。

1:表示报告步骤执行成功/失败,并结束作业。

2:表示不报告步骤执行成功/失败,并执行下一步。

3:表示报告步骤执行成功/失败,并执行下一步。

SUCC_ACTION/FAIL_ACTION的值用两位二进制数来表示,低位为0表示不报告步骤结果,1表示报告步骤结果;高位为0表示不执行下一步,1表示执行下一步。

RETRY_ATTEMPTS:表示当步骤执行失败后,需要重试的次数。取值范围 0~99999。

RETRY_INTERVAL:表示在每两次步骤执行重试之间的间隔时间。取值范围 0~2147483647,单位秒。

OUTPUT_FILE_PATH:表示步骤执行时输出文件的路径。该参数已废弃,没有实际意义。

APPEND_FLAG:输出文件的追写方式。如果指定输出文件,那么这个参数表示在写入文件时是否从文件末尾开始追写。1:是;0:否。如果是 0,那么从文件指针当前指向的位置开始追写。

3. 通过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:调度名称。

ENABLE:调度是否启用。0:不启用,1:启用。

TYPE:指定调度方式。取值范围:0~8。

FREQ_INTERVAL:与 TYPE 有关。表示不同调度类型下的发生频率。

FREQ_SUB_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 个字节。

1.3 修改作业

1. 通过SP_ALTER_JOB修改作业中的信息,SP_ALTER_JOB中的参数与SP_CREATE_JOB相同。

2. 通过SP_RENAME_JOB对作业进行重命名。

SP_RENAME_JOB (

JOB_NAME VARCHAR(128),   --旧的作业名称,必须是已存在的作业名

NEW_NAME VARCHAR(128)    --新的作业名称,不能与已存在的作业名重复

)

3. 通过SP_JOB_SET_SCHEMA修改作业所属模式。

SP_JOB_SET_SCHEMA (

JOB_NAME VARCHAR(128),    --作业名

SCHEMA_NAME VARCHAR(128)  --模式名称,必须是有效的模式名,否则会报错

)

注:只允许DBA或作业拥有者使用SP_ALTER_JOB或SP_RENAME_JOB对作业进行修改;只允许DBA使用SP_JOB_SET_SCHEMA修改作业所属的模式。

​​​​​​​1.4 删除作业

通过SP_DROP_JOB删除作业。

SP_DROP_JOB (JOB_NAME VARCHAR(128)) 

注:只允许 DBA 用户或者作业拥有者使用 SP_DROP_JOB 删除作业。

​​​​​​​2 图形化方式

通过manager管理工具,连接数据库,右键“代理”,点击“创建代理环境”:

创建代理环境后,模式中会自动生成SYSJOB,该模式中包含作业系统的系统表:

​​​​​​​2.1 创建作业

右键“作业”,点击“新建作业”:

填写作业名和作业描述:

2.2 ​​​​​​​配置作业

新建作业步骤:

需要填写步骤名称、步骤类型、备份选项,步骤类型选择备份数据库后下方会显示出备份选项的菜单栏,备份选项需要填写备份路径并按照需求对备份策略进行设置:

作业步骤设置完毕后点击“确定”,即可在作业步骤看到:

设置名称、调度类型、发生频率和每日频率,该作业调度策略为每周六23:00执行一次bakall:

作业调度设置完毕后点击“确定”,即可在作业调度看到:

可以通过DDL查看系统过程方式:

点击“确定”,完成JOB1作业的创建:

2.3 修改作业

右键JOB1,选择“修改作业”,即可通过图形化方式对作业配置进行修改(作业名称无法修改):

修改作业步骤bakall,选中bakall点击“编辑”即可进行修改:

修改作业调度schedule01,选中schedule01点击“编辑”即可进行修改:

​​​​​​​2.4 删除作业

对需要删除的作业进行右键,点击“删除作业”:

若想要删除所有作业,可以通过“清理代理环境”,点击后代理下所有对象都会被清除,且SYSJOB模式也会消失:

    3 案例分析

    call sp_init_job_sys(1);

    call sp_create_job('bakall_delall',1,0,'',0,0,'',0,'每天23:00全量备份、删除30天前的全量备份');

    call sp_job_config_start('bakall_delall');

    call sp_add_job_step('bakall_delall', 'bakall', 6, '01020000/dmbak', 3, 1, 0, 0, null, 0);

    call sp_add_job_step('bakall_delall', 'delall', 0, 'sf_bakset_backup_dir_add(''disk'',''/dmbak'');

    call sp_db_bakset_remove_batch(''disk'',SYSDATE-30);', 1, 1, 0, 0, null, 0);

    call sp_add_job_schedule('bakall_delall', 'bakall_delall_time01', 1, 1, 1, 0, 0, '23:00:00', null, '2019-01-01 01:01:01', null, '');

    call sp_add_job_schedule('bakall_delall', 'bakall_delall_time02', 1, 0, 0, 0, 0, null, null, SYSDATE()+0.0014, null, '');

    call sp_job_config_commit('bakall_delall');

    分析:

    call sp_init_job_sys(1); 创建作业环境,包括SYSJOB模式、系统表和系统视图。

    call sp_create_job('bakall_delall',1,0,'',0,0,'',0,'每天23:00全量备份、删除30天前的全量备份'); 创建作业。参数含义分别为:作业名bakall_delall,启用作业,关闭邮件系统,操作员名称,邮件发送时机,关闭网络发送,操作员名称,网络信息发送时机,作业描述。

    call sp_job_config_start('bakall_delall'); 开始作业bakall_delall的配置。

    call sp_add_job_step('bakall_delall', 'bakall', 6, '01020000/dmbak', 3, 1, 0, 0, null, 0); 作业bakall_delall的作业步骤。参数含义分别为:作业名bakall_delall;增加的作业步骤名bakall;type=6表示表示执行基于 V2.0 版本的备份还原;'01020000/dmbak'表示备份策略及备份存放路径;3:表示报告步骤执行成功,并执行下一步;1:表示报告步骤执行失败,并结束作业;0表示当步骤执行失败时,需要尝试的次数为0次;0表示每两次步骤执行重试之间的时间间隔为0s;null这个参数已废弃,无实际作用;最后一个参数表示输出文件的追写方式,0表示否。

    call sp_add_job_step('bakall_delall', 'delall', 0, 'sf_bakset_backup_dir_add(''disk'',''/dmbak'');

    call sp_db_bakset_remove_batch(''disk'',SYSDATE-30);', 1, 1, 0, 0, null, 0); 也是bakall_delall的作业步骤,重点分析第3个参数和第4个参数。第3个参数为type,type=0表示执行一段 SQL 语句或者是语句块;第4个参数则为需要执行的语句块,sf_bakset_backup_dir_add中的参数用于指定备份存放的介质和目录,sp_db_bakset_remove_batch中的参数用于指定介质和时间,表示批量删除30天前的备份。

    call sp_add_job_schedule('bakall_delall', 'bakall_delall_time01', 1, 1, 1, 0, 0, '23:00:00', null, '2019-01-01 01:01:01', null, '');前两个参数为作业名和调度名;第3个参数enable=1表示启用该调度;第4个参数type=1,表示按天的频率执行;第5个参数与type值有关,当type=1时该参数等于1表示每天执行;第6个参数当type=1时,该参数等于0或1无效,系统不会做检查;第7个参数表示每天间隔多长时间执行一次,0表示一天内只执行一次;第8个参数为被调度的开始时间;第9个参数为结束时间,null表示没有结束时间;第10个参数指定作业被调度的起始日期;第11个参数指定作业被调度的结束日期;第12个参数为调度的描述信息。

    call sp_add_job_schedule('bakall_delall', 'bakall_delall_time02', 1, 0, 0, 0, 0, null, null, SYSDATE()+0.0014, null, ''); 该调度表示在创建作业两分钟后执行一次作业步骤。

    call sp_job_config_commit('bakall_delall'); 在配置完成后,用户需要对前面所做的配置进行提交,表示对作业的配置已经完成,同时将这个作业加入到运行队列。注意:需要和sp_job_config_start( )配套使用。

    4 实用技巧

    如需修改系统过程中作业参数但不确定其具体含义,可通过两种方式操作:一是在Manager工具中执行该作业,通过图形界面直观修改参数;二是查阅《DM8作业系统使用手册》获取参数说明,该手册位于dmdbms/doc目录下。

    达梦技术社区 | 达梦数据库: 达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

    Logo

    有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

    更多推荐