作业是由 DM 代理程序按顺序执行的一系列指定的操作。作业可以执行更广泛的活动,包括运行DMPL/SQL 脚本、定期备份数据库、对数据库数据进行检查等。可以创建作业来执行经常重复和可调度的任务,作业按照一个或多个调度的安排在服务器上执行。作业也可以由一个或多个警报触发执行,并且作业可产生警报以通知用户作业的状态(成功或者失败)。每个作业由一个或多个作业步骤组成,作业步骤是作业对一个数据库或者一个服务器执行的动作。每个作业必须至少有一个作业步骤。
一、创建作业环境
要进行作业管理,需要先创建作业环境,即创建一些系统表来存储作业相关
的对象、历史记录等信息。
这些系统表有 SYSJOBS、SYSJOBSTEPS 、 SYSJOBSCHEDULES 、 SYSMAILINFO 、 SYSJOBHISTORIES2 、 SYSSTEPHISTORIES2 、 SYSALERTHISTORIES 、 SYSOPERATORS 、 SYSALERTS、SYSALERTNOTIFICATIONS ,均位于 SYSJOB 模式下。
创建和删除这些系统表的方法:
创建:call SP_INIT_JOB_SYS(1);
删除:call SP_INI_JOB_SYS(0);
SYSJOBS 表存储用户定义的作业信息。每一个作业对应此表中的一条记录。每一条记录都有一个自增 ID,用来唯一表示这个作业,同时这个作业还具有一个聚集关键字 NAME,这意味着作业不可以同名。
SYSJOBHISTORIES2 存储作业的执行情况的日志。当一个作业执行完成 后,会向这个表中插入一条作业执行情况的记录。这个表中的所有记录都是由作业在运行过程中系统自动插入的,不是由用户来操作的。
SYSSTEPHISTORIES2 存储作业步骤的执行情况的日志。每当一个作业步骤执行完成时都会向这个表中插入一条作业步骤执行情况的记录。如果为重试步骤,RETRY_ATTEMPTS 会记录重试的次数。
SYSALERTHISTORIES 存储警报发生的历史记录的日志。每个警报发生时都会向这个表中插入相应的记录,然后 DMJMON 服务再通过扫描这个表把信息取出来通过邮件或者网络发送的方式通知关联的操作员,这个表中的所有信息都是在发生警报时,由系统自动向这个表中插入的。
二、创建操作员
由于在创建一个作业时必须要指定操作员,所以需要创建一个操作员。
SYSOPERATORS 存储作业管理系统中所有已定义操作员的信息,以NAME 为聚集索引,意味着不能具有同名的操作员。
创建操作员可以直接通过调用系统过程来实现:
SP_CREATE_OPERATOR (
OPR_NAME VARCHAR(128),
ENABLED INT,
EMAILADDR VARCHAR(128),
NETSEND_IP VARCHAR(128)
)
OPR_NAME:
操作员名称。必须是有效的标识符,同时不能是 DM 关键字。不能有同名
操作员,如果创建同名操作员,系统会报错。
ENABLED:
可修改参数。表示是否启用这个操作员。1 是;0 否。
例如: SP_CREATE_OPERATOR(‘TOM’, 1, ‘tom@dameng.shanghai’,‘192.168.0.38’);
修改操作员:
SP_ALTER_OPERATOR (
OPR_NAME VARCHAR(128),
ENABLED INT,
EMAILADDR VARCHAR(128),
NETSEND_IP VARCHAR(128)
)
删除操作员:
SP_DROP_OPERATOR ( OPR_NAME VARCHAR(128) )
如果指定的操作员存在,则会从表 SYSOPERATORS 中将这条记录删除,同时将所有这个操作员与警报的关联关系从表 SYSALERTNOTIFICATIONS 中删除,但是不会删除指定该操作员的作业。
三、创建作业
在创建操作员之后,就可以创建作业了
sp_create_job (
job_name varchar(128), #作业名称
enabled int, #作业是否启用。1 启用;0 不启用
enable_email int, #ENABLE_EMAIL:作业是否开启邮件系统。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) ) #描述信息
网络发送功能只有 WINDOWS 早期版本上才支持(比如 WIN 2000/XP),且一定要开启 MESSAGER 服务。WINDOWS7、8 系统因为取消了 MESSAGER服务,所以该功能也不支持。
创建完成这个作业后,系统就会在 SYSJOBS 中插入一条相应的记录,(通过查看表 SYSJOBS,可以看到所有已经创建的作业),但是这个作业不会做任何事情,只是一个空的作业,如果需要让它执行,还需要配置这个作业。
修改作业:sp_alter_job()参数和创建作业完全一样,除了 JOB_NAME 不可修改外,其他的属性都可修改。对于可修改参数,如果要修改,则指定新值;如果不修改,则继续指定原值。,作业属性修改后,需要重新配置作业,使修改生效。
删除作业:sp_drop_job( job_name varchar(128) )
在删除一个作业时,系统会同时将与这个作业相关联的所有对象都删除。包括步骤 、调度等 ,也就是会 分别从作业表 SYSJOBSTEPS 以 及SYSSCHEDULES 中删除属于这个作业的步骤及调度。
四、配置作业
强烈建议:因为作业配置全部都是 DDL 操作,所以在配置过程中建议用户不要做任何的 COMMIT 操作或者设置 DDL 自动提交(例如,不要设置 dm.ini文件中 DDL_AUTO_COMMIT=1)。否则在配置作业过程中,一旦错误的作业配置 DDL 操作被自动提交,将不能回滚。
不支持在设置了 DML 自动提交(例如,DIsql 中设置 SET AUTO ON)的会话上配置作业。
开始作业配置之后到结束作业配置之前这段时间,当前会话会处于作业配置状态。配置状态不允许做任何的创建、修改、删除对象(作业、操作员、警报)的操作。
配置一个作业主要包括以下几个步骤:
1.指定要开始配置一个作业;
SP_JOB_CONFIG_START(‘TEST’);
SYSJOBS 表存储用户定义的作业信息。每一个作业对应此表中的一条记录。
2.为指定的作业增加步骤;
SYSJOBSTEPS 存储作业包括的所有步骤信息。每一行存储了某个作业的某个步骤的所有属性。
(增加、删除作业步骤必须是在配置作业开始后才能进行)
sp_add_job_step(
job_name varchar(128), #作业名称
step_name varchar(128), #步骤名称
type int, #0~6
command varchar(8187), #步骤执行的语句,语句格式对应 0~6
succ_action int, #步骤执行成功后,0:执行下一步;1 报告执行成功,并执行下一步。
fail_action int, #步骤执行失败后,0:执行下一步;2:报告执行失败,并结束作业
retry_attempts int, #步骤执行失败后,需要重试的次数。0~100
retry_interval int, #每两次步骤执行重试之间的时间间隔,<=10s
output_file_path varchar(256), #步骤执行时输出文件的路径。该参数已废弃,没有实际意义
append_flag int ) #输出文件的追写方式。1:文件末尾追加;0:文件指针当前
位置追加
修改步骤:sp_alter_job_step()参数和增加调度完全一样
删除步骤:sp_drop_job_step(job_name,step_name)
3.为指定的作业增加调度;
调度用来指定一个作业的执行情况,可以指定作业的执行方式及时间范围。SYSJOBSCHEDULES 表存储作业的调度信息。
(增加、删除作业调度必须是在配置作业开始后才能进行)
sp_add_job_schedule (
job_name varchar(128),
schedule_name varchar(128),
enable int,
type int, #0~8
freq_interval int, #0~8 不同调度类型下的发生频率
freq_sub_interval int, #0~8 在 FREQ_INTERVAL 基础上,继续指定更为精准的频率
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) ) #调度描述信息
修改调度:sp_alter_job_schedule()参数和增加调度一样
删除调度:sp_drop_job_schedule(job_name,schedule_name)
4.结束作业配置
sp_job_config_commit(job_name)
结束作业配置”时刻开始,如果这个作业是 ENABLE 状态的,那么它会立即生效。
在 DM 的作业配置过程中,如果配置出现错误时,可以直接使用ROLLBACK将错误的配置回滚到 SP_JOB_CONFIG_START 刚执行的状态。
步骤类型和对应 command:
0:指定要执行的 SQL 语句或者语句块。多条语句用分号隔开。不支持多条DDL 语句一起执行。
1:V1.0 版本的备份还原(没有 WITHOUT LOG 和 PARALLEL 选项)command 为字符串,格式如下:
[0|1][0|1][[base_dir,…,base_dir|bakfile_path]
[全备|增备][不压缩|压缩][备份文件路径]
对于增量备份,因为它必须要指定一个或者多个基备份路径,每个路径之间需要用逗号隔开,之后接着是备份路径,基备份路径与备份路径需要用“|”隔开 。
2:重组数据库
3:更新数据库的统计信息
4:执行 DTS(数据迁移):当 TYPE 是 2、3 或 4 时,要执行的语句就是由系统内部根据不同类型生成的不同语句或者过程。
5:V1.0 版本的备份还原(有 WITHOUT LOG 和 PARALLEL 选项): [备份模式][备份压缩类型][备份日志类型][备份并行类型][预留] [base_dir,…,base_dir|bakfile_path|parallel_file]
6:V2.0 版本的备份还原
[ 备份模式 ][ 备 份 压 缩 类 型 ][ 备 份 日 志 类 型 ][ 备 份 并 行 数][USEPWR][MAXPIECESIZE][RESV1][RESV2][base_dir,…,base_dir|bakfile_dir]
调度类型 TYPE:
0 表示指定作业只执行一次。
1 按天的频率来执行。
2 按周的频率来执行。
3 在一个月的某一天执行。
4 在一个月的第一周第几天执行。
5 在一个月的第二周的第几天执行。
6 在一个月的第三周的第几天执行。
7 在一个月的第四周的第几天执行。
8 在一个月的最后一周的第几天执行。
当 TYPE=0 时,其执行时间由下面的参数 DURING_START_DATE 指定。
FREQ_INTERVAL
与 TYPE 有关。表示不同调度类型下的发生频率。说明如下:
当 TYPE=0 时,这个值无效,系统不做检查。
当 TYPE=1 时,表示每几天执行,取值范围为 1~100。
当 TYPE=2 时,表示的是每几个星期执行,取值范围没有限制。
当 TYPE=3 时,表示每几个月中的某一天执行,取值范围没有限制。
当 TYPE=4 时,表示每几个月的第一周执行,取值范围没有限制。
当 TYPE=5 时,表示每几个月的第二周执行,取值范围没有限制。
当 TYPE=6 时,表示每几个月的第三周执行,取值范围没有限制。
当 TYPE=7 时,表示每几个月的第四周执行,取值范围没有限制。
当 TYPE=8 时,表示每几个月的最后一周执行,取值范围没有限制。
FREQ_SUB_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,分别表示从周一到周日。
5.查看、清除作业日志记录
通过查看表 SYSJOBS,可以看到所有已经创建的作业。每一个作业对应此表中的一条记录。每一条记录都有一个自增 ID,用来唯一表示这个作业。同时这个作业还具有一个聚集关键字 NAME,这意味着作业不可以同名。
因为日志记录会不断增加,越来越庞大,所以用户需要及时清理过时的日志。可以通过系统过程 SP_JOB_CLEAR_HISTORIES 清除迄今为止某个作业的所有日志记录,即删除表SYSJOBHISTORIES2、SYSSTEPHISTORIES2 中的相关记录。如果该作业还在继续工作,那么后续会在表 SYSJOBHISTORIES2、SYSSTEPHISTORIES2 中产生该作业的新日志。
删除作业:
SP_JOB_CLEAR_HISTORIES ( JOB_NAME VARCHAR(128) )
五、警报
达梦数据库还提供了警报的功能,允许用户定义一些自己想要捕获的动作,如果这些动作发生时,系统就会将对应信息存储到指定的表中,将想要得到的信息存储起来,以便做到实时的监控。
SYSALERTS 存储作业管理系统中所有已定义的警报信息,聚集索引为NAME,意味着不能定义同名的警报。
1.创建警报:
SP_CREATE_ALERT (
NAME VARCHAR(128),
ENABLED INT,
TYPE INT,
ERRTYPE INT,
ERRCODE INT,
DELAYTIME INT,
DESCRIBE VARCHAR(8187)
)
TYPE
警报的类型。取值 0 或 1。0 表示发生错误时警报;1 表示发生某些数据库事件时警报。
ERRTYPE
触发警报的错误和数据库事件。与参数 TYPE 相关。
当 TYPE=0 时,ERRTYPE 表示触发警报的错误类型。取值 1~12。具体含义分别为:1 常规错误;2 启动错误;3 系统错误;4 服务器配置错误;5 分析阶段错误;6 权限错误;7 运行时错误;8 备份恢复错误;9 作业管理错误;10数据库复制错误;11 其它错误;12 指定错误码。
当 TYPE=1 时,ERRTYPE 表示触发警报的数据库事件。取值 1~4。具体含义分别为:1 DDL 事件;2 授权回收事件;3 连接或断开数据库事件;4 数据库备份恢复事件。
ERRCODE
指定错误码。错误码取值和参数 TYPE、ERRTYPE 相关。
当 TYPE=0、ERRTYPE 取 1~12 时,指定各种错误类型相关的错误码,ERRCODE 必须是小于 0 的整数。
当 TYPE=1、ERRTYPE=1 时,指定 DDL 事件的错误码,ERRCODE 取值 1~15。如何取值,请参考如下规则:因为 DDL 事件包含 CREATE、ALTER、DROP 和 TRUNC 四种,所以此处的错误码是四种当中的任意几个组合值。ERRCODE 在 DM 数据库系统内部用四位二进制来表示它们的组合,从低位到
高位依次是:CREATE、ALTER、DROP、TRUNCATE。1 表示指定,0 表示不指定。用户输入的 ERRCODE 值需要转化为十进制。例如,指定 CREATE 和DROP,内部二进制表示为 0101,转化为十进制为 5,所以 ERRCODE 值就是5。
当 TYPE=1、ERRTYPE=2 时,指定授权回收事件的错误码,ERRCODE 取值 1、2、3。1 表示 GRANT 的错误码;2 表示 REVOKE 的错误码;3 表示GRANT 和 REVOKE 的错误码。
当 TYPE=1、ERRTYPE=3 时,指定连接事件的错误码,取值 1、2、3。1 表示 LOGIN 的错误码;2 表示 LOGOUT 的错误码;3 表示 LOGIN 和 LOGOUT的错误码。
当 TYPE=1、ERRTYPE=4 时,指定数据库备份恢复事件的错误码,取值 1、
2、3。1 表示 BACKUP 的错误码;2 表示 RESTORE 的错误码;3 表示
BACKUP 和 RESTORE 的错误码。
DELAYTIME
表示警报发生后,推迟多长时间通知操作员。范围 0~3600,单位秒。
修改警报:
SP_ ALTER _ALERT ();
参数和创建警报相同
删除警报:
SP_DROP_ALERT ( NAME VARCHAR(128) );
2.为警报关联操作员
如果想要将警报的执行结果通知给指定操作员,创建警报之后,还需要为警
报关联操作员。
SYSALERTNOTIFICATIONS (notifications:通知)存储警报需要通知的操作员的信息,即警报和操作员的关联信息。以 ALERTNAME 和 OPERID 为聚集关键字的,所以对于一个指定的警报和指定的操作员,它们只能有一个关联关系。
SP_ALERT_ADD_OPERATOR (
ALERTNAME VARCHAR(128),
OPR_NAME VARCHAR(128),
ENABLEMAIL INT,
ENABLENETSENT INT)
取消关联:
SP_ALERT_DROP_OPERATOR (
ALERTNAME VARCHAR(128),
OPR_NAME VARCHAR(128)
)
清楚警告日志:
清除迄今为止某个警报的所有日志记录,即删除表 SYSALERTHISTORIES中的相关记录。可以通过系统过程 SP_ALERT_DROP_HISTORIES 来实现。
SP_ALERT_DROP_HISTORIES ( ALERTNAME VARCHAR(128) )
六、监控作业
监控作业是指把作业的运行情况通过电子邮件发送给作业操作员。邮件成功发送的前提
有两个:一是为监控服务配置管理员;二是开启监控服务。
SYSMAILINFO 存储作业管理系统管理员的信息。每一个作业管理系统管理员对应这个表中的一条记录
1.添加监控服务管理员
SP_ADD_MAIL_INFO (
LOGIN_NAME VARCHAR(128),
LOGIN_PWD VARCHAR(128),
SMTP_SERVER VARCHAR(128),
EMAIL VARCHAR(128),
USER_NAME VARCHAR(128),
USER_PWD VARCHAR(128)
)
EMAIL:
邮件地址,用户的电子邮件地址,使用该用户去 SMTP 服务器认证。
USER_NAME:
邮件用户名(和邮件地址写法要完全一样)
例如:
SP_ADD_MAIL_INFO(‘SYSDBA’,‘SYSDBA’,‘192.168.0.212’,‘gyf@dameng.shanghai’,‘gyf@dameng.shanghai’,‘******’);
修改管理员:
SP_ALTER_MAIL_INFO ();参数和创建管理员一样
删除管理员:
SP_DROP_MAIL_INFO ( LOGIN_NAME VARCHAR(128) );
2.开启监控服务
dmjmon 是启动作业监控服务的命令行工具。进入 DM 安装目录下的 bin目录,直接打开应用程序 dmjmon 就可以启动监控服务:
dmjmon userid=[/][@][:]
[#@ssl_pwd]
:
指定服务器的 IP 地址或是在 dm_svc.conf 中配置的网络服务名。
@ssl_pwd:
通信加密中客户端证书存放的地址和客户端证书密钥。各用户只能使用自己的证书,例如 SYSDBA 账户只能使用\bin\CLIENT_SSL\SYSDBA 下的证书和密码,如果证书没有密码可以用缺省或任意数字代替。
例如:
./dmjmon userid=SYSDBA/SYSDBA@192.168.42.129:5236
社区地址:https://eco.dameng.com