注册
达梦 DM8 备份恢复:原理、实操、故障恢复全指南
技术分享/ 文章详情 /

达梦 DM8 备份恢复:原理、实操、故障恢复全指南

肖庚 2026/08/14 111 0 0

前言

数据是业务核心资产,硬件损坏、误删表、逻辑故障、勒索病毒等场景都会造成数据丢失,备份 + 归档 + 恢复是达梦数据库保障数据安全的核心解决方案。本文完整梳理 DM8 物理备份、逻辑备份底层原理、常用操作、归档配置、集群备份方案与避坑要点,覆盖运维日常绝大多数场景。

一、核心基础概念:先搞懂备份、还原、恢复三者区别

很多运维容易混淆三个名词,三者流程不可逆、作用完全不同:

  1. 备份:对数据库有效数据、归档日志做完整拷贝,生成备份集,用于故障后恢复。分为物理备份(拷贝数据文件)、逻辑备份(导出对象 SQL / 数据)。
  2. 还原:将备份集内的数据页覆盖写入目标库数据文件。还原后的数据库处于非一致性状态,无法直接启动。
  3. 恢复:重做 REDO 归档日志,把数据库推进到一致状态,恢复完成更新 DB_MAGIC 后才能正常对外提供服务。

关键底层:LSN 日志序列号(备份恢复核心标识)

LSN 是全局自增唯一编号,每一次数据页修改、事务提交都会生成对应 LSN,4 个核心 LSN 决定备份日志范围:

  1. CUR_LSN:最新事务提交产生的日志序列号
  2. FILE_LSN:已写入联机 REDO 日志的最大 LSN
  3. FLUSH_LSN:发起刷盘但未落地的日志 LSN
  4. CKPT_LSN:检查点 LSN,≤该 LSN 的数据页已落盘磁盘

备份日志区间规则

  • START_LSN = CKPT_LSN + 1(备份起始日志)
  • END_LSN = FILE_LSN(备份结束日志)
  • 完全备份:拷贝 CKPT_LSN 之前所有数据页 + 区间内 REDO 日志
  • 增量备份:仅拷贝上一次基备份后发生变更的数据页,节省空间

配套核心日志组件

  1. REDO 联机日志:默认DAMENG01.log、DAMENG02.log,记录所有 DML/DDL 物理页修改,故障重启靠它回滚未提交、重做已提交事务。
  2. 归档日志(LOCAL/REMOTE)
    联机日志写满后自动拷贝生成归档文件,开启归档可恢复到任意时间点 / 指定 LSN,缺点是小幅损耗性能。
    • 本地归档:单机通用,归档存在本机磁盘
    • 远程归档:仅 DMDSC 集群使用,日志同步到其他节点
  3. PWR 日志:记录数据页刷盘记录,故障重启跳过已落盘页面,大幅缩短恢复耗时。
  4. UNDO 回滚日志:存储修改前旧数据,用于事务回滚、MVCC 多版本;UNDO_RETENTION控制旧数据保留时长。

检查点 Checkpoint
自动 / 手动触发,按修改顺序将内存脏页刷入磁盘,同步更新CKPT_LSN、释放联机日志可复用空间;日志切换、手动CHECKPOINT(10)都会触发,括号代表刷写 10% 脏数据。

二、备份两大分类:物理备份 vs 逻辑备份

直接拷贝数据库底层数据文件、日志文件,速度快、支持增量,适合整库损坏、磁盘故障恢复。

1. 四种划分维度

  • 运行状态
    联机热备份(Disql/Manager):数据库 OPEN 运行,库 / 表空间热备必须开启归档
    脱机冷备份(DMRMAN):数据库完全关闭,无需归档
  • 备份粒度
    全库备份、表空间备份、归档备份、单表备份(单表无增量,无需归档)
  • 完整性
    完全备份(0 级基备份)、增量备份(累积 / 差异,依赖全量基备份)
  • 数据一致性
    一致性备份(脱机,数据天然一致)、非一致性备份(联机,必须靠归档恢复)

2. 备份集组成
DMAP 进程独立承担 IO、压缩、加密,不占用 dmserver 资源:

  • .bak备份片:存储实际数据、归档日志
  • .meta元数据:记录库参数、文件信息、加密压缩配置、LSN 范围
  • 并行备份会生成主备份集 + 多个子备份集,单个数据文件仅分配一个并行线程

3. 加密与压缩规则

  1. 压缩:1~9 级,数字越高压缩率越高、速度越慢,默认 1 级;备份先压缩,还原先解密再解压
  2. 加密:支持简单加密 / 完全加密、RC4/AES256 算法;增量备份加密密码、算法必须和基备份完全一致
  3. 并行:PARALLEL指定并发数,0/1 代表串行,默认 4;支持库、表空间、归档并行备份

4. 工具区分

  1. Disql/Manager:联机热备份(OPEN 状态),支持库、表空间、单表、归档
  2. DMRMAN:脱机冷备份、整库还原恢复,处理数据库无法启动故障
  3. DMAP 辅助进程:备份 2.0 核心,分离 IO 压力,第三方磁带备份依赖该进程

(二)逻辑备份(dexp/dimp,迁移、误删表专用)
导出表、视图、存储过程等逻辑对象,生成.dmp文件,不依赖底层数据文件,适合:跨库迁移、单表误删恢复、版本升级迁移,不支持增量。

dexp 导出双层并行优化

  • PARALLEL:多表并发导出
  • TABLE_PARALLEL:单张大表分片多线程读取,MPP 集群失效
  • TABLE_POOL:读写内存缓冲队列,建议大于表并行数

dimp 导入高速装载 FAST_LOAD

  • FAST_LOAD=Y:绕过 SQL 层直接批量写入,速度提升数倍,配套- TABLE_PARALLEL生效
    注意事项:LOB 大字段、触发器、自增有序场景建议关闭快速装载,避免数据错乱;新增空库可放心开启

三、高频实操 SQL:日常备份命令合集

  1. 联机全库完全备份
BACKUP DATABASE FULL BACKUPSET '/dm_bak/full_20260810'
COMPRESSED LEVEL 5 PARALLEL 8 WITHOUT LOG;
-- 加密备份示例
BACKUP DATABASE BACKUPSET '/dm_bak/full_enc'
IDENTIFIED BY "Admin@123" WITH ENCRYPTION 2 ENCRYPT WITH AES256_CFB;

  1. 增量备份(基于全量基备份)
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dm_bak'
BACKUPSET '/dm_bak/inc_01' PARALLEL 4;

  1. 表空间备份(单表空间损坏修复)
BACKUP TABLESPACE MAIN BACKUPSET '/dm_bak/ts_main';

  1. 单表备份(误删表恢复,无需归档)
BACKUP TABLE USER.TAB_BACKUP BACKUPSET '/dm_bak/tab_tab01';

  1. 归档备份(归档文件损坏恢复)
BACKUP ARCHIVE LOG ALL BACKUPSET '/dm_bak/arch_all';
-- 指定LSN区间备份归档
BACKUP ARCHIVELOG LSN BETWEEN 10000 AND 20000 BACKUPSET '/dm_bak/arch_lsn';

  1. DDL_CLONE 结构备份(仅导出库定义,不含业务数据)
BACKUP DATABASE FULL DDL_CLONE BACKUPSET '/dm_bak/ddl_only';

四、还原恢复完整流程(分场景)

场景 1:单表误删

-- 1. 校验备份集合法性
SELECT SF_BAKSET_CHECK('DISK','/dm_bak/tab_tab01');
-- 2. 先还原表结构(避免索引冲突)
RESTORE TABLE USER.TAB_BACKUP STRUCT FROM BACKUPSET '/dm_bak/tab_tab01';
-- 3. 还原表数据
RESTORE TABLE USER.TAB_BACKUP FROM BACKUPSET '/dm_bak/tab_tab01';

场景 2:整库磁盘损坏(DMRMAN 脱机完整流程)

# 1. 校验备份
CHECK BACKUPSET '/dm_bak/full_20260810';
# 2. 还原数据文件
RESTORE DATABASE /dmdata/dm.ini FROM BACKUPSET '/dm_bak/full_20260810';
# 方案A:恢复到备份完成时刻(使用备份内置日志)
RECOVER DATABASE /dmdata/dm.ini FROM BACKUPSET '/dm_bak/full_20260810';
# 方案B:恢复到故障前最新状态/指定时间点(本地归档)
RECOVER DATABASE /dmdata/dm.ini WITH ARCHIVEDIR '/dm_arch' UNTIL TIME '2026-08-10 14:00:00';
# 收尾:更新数据库魔数,完成恢复
RECOVER DATABASE /dmdata/dm.ini UPDATE DB_MAGIC;

场景 3:DMDSC 集群备份恢复

1. 集群联机备份(任意节点执行)
BACKUP DATABASE BACKUPSET /dm_bak/dsc_full;
2. 集群脱机恢复(指定 dcr 集群配置文件)
RESTORE DATABASE /rac01/dm.ini DCR_INI=/dmdata/dmdcr.ini FROM BACKUPSET '/dm_bak/dsc_full';
RECOVER DATABASE /rac01/dm.ini FROM BACKUPSET '/dm_bak/dsc_full';
RECOVER DATABASE /rac01/dm.ini UPDATE DB_MAGIC;

五、备份集管理:查询、校验、清理

常用系统函数 & 动态视图

  1. 校验备份完整性:SELECT SF_BAKSET_CHECK(‘DISK’,‘备份集路径’);
  2. 删除无效备份集:SF_BAKSET_REMOVE(‘DISK’,‘路径’);
  3. 查看备份信息:V$BACKUPSET、V$BACKUPSET_DBF、V$BACKUPSET_ARCH
  4. 添加备份扫描目录:SF_RMAN_ADD_BACKUP_DIR(‘备份目录’)

DMRMAN 备份管理

# 查看备份详情
SHOW BACKUPSET '/dm_bak/full_20260810';
# 批量清理30天前备份
REMOVE BACKUPSETS WITH BACKUPDIR '/dm_bak' UNTIL TIME '2026-07-10';

六、生产最佳实践 & 高频避坑

运维规范建议

  1. 备份策略:每周 1 次全量备份,每日增量备份,每月清理过期备份;归档永久保留至少 7 天。
  2. 存储规范:备份集、归档日志和数据库数据盘物理分离,防止磁盘同时损坏。
  3. 加密规范:核心业务库必须开启备份加密,密码专人保管。
  4. 定期演练:每月做一次恢复测试,避免备份损坏无法使用。
  5. 归档容量:配置SPACE_LIMIT自动清理,防止磁盘打满数据库挂起。

高频故障坑点

  1. 联机库 / 表空间热备报错:忘记开启归档模式,执行ALTER DATABASE ARCHIVELOG开启。
  2. 增量备份失败:找不到基备份,使用WITH BACKUPDIR指定全量备份目录。
  3. 还原后数据库无法启动:缺少 RECOVER 恢复步骤,必须重做归档更新 DB_MAGIC。
  4. 单表还原报索引冲突:先执行 STRUCT 结构还原,再导入数据。
  5. FAST_LOAD 导入乱序:自增、业务有序表关闭FLDR_ORDER=N。
  6. DMDSC 备份失败:集群联机备份需所有节点归档正常。
  7. 备份看不到 dmagent:确认 DmAPService 服务正常运行。

https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服