DBA学习之路

敬畏数据,谨慎对待每一个问题
随笔 - 44, 文章 - 0, 评论 - 0, 阅读 - 19364

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

DM8作业系统使用

Posted on   dclogs  阅读(26)  评论(0编辑  收藏  举报

转自:https://www.cnblogs.com/ariesblog/p/17974480

一、背景说明

在管理员的工作中,有许多日常工作都是固定不变的。例如,定期备份数据库,定期生成数据统计报表等等。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';

其中常用到的表有 SYSJOBSSYSJOBSCHEDULESSYSJOBHISTORIES2,分别用来查看用户定义的作业信息;作业的调度信息;作业执行情况的日志。

四、创建一个完整的作业

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

相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示