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';

其中常用到的表有 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

posted @ 2024-01-19 14:03  灬夜露沁心灬  阅读(164)  评论(0编辑  收藏  举报