注册
达梦 DM8 数据库备份 Job 配置实战:全量 + 增量 + 自动清理
专栏/技术分享/ 文章详情 /

达梦 DM8 数据库备份 Job 配置实战:全量 + 增量 + 自动清理

DM_WJH 2026/08/21 259 0 0
摘要

本文基于虚拟机 DSC 集群环境,完整记录达梦(DM)数据库备份作业(Job)的配置全过程,涵盖:备份策略设计、前置参数优化、全量/增量备份作业创建、备份命令参数解码、测试验证与常见问题。所有路径与时间均为示例值,请按实际环境调整。


一、为什么需要"组合式"备份策略

数据库备份最怕两件事:数据丢了没备份,和备份一直堆着把磁盘写满。单靠一种备份策略很难兼顾"安全"与"空间":

策略 优点 缺点
只做全量 恢复简单、单文件完整 耗时长、占用空间大、每日执行成本高
只做增量 速度快、占用小 依赖基础备份,恢复链条长、有级联失败风险
全量 + 增量 空间可控、每日有备 需要配套的过期清理机制

因此本文采用业界标准的**「周全量 + 日增量 + 过期自动清理」**组合方案:

备份类型 作业名称 执行时间 周期 说明
全量备份 DM_FULL_DEL_BAK 23:00:00 每周六 全量备份,并删除 30 天前的过期备份
增量备份 DM_INC_BAK 23:00:00 每周日 ~ 周五 差异增量备份(周六除外)
  • 备份目录/dmdsc/dmbak
  • 备份保留:30 天

⚠️ 本文档中的路径 /dmdsc/dmbak、执行时刻 23:00:00、保留天数 30 均为示例值,生产环境务必根据实际规划调整。


二、前置准备:三步走

在创建作业之前,需要先完成参数优化、备份还原配置和作业环境初始化。

1. 优化备份参数

SYSDBA 登录数据库执行。这两个参数为动态参数,执行后立即生效。

-- 备份超时设为 300 秒(避免大备份被超时中断) SP_SET_PARA_VALUE(1, 'BAK_TIMEOUT', 300); -- 开启备份还原配置功能 SP_SET_PARA_VALUE(1, 'ENABLE_BRCFG', 1);

⚠️ DSC 集群注意事项:以上参数需要在集群所有节点上分别执行,仅在一个节点配置不生效。

2. 配置备份还原(backup configure)

通过 backup configure 命令配置备份线程数、并行度、打包大小与缓存池:

-- 备份线程数 backup configure task thread 16; -- 并行度 backup configure parallel 8; -- 打包大小(单位:M) backup configure package size 8; -- 缓存池大小(单位:M) backup configure pool size 2048;

合理配置并行度与线程数能显著提升大库备份速度,具体数值需结合 CPU 核数与磁盘 IO 能力确定。

3. 开启作业环境

-- 初始化作业系统(首次使用前必须执行一次) SP_INIT_JOB_SYS(1);

💡 SP_INIT_JOB_SYS(1) 用于初始化作业系统,重复执行不会重复创建,可放心执行。


三、配置备份作业

1. 全量备份 + 过期删除作业(DM_FULL_DEL_BAK

每周六 23:00 执行全量备份,备份完成后自动删除 30 天前的过期备份:

-- 创建作业 call SP_CREATE_JOB('DM_FULL_DEL_BAK', 1, 0, '', 0, 0, '', 0, ''); -- 开始配置作业 call SP_JOB_CONFIG_START('DM_FULL_DEL_BAK'); -- 步骤1:完全备份 call SP_ADD_JOB_STEP('DM_FULL_DEL_BAK', 'FULL_BAK', 6, '01000000/dmdsc/dmbak', 3, 1, 0, 0, NULL, 0); -- 步骤2:删除 30 天前的过期备份 call SP_ADD_JOB_STEP('DM_FULL_DEL_BAK', 'DEL_BAK', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dmdsc/dmbak'');call SP_DB_BAKSET_REMOVE_BATCH(''DISK'', SYSDATE - 30);', 1, 1, 0, 0, NULL, 0); -- 调度:每周六 23:00 call SP_ADD_JOB_SCHEDULE('DM_FULL_DEL_BAK', 'FULL2', 1, 2, 1, 64, 0, '23:00:00', NULL, '2024-01-01 00:00:00', NULL, ''); -- 提交作业配置 call SP_JOB_CONFIG_COMMIT('DM_FULL_DEL_BAK');

作业步骤说明:

步骤名 类型 命令 说明
FULL_BAK 6(备份还原) 01000000/dmdsc/dmbak 完全备份:不压缩、备份日志、备份到指定路径
DEL_BAK 0(SQL 语句) SF_BAKSET_BACKUP_DIR_ADD + SP_DB_BAKSET_REMOVE_BATCH 注册备份目录,批量删除 30 天前的备份

调度参数解读:

  • freq_sub_interval = 64:位掩码方式表示"按周执行、周六触发"(64 = 2⁶,二进制第 6 位对应周六)
  • starttime = '23:00:00':每日执行时刻
  • during_start_date = '2024-01-01 00:00:00':调度起始日期

2. 增量备份作业(DM_INC_BAK

每周日 ~ 周五 23:00 执行差异增量备份(每周六不做,因为周六是全量日):

-- 创建作业 call SP_CREATE_JOB('DM_INC_BAK', 1, 0, '', 0, 0, '', 0, ''); -- 开始配置作业 call SP_JOB_CONFIG_START('DM_INC_BAK'); -- 步骤1:差异增量备份 call SP_ADD_JOB_STEP('DM_INC_BAK', 'INC1', 6, '11000000/dmdsc/dmbak|/dmdsc/dmbak', 1, 3, 0, 0, NULL, 0); -- 步骤2:完全备份兜底 call SP_ADD_JOB_STEP('DM_INC_BAK', 'FULL1', 6, '01000000/dmdsc/dmbak', 1, 1, 0, 0, NULL, 0); -- 调度:每周日 ~ 周五 23:00 call SP_ADD_JOB_SCHEDULE('DM_INC_BAK', 'INC2', 1, 2, 1, 63, 0, '23:00:00', NULL, '2024-01-01 00:00:00', NULL, ''); -- 提交作业配置 call SP_JOB_CONFIG_COMMIT('DM_INC_BAK');

作业步骤说明:

步骤名 类型 命令 说明
INC1 6(备份还原) 11000000/dmdsc/dmbak\|/dmdsc/dmbak 差异增量备份:基于指定基础备份路径做增量
FULL1 6(备份还原) 01000000/dmdsc/dmbak 完全备份兜底(增量备份失败时兜底执行)

调度参数解读:

  • freq_sub_interval = 63:63 = 1 + 2 + 4 + 8 + 16 + 32,二进制下第 0~5 位为 1,对应周日 ~ 周五触发,恰好排除周六(64)

💡 巧用位掩码freq_sub_interval 的每一位代表一周中的一天(周日=1、周一=2、…、周六=64)。两个作业的掩码 64 与 63 恰好互补,实现了"周六全量、其余天增量"的完美衔接。


四、备份命令 9 位字符串参数解码

当作业步骤 type = 6(备份还原)时,命令字符串由 9 个部分组成:

[备份模式][压缩类型][日志类型][并行数][USE PWR][MAXPIECESIZE][RESV1][RESV2][备份路径]
位次 含义 取值说明
第 1 位 备份模式 0=完全备份;1=差异增量;3=归档;4=累积增量
第 2 位 是否压缩 0~90 不压缩,1~9 为压缩级别
第 3 位 是否备份日志 0=备份;1=不备份
第 4 位 并行数 0~90 不并行,1 默认 4,2~9 为并行数
第 5 位 USE PWR 0=不使用;1=使用(仅语法支持)
第 6 位 MAXPIECESIZE 0=默认;1~9 对应 128M ~ 32G
第 7 位 是否删除归档 0=不删除;1=备份完成后删除归档文件
第 8 位 保留位 固定用 0 填充
第 9 位 备份路径 增量备份用 \| 分隔「基础备份路径|备份路径」;完全备份直接写路径

对照本文的两个命令串解码验证:

命令串 解码
01000000/dmdsc/dmbak 完全备份 + 不压缩 + 备份日志 + 不并行 → 备份到 /dmdsc/dmbak
11000000/dmdsc/dmbak\|/dmdsc/dmbak 差异增量 + 不压缩 + 备份日志 + 不并行 → 基于 /dmdsc/dmbak 的基础备份,备份到 /dmdsc/dmbak

⚠️ 增量备份的路径写法是 基础备份路径|备份路径竖线左右顺序不能颠倒,这是最容易写错的地方。


五、测试与验证

作业配置完成后,务必走一遍完整的验证流程。

1. 查询作业信息

-- 查询作业(含作业 ID) select * from sysjob.SYSJOBS; -- 查看每个作业的步骤 SELECT * FROM SYSJOB.SYSJOBSTEPS; -- 查看每个作业的调度 SELECT * FROM SYSJOB.SYSJOBSCHEDULES;

2. 手动执行测试

使用上一步查到的真实作业 ID 手动触发:

-- 测试全量备份作业 call SP_DBMS_JOB_RUN(<全量备份作业 ID>); -- 测试增量备份作业 call SP_DBMS_JOB_RUN(<增量备份作业 ID>);

真实执行结果示例(作业 ID 以实际查询为准):

SQL> call SP_DBMS_JOB_RUN(1786613339); DMSQL 过程已成功完成 已用时间: 00:00:04.920. 执行号:824. SQL> call SP_DBMS_JOB_RUN(1786613675); DMSQL 过程已成功完成 已用时间: 00:00:08.087. 执行号:825.

3. 确认备份文件生成

进入备份目录确认备份集是否生成成功:

cd /dmdsc/dmbak ls -lrt # 输出示例: # drwxr-xr-x ... DB_DSC_FULL_2026_08_13_17_37_26

💡 备份目录下会生成形如 DB_DSC_FULL_日期_时间 的目录,全量与增量可通过名称前缀区分。

4. 查看作业执行日志

select jobid, exec_id, name, stepname, start_time, end_time, errcode, errinfo sysjob.sysstephistories2 order by start_time desc;

💡 sysstephistories2 记录了每一步的起止时间与错误码,是排查作业失败的第一现场。


六、注意事项与最佳实践

  1. 备份路径:文中 /dmdsc/dmbak 为示例路径,必须根据实际环境修改;同时确认目录存在且有 dmdba 的写权限。
  2. 备份时间23:00:00 为示例执行时刻,建议避开业务高峰期与全量备份重叠时段。
  3. 多节点:参数优化(SP_SET_PARA_VALUE)需在 DSC 集群所有节点执行。
  4. 保留策略:当前保留 30 天,删除条件由 SP_DB_BAKSET_REMOVE_BATCH 中的 SYSDATE - 30 控制,可按备份空间规划调整。
  5. 作业 ID:测试时 SP_DBMS_JOB_RUN 的参数必须使用 SYSJOBS 表中查询到的真实作业 ID,不能写死示例值。
  6. 增量依赖:差异增量备份依赖最近一次全量备份,请确保全量作业长期正常运行,否则增量备份会失败。
  7. 监控巡检:建议将"备份结果巡检"纳入日常 DBA 检查清单,定期查看 sysstephistories2 确认无 errcode 异常。

七、总结

本文通过一个完整的 DSC 集群案例,展示了达梦数据库备份 Job 的标准配置流程:

优化参数(SP_SET_PARA_VALUE)
    ↓
配置备份还原(backup configure)
    ↓
初始化作业环境(SP_INIT_JOB_SYS)
    ↓
创建全量作业(周六) + 增量作业(周日~周五)
    ↓
位掩码调度(64 / 63 互补)
    ↓
9 位命令串解码(模式/压缩/日志/并行/路径)
    ↓
测试验证(手动执行 + 查文件 + 查日志)

核心要点可归纳为三句话

  • 策略上周全量 + 日增量 + 30 天过期清理,安全与空间兼得;
  • 配置上:调度用位掩码(周六=64、周日~周五=63)实现互补,增量命令串用 基础路径|备份路径 指定依赖;
  • 验证上SP_DBMS_JOB_RUN 手动触发 + 备份目录确认 + sysstephistories2 日志兜底,三步缺一不可。

掌握这套流程后,无论单机还是 DSC 集群,备份作业的搭建与排障都能快速上手。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服