达梦数据库实战:备份恢复与数据迁移全攻略(实例初始化、服务注册、路径迁移)

达梦数据库实战:备份恢复与数据迁移全攻略(实例初始化、服务注册、路径迁移)

在达梦数据库(DM8)的生产运维中,备份恢复 是数据安全的最后一道防线,数据迁移是实例扩容、路径调整的核心操作。本文结合实战场景,从零开始讲解达梦数据库实例初始化、服务注册、归档开启、全量 / 增量 / 指定 LSN 备份恢复,以及实例路径迁移的完整流程,覆盖大小写不敏感、UTF-8 字符集等生产常用配置。

一、环境前置说明

本文基于DM8 数据库,操作系统为 Linux,所有操作均使用数据库安装用户(dmdba)和 root 用户执行,核心路径约定:

  • 数据库安装目录:/dm/dmdbms
  • 数据实例初始路径:/dm/data
  • 备份文件路径:/dm/backup
  • 归档日志路径:/dm/backup/dmarch

二、初始化达梦数据库实例

生产环境中,实例初始化需严格指定字符集、大小写敏感、页大小、日志大小 等参数,本文初始化一个大小写不敏感、UTF-8 字符集的生产级实例。

1. 初始化命令(dminit 工具)

切换到数据库安装用户(dmdba),执行以下命令:

bash 复制代码
# 进入达梦bin目录
cd /dm/dmdbms/bin

# 初始化实例:大小写不敏感、UTF-8字符集、端口5236
./dminit \
PATH=/dm/data \          # 实例存放根路径
DB_NAME=EXAMDB2 \        # 数据库名
INSTANCE_NAME=EXAMSVR \  # 实例名
PORT_NUM=5236 \          # 数据库端口
SYSDBA_PWD=Dameng123 \   # SYSDBA密码
SYSAUDITOR_PWD=Dameng123 \ # 审计用户密码
PAGE_SIZE=16 \           # 页大小(16K,生产推荐)
EXTENT_SIZE=32 \         # 簇大小(32页)
CHARSET=0 \              # 字符集:0=UTF-8
CASE_SENSITIVE=0 \       # 大小写不敏感(0=不敏感,1=敏感)
LOG_SIZE=256             # 日志文件大小(256M)

2. 关键参数解释

  • CHARSET=0:指定数据库字符集为 UTF-8,兼容中文及特殊字符;
  • CASE_SENSITIVE=0:大小写不敏感,符合 MySQL/Oracle 迁移后的使用习惯;
  • PAGE_SIZE=16:生产环境推荐 16K/32K,提升大数据量读写性能。

三、开启数据库归档(必做!)

达梦数据库在线备份必须开启归档模式,否则无法执行热备份,通过 SQL 语句开启:

sql 复制代码
-- 切换到MOUNT状态
ALTER DATABASE MOUNT;
-- 开启归档模式
ALTER DATABASE ARCHIVELOG;
-- 添加归档日志配置:路径、类型、单文件大小、空间限制
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm/backup/dmarch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=10240';
-- 切换到OPEN状态
ALTER DATABASE OPEN;

四、达梦数据库备份实战

达梦支持全量备份、增量备份、指定 LSN 备份,覆盖不同数据恢复场景,本文逐一演示。

1. 全量备份(基础备份)

全量备份是所有备份的基础,包含数据库所有数据文件,在线执行即可:

sql 复制代码
-- 登录数据库后执行全量备份:压缩级别5、4线程并行
backup database full 
to "DB_EXAMDB_FULL_2026_06_10_13_24_41" 
backupset '/dm/backup/dmbak' 
device type disk 
compressed level 5 
task thread 4;
  • compressed level 5:压缩级别(1-9,级别越高压缩比越高,耗时越长);
  • task thread 4:并行线程数,提升备份速度;
  • backupset:备份集存放路径。

备份完成后,查询备份历史:

sql 复制代码
select * from SYS.V$BACKUP_HISTORY;

2. 增量备份(基于全量)

增量备份仅备份自上一次全量 / 增量备份后变化的数据,节省空间和时间,必须基于全量备份执行

步骤 1:模拟数据变化(删除表 / 插入数据)
sql 复制代码
-- 示例:删除测试表(模拟数据变更)
DROP TABLE TEST_TABLE;
步骤 2:执行增量备份
sql 复制代码
-- 增量备份:基于之前的全量备份集
backup database increment 
base on backupset '/dm/backup/dmbak' 
to "DB_EXAMDB_INCRE_2026_06_10_13_42_35" 
backupset '/dm/backup/dmbak/DB_EXAMDB_INCRE_2026_06_10_13_42_35' 
compressed level 5 
parallel 8;

3. 指定 LSN 备份(主备库异常同步场景)

适用场景:主备库数据不同步、日志断层,无法通过常规全量 + 增量恢复时,使用指定 LSN 备份快速修复,无需全量备份。

步骤 1:备库查询当前 LSN
sql 复制代码
-- 备库执行,获取需要恢复的起始LSN
SELECT N_EP, APPLY_LSN_ARR FROM V$RAPPLY_LSN_INFO;
步骤 2:主库基于 LSN 执行增量备份
bash 复制代码
-- 替换为实际查询到的LSN号
BACKUP DATABASE INCREMENT FROM LSN 41461 BACKUPSET 'bak_inc_lsn';

五、达梦数据库恢复实战

备份的核心价值是恢复,达梦恢复需使用dmrman 工具,分全量恢复、增量恢复、指定 LSN 恢复。

1. 全量恢复

bash 复制代码
# 进入达梦bin目录,启动dmrman
cd /dm/dmdbms/bin
./dmrman
bash 复制代码
-- 1. 还原数据文件
RESTORE DATABASE '/dm/data/EXAMDB2/dm.ini' FROM BACKUPSET '/dm/backup/dmbak';  
-- 2. 恢复数据(应用日志)
RECOVER DATABASE '/dm/data/EXAMDB2/dm.ini' FROM BACKUPSET '/dm/backup/dmbak';
-- 3. 更新数据库魔法值(必须执行,否则无法启动)
RECOVER DATABASE '/dm/data/EXAMDB2/dm.ini' UPDATE DB_MAGIC;

2. 增量恢复

增量恢复必须先恢复全量备份,再恢复增量备份,本文直接基于增量备份集执行:

bash 复制代码
./dmrman
sql 复制代码
-- 还原增量备份
RESTORE DATABASE '/dm/data/EXAMDB2/dm.ini' FROM BACKUPSET '/dm/backup/dmbak/DB_EXAMDB_INCRE_2026_06_10_13_42_35';  
-- 恢复增量数据
RECOVER DATABASE '/dm/data/EXAMDB2/dm.ini' FROM BACKUPSET '/dm/backup/dmbak/DB_EXAMDB_INCRE_2026_06_10_13_42_35';
-- 更新DB_MAGIC
RECOVER DATABASE '/dm/data/EXAMDB2/dm.ini' UPDATE DB_MAGIC;

3. 指定 LSN 备份恢复(主备库修复)

sql 复制代码
--在备库查lsn
SELECT N_EP, APPLY_LSN_ARR FROM V$RAPPLY_LSN_INFO;

BACKUP DATABASE INCREMENT FROM LSN 41461 BACKUPSET 'bak_inc_lsn';  
bash 复制代码
./dmrman
sql 复制代码
-- 合并备份集
MERGE DATABASE '/opt/dmdbms/db_standby/dm.ini' FROM BACKUPSET '/opt/dmdbms/bak/bak_inc_lsn';
-- 恢复数据
RECOVER DATABASE '/opt/dmdbms/db_standby/dm.ini' FROM BACKUPSET '/opt/dmdbms/bak/bak_inc_lsn';
-- 更新DB_MAGIC
RECOVER DATABASE '/opt/dmdbms/db_standby/dm.ini' UPDATE DB_MAGIC;

恢复完成后,启动数据库服务验证数据:

bash 复制代码
systemctl start DmServiceDAMENG2

六、数据库实例路径迁移(修改存放位置)

生产中常需迁移实例路径(如磁盘扩容、目录调整),核心步骤:复制实例目录→修改配置文件→修改控制文件→更新服务

1. 复制实例目录到新路径

假设原路径:/dm/data/EXAMDB2,新路径:/new/data/EXAMDB2

bash 复制代码
# 整体复制实例目录
cp -r /dm/data/EXAMDB2 /new/data/

2. 修改 dm.ini 配置文件

替换 dm.ini 中所有旧路径为新路径:

bash 复制代码
sed -i "s#/dm/data/EXAMDB2#/new/data/EXAMDB2#g" /new/data/EXAMDB2/dm.ini

3. 修改控制文件(核心步骤,不可直接编辑)

控制文件(dm.ctl)是二进制文件,需用dmctlcvt工具转换修改:

bash 复制代码
cd /dm/dmdbms/bin

# 1. 二进制控制文件转文本文件
./dmctlcvt TYPE=1 SRC=/new/data/EXAMDB2/dm.ctl DEST=/new/data/EXAMDB2/dmctl.txt

# 2. 替换文本文件中的旧路径
sed -i "s#/dm/data/EXAMDB2#/new/data/EXAMDB2#g" /new/data/EXAMDB2/dmctl.txt

# 3. 文本文件转回二进制控制文件
./dmctlcvt TYPE=2 SRC=/new/data/EXAMDB2/dmctl.txt DEST=/new/data/EXAMDB2/dm.ctl

4. 修改关联配置文件

  • 归档配置:修改dmarch.ini中的ARCH_DEST路径;
  • 日志配置:修改sqllog.ini中的FILE_PATH路径;
  • 备份脚本:更新定时备份中的实例路径。

5. 更新系统服务并启动

bash 复制代码
# 先注销旧服务(root用户)
cd /dm/dmdbms/script/root/
./dm_service_uninstaller.sh -n DmServiceDAMENG2

# 重新注册新路径的服务
./dm_service_installer.sh -t dmserver -p DAMENG2 -dm_ini /new/data/EXAMDB2/dm.ini

# 启动新服务
systemctl start DmServiceDAMENG2

七、核心注意事项

  1. 在线备份必须开启归档,否则备份无效;
  2. 恢复操作必须关闭数据库服务,避免文件占用;
  3. 恢复最后一步UPDATE DB_MAGIC是必执行语句,否则数据库无法启动;
  4. 指定 LSN 备份仅用于主备库不同步的应急场景,常规恢复优先全量 + 增量;
  5. 实例路径迁移时,控制文件必须用官方工具修改,禁止手动编辑二进制文件。
相关推荐
SelectDB技术团队1 小时前
2026 SelectDB AI 产品发布会:Agent Native 数据基础设施能力全景发布
数据库·人工智能·agent·apache doris·selectdb
爱吃羊的老虎1 小时前
【数据库】模块一:数据库基础与关系代数
数据库
dishugj2 小时前
iSCSI + Multipath + ASM:Oracle RAC 共享存储技术链详解
数据库·oracle
yoothey2 小时前
MySQL事务机制解析 - 面试高分知识点
数据库·mysql·面试
Lkstar3 小时前
万字长文Query改写与多路召回实战|从HyDE到RRF融合,召回率提升22%的完整方案
数据库·人工智能·llm
IT新视界3 小时前
星环科技ArgoDB:基于一体化架构构建数据全生命周期安全底座
数据库·科技·安全·架构
峥无3 小时前
MySQL DML 操作(CRUD)总结
数据库·mysql
A_humble_scholar3 小时前
Linux(九) 进程管理完全指南:从入门到实战
linux·运维·chrome
数据库小学妹4 小时前
SQL Server数据库同步工具怎么选?6款方案对比+信创迁移避坑清单
数据库·经验分享·sqlserver·dba