注册
DRMAN工具 数据库备份恢复
专栏/技术分享/ 文章详情 /

DRMAN工具 数据库备份恢复

BigQ 2026/07/17 234 0 0
摘要

DRMAN工具
数据库备份恢复

目录
一 DMRMAN 基础概述 1
1.1 LSN日志序列号 1
1.2 数据恢复restore与recover 2
1.3 DB_MAGIC 数据库魔数 3
二 数据库备份 3
2.1 完全备份 3
2.2 增量备份 3
2.3 归档备份 4
三 数据库恢复 5
3.1 恢复前置步骤 5
3.1.1 初始化目标数据库 5
3.1.2 校验备份集合法性 5
3.2 全备+增量恢复 5
3.3 全备+增量+归档恢复 6
四 备份集生命周期管理 9
4.1 查看备份集详细元数据 9
4.2 备份集合法性校验 9
4.3 备份集删除清理 10
五 DMRMAN 相关日志 10
5.1 核心日志文件 10
5.2 dm_BAKRES 日志 11

一 DMRMAN 基础概述
DMRMAN 全称DM RECOVERY MANAGER,是达梦数据库官方配套脱机备份还原专用管理工具,仅支持数据库脱机状态执行全量、增量、归档备份、还原、介质恢复整套流程;
达梦数据库文件分为数据文件、控制文件、重做日志、归档日志、配置文件(dm.ini 等),DMRMAN 备份时会统一打包为备份集(backupset),备份集包含元数据、数据块、归档片段、库配置信息,具备独立校验,保证备份完整性。
整个备份、增量筛选、归档回放、介质恢复的底层核心标识为 LSN(日志序列号):LSN 是全局单调递增的唯一编号,数据库每一次事务操作、每一页数据修改都会生成对应 LSN,是 DMRMAN 整套备份还原体系的核心标尺。
1.1 LSN日志序列号
每条事务、数据页修改都会生成唯一递增 LSN;全备记录基准 CKPT_LSN,增量仅备份LSN 大于基准备份的数据页,是增量备份的判断依据。

  1. CKPT_LSN(检查点LSN)
    ◦所有小于等于 CKPT_LSN 的脏页,都已经从内存缓冲区刷新写入数据文件磁盘;
    ◦CKPT_LSN 之前的重做日志,理论上不再用于实例崩溃恢复,仅用于介质恢复;
    ◦每次执行全量检查点、增量检查点都会刷新 CKPT_LSN;
    ◦介质恢复时,数据文件头部记录的 CKPT_LSN 是恢复起点。
  2. BEGIN_LSN(备份起始 LSN)
    ◦取值规则:BEGIN_LSN = CKPT_LSN + 1;
    ◦全量备份开始触发一次检查点,刷新 CKPT_LSN 后,把下一个 LSN 作为日志恢复起点;
    ◦增量备份会继承上一次备份的 END_LSN 作为本次 BEGIN_LSN;
    ◦介质恢复时,归档日志从 BEGIN_LSN 开始回放。
  3. END_LSN(备份终止 LSN)
    ◦代表本次备份能够保证一致性的最大日志位点;
    ◦全量 / 增量备份结束时记录 END_LSN,下一次增量备份的 BEGIN_LSN 就等于上一次 END_LSN;
    ◦完整介质恢复需要把日志回放至 END_LSN,才能保证备份集数据一致;
    ◦如果缺少 BEGIN_LSN ~ END_LSN 之间的归档日志,本次备份无法完成一致性恢复。
  4. FILE_LSN(联机日志文件 LSN)
    ◦FILE_LSN 代表联机日志已经写入的最新事务位点;
    ◦FILE_LSN ≥ END_LSN ≥ CKPT_LSN;
    ◦日志切换时,FILE_LSN 会更新并写入新日志文件头部;
    ◦FILE_LSN 只反映联机日志写入进度,不代表脏页已经刷盘;
    ◦实例崩溃恢复时,会扫描联机日志,一直回放至当前 FILE_LSN。
    1.2 数据恢复restore与recover
    阶段 官方定义 执行动作 依赖文件 执行时机
    RESTORE(还原) 物理文件拷贝阶段 从备份集覆盖数据文件、控制文件、dm.ini,仅恢复备份快照静态数据,无事务回放 全备 / 增量备份集 恢复第一步
    RECOVER(介质恢复) 事务重做阶段 读取增量变更页 / 归档日志,回放 REDO 事务,推进数据库到指定时间 / LSN 一致性状态 增量备份集、归档日志 RESTORE 之后

1.3 DB_MAGIC 数据库魔数
每个达梦数据库初始化后会生成全局唯一DB_MAGIC魔数,作为数据库身份标识,存储于控制文件、数据文件、归档日志、备份集头部。
•本地同实例恢复:还原后库与原库魔数一致,自动匹配归档,无需额外配置;
•跨实例恢复(备库归档恢复主库、异机恢复):源库归档 / 备份集src_db_magic与新库魔数不匹配,DMRMAN 默认过滤归档,必须手动指定use db_magic参数强制读取源归档。
•update db_magic:恢复完成后更新新库魔数,生成全新归档链,否则数据库启动后归档报错、无法写入新归档。
二 数据库备份
2.1 完全备份
读取数据库全部数据页、控制文件、配置文件,生成完整基准备份集,生产环境建议每周执行一次全备,作为增量备份基线。
RMAN> backup database ‘/data/dmdata/DAMENG/dm.ini’ to T_FULLBAK_01 backupset ‘/drmanbak/T_FULLBAK_01’;
2.2 增量备份
对比基准备份中每个数据页的 LSN 日志序列号,仅备份自上次备份后发生修改的数据页,备份速度快、占用存储少,适合每日高频备份。可 Disql 联机在线进行数据库全备,使用 RMAN 进行脱机增量备份。
#差异备份
RMAN> backup database ‘/data/dmdata/DAMENG/dm.ini’ increment with backupdir ‘/drmanbak/T_FULLBAK_01’ to T_INCREMENT_01 backupset ‘/drmanbak/T_INCREMENT_01’;

#累积增量备份
RMAN> backup database ‘/data/dmdata/DAMENG/dm.ini’ increment cumulative with backupdir ‘/drmanbak/T_FULLBAK_01’ to T_CUM_INCREMENT_01 backupset ‘/drmanbak/T_CUM_INCREMENT_01’;
两者区别:
类型 关键字 对比基线 恢复优势 缺点
差异增量 无 cumulative 上一次任意备份 备份速度快、体积小 多层增量恢复时需要依次应用所有增量链
累积增量 cumulative 最近一次全备 恢复链短,只需全备 + 最新一份累积增量 每次备份的数据量更大,耗时、占用存储更多

2.3 归档备份
归档日志记录数据库所有 DML/DDL 事务操作,单独备份归档可实现任意时间点回滚,支持全归档、LSN 区间、时间区间三种备份维度。
–对所有归档进行备份
RMAN> backup archive log all database ‘/data/dmdata/DAMENG/dm.ini’ backupset ‘/drmanbak/drman_archbak_01’;

–对指定LSN范围内的归档进行备份
RMAN> backup archive log LSN between 48371 and 48391 database ‘/data/dmdata/DAMENG/dm.ini’ backupset ‘/drmanbak/drman_archbak_02’;

–对指定时间范围内的归档进行备份
RMAN> BACKUP ARCHIVE LOG TIME BETWEEN ‘2026-06-30 00:00:00’ AND ‘2026-06-30 12:00:00’ DATABASE ‘/data/dmdata/DAMENG/dm.ini’ BACKUPSET ‘/drmanbak/drman_archbak_03’;
三 数据库恢复
3.1 恢复前置步骤
3.1.1 初始化目标数据库
准备目标库。还原目标库可以是已存在的数据库,也可以参考数据库软件目录 log/dminit_.log 文件,使用 dminit 工具初始化一个新库,初始化时可参考源库初始化日志log/dminit_.log复制参数,不可随意修改 PAGE_SIZE、EXTENT_SIZE。
dminit PATH=/data/dmdata/ EXTENT_SIZE=32 PAGE_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD=XXXXX SYSAUDITOR_PWD=XXXX
初始化完成后,停止实例,确保无 dmserver 进程运行。
3.1.2 校验备份集合法性
RMAN> check backupset ‘/drmanbak/T_INCREMENT_01’;

check backupset ‘/drmanbak/T_INCREMENT_01’;
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
check backupset successfully.
time used: 449.476(ms)
校验失败说明备份损坏、文件缺失,禁止执行还原。
3.2 全备+增量恢复
适用场景:无需精确时间点,仅恢复到最后一次增量备份时刻数据。
完整执行流程:

  1. 还原物理文件(自动串联全备 + 整条增量链)
    –restore时,如果有增量备份时, backupset 直接指定到最新增量备份,会自动使用全备+增量备份
    RMAN> restore database ‘/data/dmdata/DAMENG/dm.ini’ from backupset ‘/drmanbak/T_INCREMENT_01’;

–REUSE DMINI 子句进行数据库还原,此时会将备份集中备份的 dm.ini 中除路径相关的 INI 参数外,均拷贝到当前 dm.ini 上
RMAN> restore database ‘/data/dmdata/DAMENG/dm.ini’ reuse dmini from backupset ‘/drmanbak/T_INCREMENT_01’;
2. 应用增量备份变更数据
RMAN> recover database ‘/data/dmdata/DAMENG/dm.ini’ from backupset ‘/drmanbak/T_INCREMENT_01’;
3. 更新数据库 DB_MAGIC
RMAN> recover database ‘/data/dmdata/DAMENG/dm.ini’ update db_magic;
3.3 全备+增量+归档恢复
适用场景:数据误操作、磁盘损坏,需要恢复至故障前最新业务状态。
完整执行流程:

  1. restore数据库全备
    –restore时,如果有增量备份时, backupset 直接指定到最新增量备份,会自动使用全备+增量备份
    RMAN> restore database ‘/data/dmdata/DAMENG/dm.ini’ from backupset ‘/drmanbak/T_INCREMENT_01’;

–REUSE DMINI 子句进行数据库还原,此时会将备份集中备份的 dm.ini 中除路径相关的 INI 参数外,均拷贝到当前 dm.ini 上
RMAN> restore database ‘/data/dmdata/DAMENG/dm.ini’ reuse dmini from backupset ‘/drmanbak/T_INCREMENT_01’;
2. recover应用归档
–直接应用归档到数据库最新状态
RMAN> recover database ‘/data/dmdata/DAMENG/dm.ini’ with archivedir ‘/dmarch’ ;

–如果存在误删除数据,恢复到误删数据之前的状态
RMAN> recover database ‘/data/dmdata/DAMENG/dm.ini’ with archivedir ‘/dmarch’ until time ‘2026-06-30 17:00:28’;

–指定LSN恢复
RMAN> recover database ‘/data/dmdata/DAMENG/dm.ini’ with archivedir ‘/dmarch’ until LSN 53167;
每个达梦库有一个DB_MAGIC(数据库魔数),是库的唯一标识,本地同实例恢复无需添加 DB_MAGIC。当主库归档丢了 / 删了,需要用备库 / 主备集群另一节点的归档恢复,由于备库归档的 DB_MAGIC ≠ 主库当前 DB_MAGIC,RMAN 默认只应用和当前库DB_MAGIC 一致的归档,因此默认会被过滤,必须指定要使用归档的DB_MAGIC 。
–获取源库的DB_MAGIC
RMAN> show backupset ‘/drmanbak/T_INCREMENT_01’ info db;
show backupset ‘/drmanbak/T_INCREMENT_01’ info db;

<backupset [DEVICE TYPE:DISK, BACKUP_PATH: /drmanbak/T_INCREMENT_01] info start …>

<DB INFO>
system path: /data/dmdata/DAMENG
pmnt_magic: 1241059347
src_db_magic: 1679251082
db_magic: 1679251082 <----源库db_magic值
dsc node: 1
sys mode: 0
page check: 3
rlog encrypt: 0
rlog encrypt id: 0
external cipher id: 0
external hash id: 0
length in char: 0
use new hash: 1
page size: 32KB
extent size: 16
case sensitive: 1
log page size: 512B
unicode_flag/charset: 0
data version: 0x7000D
sys version: V8
version: 03134284552-20260414-322369-20221
pseg version: 0x7000C
enable policyn: 0
archive flagn: 1
blank_pad_mode: 0
crc_check: TRUE
page_enc_slice_size: 4096
char_fix_storage: 0
sql_log_forbid: 0
secur_flag: 2
db_enc_extend_size: 0
page_check_hash_size: 0
dpc_magic: 0
bak_safe_check: 7
page_chksum_policy: 1
lockid_mode: 1

<backupset [DEVICE TYPE:DISK, BACKUP_PATH: /drmanbak/T_INCREMENT_01] info end .>
show backupsets successfully.

–利用该库的归档进行恢复
RMAN> recover database ‘/data/dmdata/DAMENG/dm.ini’ with archivedir ‘/dmarch’ use db_magic 1679251082;
3. 更新数据库 DB_MAGIC
RMAN> recover database ‘/data/dmdata/DAMENG/dm.ini’ update db_magic;
四 备份集生命周期管理
4.1 查看备份集详细元数据

查看备份集基础信息

show backupset ‘/drmanbak/drman_archbak_03’;

查看备份集数据库信息(获取DB_MAGIC、页大小、版本等)

show backupset ‘/drmanbak/T_INCREMENT_01’ info db;

4.2 备份集合法性校验
备份传输、磁盘坏道易导致备份损坏,恢复前强制校验:

校验普通数据备份集

check backupset ‘/drmanbak/T_INCREMENT_01’;

校验归档备份集(绑定数据库dm.ini)

check backupset ‘/drmanbak/drman_archbak_03’ database ‘/data/dmdata/DAMENG/dm.ini’;
4.3 备份集删除清理
自动删除磁盘备份文件,支持单条删除、按时间批量清理、全量清空:

1. 删除单个备份集, 磁盘对应的备份文件也会删除

remove backupset ‘/drmanbak/drman_archbak_03’;

2. 批量删除指定时间之前所有备份(备份过期清理策略)

remove backupsets with backupdir ‘/drmanbak/’ until time’2026-06-30 17:50:00’;

3. 清空目录下全部备份集(谨慎执行)

remove backupsets with backupdir ‘/drmanbak/’;
五 DMRMAN 相关日志
所有备份还原故障、报错、进度信息均记录在独立日志,日志路径默认在达梦实例日志目录。
5.1 核心日志文件
日志文件名 用途 生成场景
dm_实例名_xxx.log 数据库实例事件日志 实例启停、归档切换、数据库异常
dm_BAKRES_xxx.log 备份还原核心日志 DMRMAN 脱机备份、Disql 联机备份全量记录,包含进程 ID、时间、报错堆栈
dm_SBTTRACE_xxx.log SBT 存储介质跟踪日志 使用第三方存储备份(对象存储、磁带库)时 IO 跟踪
dm_dmrman_xxx.log DMRMAN 工具独立日志 单独执行 dmrman 命令时的操作日志,命令执行失败优先查看

5.2 dm_BAKRES 日志
•不可手动配置开关,执行备份 / 还原自动生成;
•日志内容字段:生成时间、日志级别(INFO/WARN/ERROR)、进程名、PID、任务发起进程 ID;
•故障排查场景:备份中断、还原报参数不匹配、归档无法加载,优先检索该日志ERROR关键字定位根因。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服