本文基于虚拟机 DSC 集群环境,完整记录达梦(DM)数据库备份作业(Job)的配置全过程,涵盖:备份策略设计、前置参数优化、全量/增量备份作业创建、备份命令参数解码、测试验证与常见问题。所有路径与时间均为示例值,请按实际环境调整。
数据库备份最怕两件事:数据丢了没备份,和备份一直堆着把磁盘写满。单靠一种备份策略很难兼顾"安全"与"空间":
| 策略 | 优点 | 缺点 |
|---|---|---|
| 只做全量 | 恢复简单、单文件完整 | 耗时长、占用空间大、每日执行成本高 |
| 只做增量 | 速度快、占用小 | 依赖基础备份,恢复链条长、有级联失败风险 |
| 全量 + 增量 | 空间可控、每日有备 | 需要配套的过期清理机制 |
因此本文采用业界标准的**「周全量 + 日增量 + 过期自动清理」**组合方案:
| 备份类型 | 作业名称 | 执行时间 | 周期 | 说明 |
|---|---|---|---|---|
| 全量备份 | DM_FULL_DEL_BAK |
23:00:00 | 每周六 | 全量备份,并删除 30 天前的过期备份 |
| 增量备份 | DM_INC_BAK |
23:00:00 | 每周日 ~ 周五 | 差异增量备份(周六除外) |
/dmdsc/dmbak⚠️ 本文档中的路径
/dmdsc/dmbak、执行时刻23:00:00、保留天数30均为示例值,生产环境务必根据实际规划调整。
在创建作业之前,需要先完成参数优化、备份还原配置和作业环境初始化。
以 SYSDBA 登录数据库执行。这两个参数为动态参数,执行后立即生效。
-- 备份超时设为 300 秒(避免大备份被超时中断)
SP_SET_PARA_VALUE(1, 'BAK_TIMEOUT', 300);
-- 开启备份还原配置功能
SP_SET_PARA_VALUE(1, 'ENABLE_BRCFG', 1);
⚠️ DSC 集群注意事项:以上参数需要在集群所有节点上分别执行,仅在一个节点配置不生效。
通过 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 能力确定。
-- 初始化作业系统(首次使用前必须执行一次)
SP_INIT_JOB_SYS(1);
💡
SP_INIT_JOB_SYS(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':调度起始日期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 恰好互补,实现了"周六全量、其余天增量"的完美衔接。
当作业步骤 type = 6(备份还原)时,命令字符串由 9 个部分组成:
[备份模式][压缩类型][日志类型][并行数][USE PWR][MAXPIECESIZE][RESV1][RESV2][备份路径]
| 位次 | 含义 | 取值说明 |
|---|---|---|
| 第 1 位 | 备份模式 | 0=完全备份;1=差异增量;3=归档;4=累积增量 |
| 第 2 位 | 是否压缩 | 0~9,0 不压缩,1~9 为压缩级别 |
| 第 3 位 | 是否备份日志 | 0=备份;1=不备份 |
| 第 4 位 | 并行数 | 0~9,0 不并行,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 |
⚠️ 增量备份的路径写法是
基础备份路径|备份路径,竖线左右顺序不能颠倒,这是最容易写错的地方。
作业配置完成后,务必走一遍完整的验证流程。
-- 查询作业(含作业 ID)
select * from sysjob.SYSJOBS;
-- 查看每个作业的步骤
SELECT * FROM SYSJOB.SYSJOBSTEPS;
-- 查看每个作业的调度
SELECT * FROM SYSJOB.SYSJOBSCHEDULES;
使用上一步查到的真实作业 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.
进入备份目录确认备份集是否生成成功:
cd /dmdsc/dmbak
ls -lrt
# 输出示例:
# drwxr-xr-x ... DB_DSC_FULL_2026_08_13_17_37_26
💡 备份目录下会生成形如
DB_DSC_FULL_日期_时间的目录,全量与增量可通过名称前缀区分。
select jobid, exec_id, name, stepname, start_time, end_time, errcode, errinfo
sysjob.sysstephistories2
order by start_time desc;
💡
sysstephistories2记录了每一步的起止时间与错误码,是排查作业失败的第一现场。
/dmdsc/dmbak 为示例路径,必须根据实际环境修改;同时确认目录存在且有 dmdba 的写权限。23:00:00 为示例执行时刻,建议避开业务高峰期与全量备份重叠时段。SP_SET_PARA_VALUE)需在 DSC 集群所有节点执行。SP_DB_BAKSET_REMOVE_BATCH 中的 SYSDATE - 30 控制,可按备份空间规划调整。SP_DBMS_JOB_RUN 的参数必须使用 SYSJOBS 表中查询到的真实作业 ID,不能写死示例值。sysstephistories2 确认无 errcode 异常。本文通过一个完整的 DSC 集群案例,展示了达梦数据库备份 Job 的标准配置流程:
优化参数(SP_SET_PARA_VALUE)
↓
配置备份还原(backup configure)
↓
初始化作业环境(SP_INIT_JOB_SYS)
↓
创建全量作业(周六) + 增量作业(周日~周五)
↓
位掩码调度(64 / 63 互补)
↓
9 位命令串解码(模式/压缩/日志/并行/路径)
↓
测试验证(手动执行 + 查文件 + 查日志)
核心要点可归纳为三句话:
周全量 + 日增量 + 30 天过期清理,安全与空间兼得;基础路径|备份路径 指定依赖;SP_DBMS_JOB_RUN 手动触发 + 备份目录确认 + sysstephistories2 日志兜底,三步缺一不可。掌握这套流程后,无论单机还是 DSC 集群,备份作业的搭建与排障都能快速上手。
文章
阅读量
获赞
