达梦数据库(DM8)多版本定时全量增量备份策略配置详解
- [1 备份说明](#1 备份说明)
-
- [1.1 备份策略概述](#1.1 备份策略概述)
- [1.2 前置条件与准备](#1.2 前置条件与准备)
- [1.3 版本差异与脚本选择](#1.3 版本差异与脚本选择)
- [1.4 备份脚本详解](#1.4 备份脚本详解)
- [2 达梦数据库全方位指南:安装 优化 与实战教程](#2 达梦数据库全方位指南:安装 优化 与实战教程)
1 备份说明
本文档详细说明了达梦数据库(DM8)在不同版本下的定时备份策略配置。备份是数据库运维的核心工作,旨在保障数据安全与可恢复性。本策略主要包含开启归档 、配置备份代理环境 以及创建定时备份作业三个核心步骤,并针对不同DM8版本提供了相应的SQL脚本。
1.1 备份策略概述
我们的备份策略采用 全量备份 + 增量备份 的组合方式,以实现备份效率与存储空间的平衡:
- 全量备份:每周六凌晨执行,完整备份整个数据库。备份成功后,会自动清理14天前的历史备份集,以释放磁盘空间。
- 增量备份:每日晚上执行,仅备份自上次备份以来发生变化的数据块,备份速度快,占用空间小。
- 统计信息更新:每周六凌晨在全量备份后执行,用于更新数据库的统计信息,优化查询性能。
1.2 前置条件与准备
在执行备份脚本前,请确保满足以下条件:
- 环境确认 :使用
dmdba用户操作,并确保disql工具路径正确(通常为/data/dmdba/dmdbms/bin/disql)。 - 归档模式 :数据库必须处于归档模式。非归档模式下仅支持脱机备份,无法进行定时增量备份。下文【1 开归档】部分提供了开启归档的SQL命令。
- 备份目录 :确保备份目录(如
/data/dmdba/dmdata/DAMENG/bak)存在且dmdba用户有读写权限。 - 代理环境 :定时备份作业需要通过数据库代理(
SP_INIT_JOB_SYS)来调度。下文【2 开启代理环境】部分提供了初始化命令。
1.3 版本差异与脚本选择
达梦数据库在2023年之后的版本(如2025版)与早期版本(2022、2021年)在备份作业的存储过程接口上略有不同,主要体现在 SP_ADD_JOB_STEP 和 SP_ADD_JOB_STEP_EX 的使用上。
- 2025年及之后版本 :请使用
SP_ADD_JOB_STEP_EX存储过程创建作业步骤,其参数列表更丰富。 - 2023-2024年版本 :部分版本可能兼容
SP_ADD_JOB_STEP。 - 2022年及之前版本 :请使用
SP_ADD_JOB_STEP存储过程。
请根据您的实际数据库版本,选择下方对应的脚本块进行配置。
1.4 备份脚本详解
以下是各版本的核心备份SQL脚本。请务必在成功开启归档和代理环境后,再执行对应版本的作业创建脚本。
sql
登录数据库
su - dmdba
cd /data/dmdba/dmdbms/bin
./disql SYSDBA/'"Dameng@123"'
【1 开归档】
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/data/dmdba/dmdata/dmarch,TYPE=LOCAL,FILE_SIZE=2048,SPACE_LIMIT=102400';
ALTER DATABASE OPEN;
CHECKPOINT(100);
BACKUP DATABASE COMPRESSED;
【2 开启代理环境】
SP_INIT_JOB_SYS(1);
【3 备份】
2025年版本备份
--每周六 凌晨2点 全量备份,备份成功删除14天前备份,备份失败作业退出
call SP_CREATE_JOB('fullbak',1,0,'',0,0,'',0,'全量备份');
call SP_JOB_CONFIG_START('fullbak');
call SP_ADD_JOB_STEP_EX('fullbak', 'f1', 6, '01000000/data/dmdba/dmdata/DAMENG/bak', 3, 1, 0, 0, NULL, 0, '');
call SP_ADD_JOB_STEP_EX('fullbak', 's1', 0, 'CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'', NOW()-15)', 1, 1, 0, 0, NULL, 0, '');
CALL SP_JOB_STEP_SET_NEXT_STEP('fullbak', 'f1', 's1', NULL);
call SP_ADD_JOB_SCHEDULE('fullbak', 'd1', 1, 2, 1, 64, 0, '02:01:01', NULL, '2025-08-29 22:06:30', NULL, '');
call SP_JOB_CONFIG_COMMIT('fullbak');
call SP_JOB_SET_SCHEMA('fullbak', 'SYSDBA');
--每天22点进行增量备份
call SP_CREATE_JOB('crebak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('crebak');
call SP_ADD_JOB_STEP_EX('crebak', 'c1', 6, '10000000/data/dmdba/dmdata/DAMENG/bak|/data/dmdba/dmdata/DAMENG/bak', 1, 1, 0, 0, NULL, 0, '');
call SP_ADD_JOB_SCHEDULE('crebak', 'c2', 1, 2, 1, 127, 0, '22:01:01', NULL, '2025-08-29 22:06:30', NULL, '');
call SP_JOB_CONFIG_COMMIT('crebak');
call SP_JOB_SET_SCHEMA('crebak', 'SYSDBA');
--周六更新统计信息
call SP_CREATE_JOB('DB_STAT',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('DB_STAT');
call SP_ADD_JOB_STEP_EX('DB_STAT', 'DB_STAT', 3, '', 0, 0, 0, 0, NULL, 0, '');
call SP_ADD_JOB_SCHEDULE('DB_STAT', 'DB_STAT', 1, 2, 1, 64, 0, '04:32:06', NULL, '2025-07-24 16:32:06', NULL, '');
call SP_JOB_CONFIG_COMMIT('DB_STAT');
2023-2024年版本备份
--定时自动备份8.1-3-100-2023-12-26
--8.1-3-100-2023-12-26-05134284132-20231226-213242-20081
--每周六 凌晨2点 全量备份与删除备份
call SP_CREATE_JOB('fullbak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('fullbak');
call SP_ADD_JOB_STEP('fullbak', 'fullbak', 6, '01000000/data/dmdba/dmdata/DAMENG/bak', 3, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP('fullbak', 'delbak', 0, 'CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'', NOW()-15)', 0, 0, 0, 0, NULL, 0);
CALL SP_JOB_STEP_SET_NEXT_STEP('fullbak', 'fullbak', 'delbak', NULL);
call SP_ADD_JOB_SCHEDULE('fullbak', 'fullbak', 1, 2, 1, 64, 0, '02:01:53', NULL, '2025-09-16 10:58:53', NULL, '');
call SP_JOB_CONFIG_COMMIT('fullbak');
--每天 22点 增量备份
call SP_CREATE_JOB('addbak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('addbak');
call SP_ADD_JOB_STEP('addbak', 'addbak', 6, '11000000/data/dmdba/dmdata/DAMENG/bak|/data/dmdba/dmdata/DAMENG/bak', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('addbak', 'addbak', 1, 1, 1, 0, 0, '22:01:55', NULL, '2025-09-16 11:00:55', NULL, '');
call SP_JOB_CONFIG_COMMIT('addbak');
--2022年和2021年定时备份
--每周六全量备份,备份保留2周
call SP_CREATE_JOB('fullbak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('fullbak');
call SP_ADD_JOB_STEP('fullbak', 'f1', 6, '01000000/data/dmdba/dmdbms/data/DAMENG/bak', 3, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP('fullbak', 'f2', 0, 'CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'', NOW()-15)', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('fullbak', 'f3', 1, 2, 1, 64, 0, '01:00:00', NULL, '2025-12-26 10:20:20', NULL, '');
call SP_JOB_CONFIG_COMMIT('fullbak');
--每天增量备份
call SP_CREATE_JOB('crebak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('crebak');
call SP_ADD_JOB_STEP('crebak', 'c1', 6, '11000000/data/dmdba/dmdbms/data/DAMENG/bak|/data/dmdba/dmdbms/data/DAMENG/bak', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('crebak', 'c2', 1, 1, 1, 0, 0, '23:00:00', NULL, '2025-12-26 10:08:37', NULL, '');
call SP_JOB_CONFIG_COMMIT('crebak');