达梦数据库命令行执行作业备份
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在管理员工作中,有许多日常工作都是固定不变的。例如,定期备份数据库,定期生产数据统计等等。这些工作一般都是可以通过作业系统完成的,而通常我们建立这些作业都是可以通过管理工具中进行图形化完成,而任何事情都是有意外的,如果有一天我们需要远程在命令行模式新建/修改作业的情况下如何去读懂,去写呢?我查询了达梦的使用手册后,粗浅的说下如何在命令行模式完成定时备份的作业。。
提示:以下是本篇文章正文内容,下面案例可供参考
一、代理初始化
如果数据库以前从未启用过代理,那么首先要对其进行初始化操作,在disql里面执行:SP_INIT_JOB_SYS(1)。
代码如下(示例):
SQL>SP_INIT_JOB_SYS(1);
SP_INIT_JOB_SYS(1);
[-2124]:对象[SYSMAILINFO]已存在.
已使用时间:102.239(毫秒).执行号:0
我这个是已经有了作业,因此会提示已存在;需要提示的是代理初始化只能由SYSDBA的账号权限去执行,如果其他账号要进行代理初始化操作必须赋予相应的权限才行。
二、创建作业
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(8187)
)
2.创建作业的参数含义
我们了解下其中的参数含义:
2.1 JOB_NAME
作业名称。必须是有效的标识符,同时不能是 DM 关键字。作业不能重名,重名则报错。
2.2 ENABLE
作业是否启用。1 启用;0 不启用。
2.3 ENABLE_EMAIL、EMAIL_OPTR_NAME、EMAIL_TYPEDM8 作业系统使用手册
2.3.1 ENABLE_EMAIL:作业是否开启邮件系统。
1 是;0 否。如果开启,那么该作业相关的 一些日志会通过邮件通知操作员;不开启就不会发送邮件。
2.3.2 EMAIL_OPTR_NAME:指定操作员名称。
如果开启了邮件通知功能,邮件会发送给该操 作员。在创建时系统会检测这个操作员是否存在,如果不存在则报错。
2.3.3 EMAIL_TYPE:如果在开启了邮件发送之后,在什么情况下发送邮件。
情况分为三种: 0、1、2。
0 表示在作业执行成功后发送;
1 表示在作业执行失败后发送;
2 表示在作业执行结束后发送。
2.3.4 ENABLE_NETSEND、NETSEND_OPTR_NAME、NETSEND_TYPE
ENABLE_NETSEND:作业是否开启网络发送。
1 是;0 否。如果开启,那么这个作业相 关的一些日志会通过网络发送通知操作员;如果不开启就不会通知。
NETSEND_OPTR_NAME:指定操作员名称。
如果开启了网络信息通知功能,则会通过网络发送来通知该操作员。在创建时系统会检测这个操作员是否存在,如果不存在则报错。
NETSEND_TYPE:如果在开启了网络发送之后,在什么情况下发送网络信息。
这个情况也有三种,和上面的 EMAIL_TYPE 是完全一样的。
2.3.5 DESCRIBE 作业描述信息,最长 500 个字节。
## 3.操作示例 例题:我们创建一个作业名为test,作业为启用,不需要开启邮件系统,邮件操作员名称为’’,但一旦开启邮寄系统为执行作业成功后发送,不需要开启网路发送,操作员名称为’’,一旦开启也是执行作业成功后发送,作业描述信息为’sqlback’
call SP_CREATE_JOB('test',1,0,'',0,0,'',0,'sqlback');
如果管理员发现作业中有个不合理的需要修改,可以调用系统过程来实现,但记住作业的名称不能修改;例如我们修改下备注信息:
SP_ALTER_JOB('test',1,0,'',0,0,'',0,'修改备注信息');
作业属性修改后需要重新配置作业,使其生效
SP_JOB_CONFIG_START('test');
SP_JOB_CONFIG_COMMIT('test');
而如果管理员要删除作业则是
SP_DROP_JOB('TEST');
三、配置作业
1.配置作业语句
作业建立好后需要对这个作业进行配置,配置作业是用系统过程SP_JOB_CONFIG_START
为开始,那么我紧接这前面test的作业继续配置下去
call SP_JOB_CONFIG_START('test');
test为要配置的作业的名称。执行时会检测这个作业是否存在,如果不存在则报错。
增加作业的步骤通过系统过程 SP_ADD_JOB_STEP 实现。
语法如下:
SP_ADD_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
)
2.配置作业的参数含义
我们了解下其中的参数含义:
3.2.1 JOB_NAME 作 业 的 名 称 。
表 示 正 在 给 哪 一 个 作 业 增 加 步 骤 , 这 个 参 数 必 须 为 上 面 调 用
3.2.2 SP_JOB_CONFIG_START 函数时指定的作业名,否则系统会报错,同时系统会检测这个作
业是否存在,不存在也会报错。
3.2.3 STEP_NAME 表示增加的步骤名。
必须是有效的标识符,同时不能是 DM 关键字。同一个作业不能有两个同名的步骤,创建时会检测这个步骤是否已经存在,如果存在则报错。
3.2.4 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 选项)。
6 表示执行基于 V2.0 版本的备份还原。
3.2.5 COMMAND 指定不同步骤类型(TYPE)下,步骤在运行时所执行的语句。
它不能为空。
当 TYPE=0 时,指定要执行的 SQL 语句或者语句块。如果要指定多条语句,在语句之间
必须用分号隔开。不支持多条 DDL 语句一起执行,否则在执行时可能会报出不可预知的错误信息。
当 TYPE=1 时,指定的是一个字符串。
该字符串由三个部分组成:备份模式 、备份压缩类型、base_dir,…,base_dir|bakfile_path。
三部分详细介绍如下:
第一部分是一个字符,表示备份模式。
0 完全备份;1 增量备份。如果第一个字符不是这二个值中的一个,系统会报错。
第二部分是一个字符,表示备份时是否进行压缩。
0 不压缩;1 压缩。
第三部分是一个文件路径,表示备份文件的路径。路径命令有具体的格式,分以下两种
对于增量备份,因为它必须要指定一个或者多个基备份路径,每个路径之间需要用逗号隔开,之后接着是备份路径,基备份路径与备份路径需要用“|”隔开,如果不指定备份路径,则不需要指定“|”,同时系统会自动生成一个备份路径。例如,01E:\base_bakdir1, base_bakdir2|bakdir。对于完全备份,因为不需要指定基备份所以就不需要“|”符号了,可以直接在第三个字节开始指定备份路径即可。例如,01E:\bakdir。如果不指定备份路径,则系统会自动生成一个备份路径。
当 TYPE 是 2、3 或 4 时,要执行的语句就是由系统内部根据不同类型生成的不同语句 或者过程。
当 TYPE=5 时,指定的是一个字符串。该字符串由六个部分组成:备份模式、备份压缩类 型 、 备 份 日 志 类 型 、 备 份 并 行 类 型 、预 留 、base_dir,…,base_dir | bakfile_path | parallel_file。六部分详细介绍如下:
第一部分是一个字符,表示备份模式。0 完全备份;1 增量备份。如果第一个字符不是这二个值中的一个,系统会报错。
第二部分是一个字符,表示备份时是否进行压缩。0 不压缩;1 压缩。
第三部分是一个字符,表示是否备份日志。0 备份;1 不备份。
第四部分是一个字符,表示是否并行备份。0 普通备份;1 并行备份,并行备份映射放到最后,以“|”分割。
第五部分是一个保留字符,用 0 填充。
第六部分是一个文件路径,表示备份文件的路径。路径命令有具体的格式,分以下两种对于增量备份,因为它必须要指定一个或者多个基础备份路径,每个路径之间需要用逗号隔开,之后接着是备份路径,最后并行备份映射文件;并行映射文件,基础备份路径与备份路径需要用“|”隔开,如果不指定备份路径与并行映射文件,则不需要 指 定 “|” ,
例如01000E:\base_bakdir1,base_bakdir2|bakdir|parallel_file_path 就是一个合法的增量备份命令。 对于完全备份,因为不需要指定基备份所以就不需要“|”符号了,可以直接在 第三个字节开始指定备份路径即可;例如01000E:\bakdir。如果不指定备份路径, 系统会自动生成备份路径。
当 TYPE=6 时,指定的是一个字符串。该字符串由九个部分组成:备份模式、备份压缩类型、备份日志类型、备份并数、USEPWR、MAXPIECESIZE、RESV1、RESV2、base_dir,…,base_dir | bakfile_dir。
TYPE=6的详细介绍如下
备份模式:是一个字符,表示备份模式。0 完全备份;1 增量备份;3 归档备份。如 果第一个字符不是这三个值中的一个,系统会报错。
备份压缩类型:是一个字符,表示备份时是否进行压缩。0 不压缩;1 压缩。
备份日志类型:是一个字符,表示是否备份日志。0 备份;1 不备份。
备份并数:是一个字符,表示并行备份并行数。取值 0 到 9。其中,0 表示不进行并 行备份;1 表示使用并行数默认值 4;2~9 表示并行数。
USEPWR:为一个字符,表示并行备份时,是否使用 USE PWR 优化增量备份。0 不 使用;1 使用。(只是语法支持,没有实际作用)
MAXPIECESIZE:为一个字符,表示备份片大小的上限(MAXPIECESIZE)。0 表示默认值, 1~9 表示依次表示备份片的大小,1 则为 128M 备份片大小,9 表示 32G 的备份片大小。
RESV1:为一个字符,表示是否在备份完归档后,删除备份的归档文件。0 不删除; 1 删除。
RESV2:是一个保留字符,用 0 填充。
base_dir,…,base_dir | bakfile_dir:是一个文件路径,表示备份文件的路径。路径命令有具体的格式,分以下两种对于增量备份,因为它必须要指定一个或者多个基础备份路径,每个路径之间 需要用逗号隔开,之后接着是备份路径。基础备份路径与备份路径需要用“|”隔开,
例 如,01000000E:\base_bakdir1, base_bakdir2|bakdir 就是一个合法的增量 备份命令
对于完全备份,就不需要“|”符号了,可以直接在第八个字节开始指定备份路 径即可。
例如,01000000E:\bakdir。如果不指定备份路径,系统会自动生成一个备 份路径。
SUCC_ACTION指定步骤执行成功后,下一步该做什么事。
取值 0 或 1。说明如下:0 表示执行下一步。 1 表示报告执行成功,并执行下一步。
FAIL_ACTION 指定步骤执行失败后,下一步该做什么事。
取值 0 或 2。说明如下: 0 表示执行下一步。 2 表示报告执行失败,并结束作业。
RETRY_ATTEMPTS 表示当步骤执行失败后,需要重试的次数。
取值范围 0~100 次。
RETRY_INTERVAL 表示在每两次步骤执行重试之间的间隔时间。不能大于 10 秒钟。
OUTPUT_FILE_PATH 表示步骤执行时输出文件的路径。
该参数已废弃,没有实际意义。
APPEND_FLAG 输出文件的追写方式。
如果指定输出文件,那么这个参数表示在写入文件时是否从文件末尾开始追写。
1 是;0 否。如果是 0,那么从文件指针当前指向的位置开始追写。
## 3.操作示例 例题,为作业test增加步骤名为bf_sql,步骤类型为一段sql语句类型(0),紧接是sql备份语句以及备份路径,步骤成功后执行下一步(1),步骤失败后报告失败并结束作业(2),步骤失败后不需要重试(0),每两次步骤重试执行的间隔时间(0),该参数已废弃(null),如果指定了输出文件,写入的时候从末尾开始写(0)
call SP_ADD_JOB_STEP('test', 'bf_sql', 0, 'Backup tablespace tbs2 backupset ' '/dm7/bacp/tbs3ku_bak'';', 1, 2, 0, 0, NULL, 0);
如果需要修改步骤内容执行,例如我想修改下路径
SP_ALTER_JOB_STEP('test', 'bf_sql', 0, 'Backup tablespace tbs2 backupset ' '/dm7/bacp/tbs3new_bak'';', 1, 2, 0, 0, NULL, 0);
作业属性修改后需要重新配置作业,使其生效
SP_JOB_CONFIG_START('test');
SP_JOB_CONFIG_COMMIT('test');
删除作业为:
SP_DROP_JOB_STEP('test', 'bf_sql');
四、配置调度
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)
)
2.创建调度的参数含义
我们了解下其中的参数含义:
4.2.1 JOB_NAME作业名称。
指定要给该作业增加调度,这个参数必须是配置作业开始时指定的作业名,否则报错,同时系统还会检测这个作业是否存在,如果不存在也会报错。
4.2.2 SCHEDULE_NAME 待创建的调度名称。
必须是有效的标识符,同时不能是 DM 关键字。指定的作业不能创建两个同名的调度,创建时会检测这个调度是否已经存在,如果存在则报错。
4.2.3 ENABLE 表示调度是否启用,布尔类型。1 启用;0 不启用。
4.2.4 TYPE 指定调度类型。取值 0、1、2、3、4、5、6、7、8。分别介绍如下:
0 表示指定作业只执行一次。
1 按天的频率来执行。
2 按周的频率来执行。
3 在一个月的某一天执行。
4 在一个月的第一周第几天执行。
5 在一个月的第二周的第几天执行。
6 在一个月的第三周的第几天执行。
7 在一个月的第四周的第几天执行。
8 在一个月的最后一周的第几天执行。
当 TYPE=0 时,其执行时间由下面的参数 DURING_START_DATE 指定。
4.2.5 FREQ_INTERVAL 与 TYPE 有关。
表示不同调度类型下的发生频率。说明如下:
当 TYPE=0 时,这个值无效,系统不做检查。
当 TYPE=1 时,表示每几天执行,取值范围为 1~100。
当 TYPE=2 时,表示的是每几个星期执行,取值范围没有限制。
当 TYPE=3 时,表示每几个月中的某一天执行,取值范围没有限制。
当 TYPE=4 时,表示每几个月的第一周执行,取值范围没有限制。
当 TYPE=5 时,表示每几个月的第二周执行,取值范围没有限制。
当 TYPE=6 时,表示每几个月的第三周执行,取值范围没有限制。
当 TYPE=7 时,表示每几个月的第四周执行,取值范围没有限制。
当 TYPE=8 时,表示每几个月的最后一周执行,取值范围没有限制。
4.2.6 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,分别表示从周一到周日。
4.2.7 FREQ_MINUTE_INTERVAL 表示一天内每隔多少分钟执行一次。
有效值范围 1~1440,单位分钟。
4.2.8 STARTTIME 定义作业被调度的起始时间。
必须是有效的时间字符串,不可以为空。
4.2.9 ENDTIME 定义作业被调度的结束时间。
可以为空。但如果不为空,指定的必须是有效的时间字符串,同时必须要在 STARTTIME 时间之后。
4.2.10 DURING_START_DATE 指定作业被调度的起始日期。
必须是有效的日期字符串,不可以为空。
4.2.11 DURING_END_DATE 指定作业被调度的结束日期。
可以为空,DURING_END_DATE 和 ENDTIME 都为空,调度活动会一直持续下去。但如果不为空,必须是有效的日期字符串,同时必须是在DURING_START_DATE 日期之后。
4.2.12 DESCRIBE 表示调度的注释信息,最大长度为 500 个字节。
## 3.操作示例 例如我们调度的作业为test,调度名称为bf_sql,状态为启用(1),调度类型按天的频率来执行(1),每周多少天执行一次(1),更为精准的时间指定频率(0-无效不检查),多少分钟执行一次(0),定义作业被调度的起始时间(16:35:40),定义作业被调度结束时间(null),指定作业被调度的起始时间(2020-08-29 16:51:40),指定作业被调度结束日期(null),备注说明(一个测试调度)
SP_ADD_JOB_SCHEDULE('test', 'bf_sql', 1, 1, 1, 0, 0, '16:35:40', NULL, '2020-08-29 16:51:40', NULL, '一个测试调度');
修改调度,通过系统过程 SP_ALTER_JOB_SCHEDULE 实现。
例如我们修改下备注
SP_ALTER_JOB_SCHEDULE('test', 'bf_sql', 1, 1, 1, 0, 0, '16:35:40', NULL, '2020-08-29 16:51:40', NULL, '新的备注');
而如果管理员要删除调度则是
SP_DROP_JOB_SCHEDULE(‘test’,’bf_sql’)
五、其他
提交作业配置
call SP_JOB_CONFIG_COMMIT('test');
select * from sysjob.sysjobs;
call SP_JOB_CONFIG_COMMIT('test');
查看作业历史记录
select * from sysjob.sysjobhistories;
作业执行情况
select * from sysjob.sysjobschedules
作业的存放路径
select * from sysjob.sysjobsteps;