DM8作业系统使用
一、背景说明
在管理员的工作中,有许多日常工作都是固定不变的。例如,定期备份数据库,定期生成数据统计报表等等。DM 的作业系统为用户提供了创建作业,并对作业进行调度执行以完成相应管理任务的功能。可以让这些重复的数据库任务自动完成,实现日常工作自动化。本章就是以定期备份数据库为具体背景来说明作业系统的使用。
二、基本概念
2.1 操作员
操作员是负责维护 DM 服务器运行实例的个人。
2.2 作业
作业是由 DM 代理程序按顺序执行的一系列指定的操作。可以执行包括运行 DMPL/SQL 脚本、定期备份数据库、对数据库数据进行检查等。
2.3 警报
警报是系统中发生的某种事件,如发生了特定的数据库操作,或出错信号,或者是作业的启动、执行完毕等事件,主要用于通知指定的操作员。
2.4 调度
调度是用户定义的一个时间安排,在给定的时刻到来时,系统会启动相关的作业,按作
业定义的步骤依次执行。调度可以是一次性的,也可以是周期性的。
2.5 作业权限
通常作业的管理是由 DBA 来维护,普通用户没有操作作业的权限,为了让普通用户可以创建、配置和调度作业,需要赋予普通用户管理作业权限:ADMIN JOB。
grant admin job to normal_user;
[NOTE]
DBA用户是拥有所有的作业权限,而ADMIN JOB只有创建、配置、调度和删除作业的权限,没有创建和删除作业环境的权限。
三、创建作业环境
要进行作业管理,需要先创建作业环境,即创建一些系统表和系统视图来存储作业相关的对象、历史记录等信息。可以通过系统过程或者图形化工具来创建,这里就说明下系统过程:
通过调用 sp_init_job_sys 系统过程来实现。
SP_INIT_JOB_SYS(1);
创建作业环境;
SP_INIT_JOB_SYS(0);
删除作业环境。
-
作业环境创建之后会生成 SYSJOB 模式,并在此模式下有作业相关的表和试图等。
select name from sys.sysobjects where type$='SCH';
-
查看 SYSJOB 模式下的所有表:
select table_name from all_tables where owner='SYSJOB';
-
查看 SYSJOB 模式下的所有视图:
select view_name from all_views where owner='SYSJOB';
其中常用到的表有 SYSJOBS、SYSJOBSCHEDULES、SYSJOBHISTORIES2,分别用来查看用户定义的作业信息;作业的调度信息;作业执行情况的日志。
四、创建一个完整的作业
4.1 操作员
-
通过 SP_CREATE_OPERATOR 来创建操作员,基本语法:
SP_CREATE_OPERATOR ( OPR_NAME VARCHAR(128), -- 操作员名称 ENABLED INT, -- 是否启用这个操作员。1:是;0:否。 EMAILADDR VARCHAR(128), -- 操作员的 EMAIL 地址 NETSEND_IP VARCHAR(128) -- 操作员的 IP 地址(用于网络发送) )
如:
SP_CREATE_OPERATOR('TOM', 1, 'tom@dameng.shanghai', '192.168.0.38');
-
通过 SP_ALTER_OPERATOR 来修改操作员,基本语法:
SP_ALTER_OPERATOR ( OPR_NAME VARCHAR(128), -- 不可修改 ENABLED INT, -- 可修改 EMAILADDR VARCHAR(128), -- 可修改 NETSEND_IP VARCHAR(128) -- 可修改 )
如:
SP_ALTER_OPERATOR('TOM', 0, 'tom@dameng.shanghai', '192.168.0.38');
-
通过 SP_DROP_OPERATOR 来删除操作员,基本语法:
SP_DROP_OPERATOR ( OPR_NAME VARCHAR(128), -- 操作员名称 )
如:
SP_DROP_OPERATOR('TOM');
4.2 作业
-
通过 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, -- 与上面一样 DESCRIBE VARCHAR(8187) -- 作业描述信息 )
如:
SP_CREATE_JOB('full_bak',1,0,'',0,0,'',0,'');
创建一个名为 full_bak 的作业并启用,不开启邮件和网络通知。 -
通过 SP_ALTER_JOB 可以修改作业,语法与创建作业相同,除了JOB_NAME无法修改之外,其他的都可以修改。
-
通过 SP_RENAME_JOB 可以修改作业名称,基本语法:
SP_RENAME_JOB ( JOB_NAME VARCHAR(128), -- 旧作业名称 NEW_NAME VARCHAR(128) -- 新作业名称 )
如:
SP_RENAME_JOB('full_bak','backup_full');
-
SP_DROP_JOB 删除作业,基本语法:
SP_DROP_JOB ( JOB_NAME VARCHAR(128) )
如:
SP_DROP_JOB('full_bak');
4.3 配置作业
上面所创建的作业还只是一个空的作业,要想让这个作业执行某些操作,还需要对作业进行配置。一般的配置作业过程包括:
- 开始作业配置;
- 为指定的作业增加步骤;
- 为指定的作业增加调度;
- 结束作业配置。
[NOTE]
当然作业配置的过程中还可以设置作业执行节点、选择指定执行步骤、修改步骤、删除步骤、修改调度、删除调度等。
4.3.1 开始作业配置
通过 SP_JOB_CONFIG_START 来执行,即:SP_JOB_CONFIG_START( JOB_NAME VARCHAR(128) )
例如:SP_JOB_CONFIG_START('full_bak');;
4.3.2 增加作业步骤
增加作业的步骤通过系统过程 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值,其中6表示执行V2.0版本的备份和还原
COMMAND TEXT, -- 配合type的值使用,当取值为6时可查看下面的note说明
SUCC_ACTION INT, -- 步骤执行成功后,下一步该做什么事
FAIL_ACTION INT, -- 步骤执行失败后,下一步该做什么事
RETRY_ATTEMPTS INT, -- 步骤执行失败后,需要重试的次数
RETRY_INTERVAL INT, -- 每两次步骤执行重试之间的间隔时间
OUTPUT_FILE_PATH VARCHAR(256), -- 步骤执行时输出文件的路径
APPEND_FLAG INT -- 输出文件的追写方式
)
[NOTE]
当 TYPE=6 时,指定的是一个字符串。该字符串由九个部分组成:[备份模式][备份压缩类型][备份日志类型][备份并行数][USE PWR][MAXPIECESIZE][RESV1][RESV2][base_dir,…,base_dir | bakfile_dir]
。
如以下是一个全备和增量备份的作业步骤:
call SP_ADD_JOB_STEP('full_bak', 'fbak', 6, '01000000/data/dmdata/dmbak/full_bak', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP('incre_bak', 'incre_bak', 6, '10000000/data/dmdata/dmbak/full_bak|/data/dmdata/dmbak/inc_bak', 1, 2, 0, 0, NULL, 0);
4.3.3 增加作业调度
增加调度通过调度系统过程 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,其中1代表按天频率执行,2代表按周频率执行
FREQ_INTERVAL INT, -- 与 TYPE 有关。表示不同调度类型下的发生频率
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('full_bak', 'meizhou', 1, 2, 1, 1, 0, '02:00:00', NULL, '2020-07-08 11:39:58', NULL, '');
表示每周日凌晨2点执行一次
SP_ADD_JOB_SCHEDULE('incre_bak', 'tian', 1, 2, 1, 126, 0, '02:00:00', NULL, '2022-10-26 11:39:58', NULL, '');
表示每周一到周六凌晨2点执行一次
4.3.4 结束作业配置
通过 SP_JOB_CONFIG_COMMIT 来执行,即:SP_JOB_CONFIG_COMMIT( JOB_NAME VARCHAR(128) )
例如:SP_JOB_CONFIG_COMMIT('full_bak');
4.4 作业日志记录
创建的每一个作业信息都存储在作业表 SYSJOBS 中。通过查看表 SYSJOBS,可以看到所有已经创建的作业。而且日志会越来越大,需要用户定期清理。通过系统过程 SP_JOB_CLEAR_HISTORIES 清除作业的日志记录。
SP_JOB_CLEAR_HISTORIES (JOB_NAME VARCHAR(128) );
清除迄今为止某个作业的所有日志记录;SP_JOB_CLEAR_HISTORIES (JOB_NAME VARCHAR(128),BEFORE_TIME DATETIME);
清楚指定日期之前的所有日志。
4.5 停止作业
可以通过删除作业或者调用系统方法 SP_STOP_RUNNING_JOB 来停止已经触发的作业。
SP_STOP_RUNNING_JOB (JOB_ID INTEGER);
五、全备和增量备份作业
要求每周全备每日增量,每周日晚02:00执行全量备份;每周一至每周六晚02:00执行差异增量备份。备份保留30天,清除30天前的备份,每天凌晨01:30点整进行。这里没有要求配置操作员和配置警告与监控作业。
5.1 执行SQL
call SP_INIT_JOB_SYS(1);
call SP_CREATE_JOB('full_bak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('full_bak');
call SP_ADD_JOB_STEP('full_bak', 'fbak', 6, '01000000/data/dmdata/dmbak/full_bak', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('full_bak', 'meizhou', 1, 2, 1, 1, 0, '02:00:00', NULL, '2020-07-08 11:39:58', NULL, '');
call SP_JOB_CONFIG_COMMIT('full_bak');
call SP_CREATE_JOB('incre_bak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('incre_bak');
call SP_ADD_JOB_STEP('incre_bak', 'incre_bak', 6, '10000000/data/dmdata/dmbak/full_bak|/data/dmdata/dmbak/inc_bak', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('incre_bak', 'tian', 1, 2, 1, 126, 0, '02:00:00', NULL, '2022-10-26 11:39:58', NULL, '');
call SP_JOB_CONFIG_COMMIT('incre_bak');
call SP_CREATE_JOB('bak_clear',1,0,'',0,0,'',0,'每天删除30天前的备份');
call SP_JOB_CONFIG_START('bak_clear');
call SP_ADD_JOB_STEP('bak_clear', 'del_bak', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/data/dmdata/dmbak/full_bak'');SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/data/dmdata/dmbak/inc_bak''); CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-30);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bak_clear', 'diaodu_del', 1, 1, 1, 0, 0, '03:00:00', NULL, '2020-06-25 22:54:03', NULL, '');
call SP_JOB_CONFIG_COMMIT('bak_clear');
5.2 检查作业情况
-
查看作业配置情况
select NAME,ENABLE,USERNAME,VALID,DESCRIBE from SYSJOB.SYSJOBS;
-
查看调度配置情况
select NAME,ENABLE,TYPE,FREQ_INTERVAL,FREQ_MINUTE_INTERVAL,STARTTIME,SCHNAME,TRIGNAME,VALID from sysjob.SYSJOBSCHEDULES;
-
查看任务执行情况
select NAME,START_TIME,END_TIME,ERRCODE,ERRINFO from sysjob.SYSJOBHISTORIES2;
六、通过图形化工具获取SQL配置语句
使用系统过程配置作业时可能由于过多的参数需要配置容易出错,DM的客户端工具可以通过图形化的界面便捷的进行作业的相关配置,然后自动生成对应的SQL脚本。
-
先用DM管理工具连接数据库并进行作业配置
-
获取DDL语句
更多的内容可以登录达梦的社区进行查看:https://eco.dameng.com