浅聊达梦数据库物理热备的概念及原理
达梦数据库(DM Database)的物理热备份,核心是在数据库不中断业务(联机) 的前提下,通过对数据库物理文件(如数据文件、控制文件、日志文件等)的增量或全量复制,实现数据备份的技术方案。其原理本质上基于**“一致性快照”+“重做日志(Redo Log)实时追踪”** 两大核心技术,同时结合达梦自研的存储引擎机制,确保备份过程中数据的完整性与业务连续性。
一、核心技术基石:达梦存储引擎的“页级管理”
要理解物理热备份,首先需要明确达梦数据库的底层存储逻辑——其数据以**“数据页(Data Page)”** 为基本单位存储(默认页大小为8KB/16KB/32KB,可配置),所有表、索引等数据最终都映射为磁盘上的物理页文件(.dbf格式)。
物理热备份的本质是对“数据页”的复制,但需解决一个关键问题:备份过程中数据库仍在写入,如何避免复制的“半脏页”(即页数据未完全写入就被备份)?
这就需要“一致性快照”技术来解决。
二、核心原理1:一致性快照(Consistent Snapshot)
达梦物理热备份的第一步,是创建一个数据库的一致性快照,确保备份的所有数据页都对应“同一时间点”的状态,避免数据不一致。其实现逻辑如下:
- 触发快照点:当用户发起热备份命令(如
BACKUP DATABASE
)时,数据库首先记录当前的系统全局事务号(SCN,System Change Number) ——SCN是达梦用于标记数据版本的全局唯一序号,每发生一次数据修改,SCN都会递增。 - 冻结“脏页刷盘”规则:达梦的缓冲池(Buffer Pool)中会缓存近期访问的数据页,修改后的数据先存于“脏页”(未刷盘的修改页)。创建快照后,数据库会对“快照点之前的脏页”执行一次强制刷盘(确保快照点前的修改都落地到物理文件),同时对“快照点之后的新脏页”标记为“不参与当前备份”——新修改的页不会被备份,而是通过后续的重做日志补充。
- 生成“快照映射表”:快照创建后,数据库会生成一个“快照页映射表”,记录快照点时所有数据页的物理位置(磁盘地址)。后续备份进程只需根据该映射表,逐一复制对应位置的物理页,即可得到“快照点时刻的一致性数据副本”。
三、核心原理2:重做日志(Redo Log)的实时追踪与补充
一致性快照解决了“备份起点的一致性”,但备份过程可能持续数分钟甚至数小时,期间数据库仍在处理业务(产生新的修改)。为了让最终的备份集包含“快照点到备份结束”的所有数据,达梦引入了重做日志实时追踪技术:
- 重做日志的作用:达梦数据库会将所有数据修改操作(INSERT/UPDATE/DELETE等)实时写入“重做日志文件”(.log格式,默认双日志文件循环写入),用于崩溃恢复(Crash Recovery)和备份补充。
- 备份期间的日志追踪:在热备份启动后,数据库会启动一个日志追踪进程,实时监控并复制“快照点SCN之后生成的所有重做日志”(包括当前正在写入的日志文件和后续切换的日志文件)。
- 备份集的完整性:最终的物理热备份集包含两部分:
- 快照点时刻的“一致性数据页副本”(全量或增量,取决于备份类型);
- 快照点到备份结束期间的“增量重做日志片段”。
恢复时,只需先恢复数据页副本到快照点状态,再通过重做日志片段“重演”后续修改,即可将数据恢复到“备份结束时刻”的完整状态。
四、关键技术特性:支持“增量热备份”的底层逻辑
达梦物理热备份不仅支持全量(备份所有数据页),还支持增量(仅备份“上一次备份后修改过的数据页”),其实现依赖**“页修改标记(Page Dirty Flag)”** 技术:
- 每次数据库启动或完成一次全量/增量备份后,达梦会初始化一个“页修改追踪表”;
- 当数据页被修改时,数据库会在“页修改追踪表”中标记该页的“修改状态”(如标记页的物理地址和修改时间);
- 执行增量热备份时,备份进程只需扫描“页修改追踪表”,仅复制“标记为修改过的数据页”,同时追踪对应期间的重做日志,大幅减少备份量和时间。
总结:物理热备份的技术核心链路
graph LR
A[发起热备份命令] --> B[记录当前SCN,创建一致性快照]
B --> C[强制刷盘快照点前的脏页]
C --> D[复制快照点的一致性数据页(全量/增量)]
D --> E[实时追踪并复制快照点后的重做日志]
E --> F[生成包含“数据页+重做日志”的备份集]
本质上,达梦物理热备份是通过**“SCN快照确保起点一致”+“重做日志追踪确保增量完整”+“页级管理实现高效复制”** 的技术组合,在不中断业务的前提下,实现了物理文件级的可靠备份,兼顾了备份效率、数据完整性和业务连续性。