浅聊达梦数据库物理热备的概念及原理

达梦数据库(DM Database)的物理热备份,核心是在数据库不中断业务(联机) 的前提下,通过对数据库物理文件(如数据文件、控制文件、日志文件等)的增量或全量复制,实现数据备份的技术方案。其原理本质上基于**"一致性快照"+"重做日志(Redo Log)实时追踪"** 两大核心技术,同时结合达梦自研的存储引擎机制,确保备份过程中数据的完整性与业务连续性。

一、核心技术基石:达梦存储引擎的"页级管理"

要理解物理热备份,首先需要明确达梦数据库的底层存储逻辑------其数据以**"数据页(Data Page)"** 为基本单位存储(默认页大小为8KB/16KB/32KB,可配置),所有表、索引等数据最终都映射为磁盘上的物理页文件(.dbf格式)。

物理热备份的本质是对"数据页"的复制,但需解决一个关键问题:备份过程中数据库仍在写入,如何避免复制的"半脏页"(即页数据未完全写入就被备份)?

这就需要"一致性快照"技术来解决。

二、核心原理1:一致性快照(Consistent Snapshot)

达梦物理热备份的第一步,是创建一个数据库的一致性快照,确保备份的所有数据页都对应"同一时间点"的状态,避免数据不一致。其实现逻辑如下:

  1. 触发快照点 :当用户发起热备份命令(如 BACKUP DATABASE)时,数据库首先记录当前的系统全局事务号(SCN,System Change Number) ------SCN是达梦用于标记数据版本的全局唯一序号,每发生一次数据修改,SCN都会递增。
  2. 冻结"脏页刷盘"规则 :达梦的缓冲池(Buffer Pool)中会缓存近期访问的数据页,修改后的数据先存于"脏页"(未刷盘的修改页)。创建快照后,数据库会对"快照点之前的脏页"执行一次强制刷盘(确保快照点前的修改都落地到物理文件),同时对"快照点之后的新脏页"标记为"不参与当前备份"------新修改的页不会被备份,而是通过后续的重做日志补充。
  3. 生成"快照映射表":快照创建后,数据库会生成一个"快照页映射表",记录快照点时所有数据页的物理位置(磁盘地址)。后续备份进程只需根据该映射表,逐一复制对应位置的物理页,即可得到"快照点时刻的一致性数据副本"。

三、核心原理2:重做日志(Redo Log)的实时追踪与补充

一致性快照解决了"备份起点的一致性",但备份过程可能持续数分钟甚至数小时,期间数据库仍在处理业务(产生新的修改)。为了让最终的备份集包含"快照点到备份结束"的所有数据,达梦引入了重做日志实时追踪技术:

  1. 重做日志的作用:达梦数据库会将所有数据修改操作(INSERT/UPDATE/DELETE等)实时写入"重做日志文件"(.log格式,默认双日志文件循环写入),用于崩溃恢复(Crash Recovery)和备份补充。
  2. 备份期间的日志追踪 :在热备份启动后,数据库会启动一个日志追踪进程,实时监控并复制"快照点SCN之后生成的所有重做日志"(包括当前正在写入的日志文件和后续切换的日志文件)。
  3. 备份集的完整性 :最终的物理热备份集包含两部分:
    • 快照点时刻的"一致性数据页副本"(全量或增量,取决于备份类型);
    • 快照点到备份结束期间的"增量重做日志片段"。
      恢复时,只需先恢复数据页副本到快照点状态,再通过重做日志片段"重演"后续修改,即可将数据恢复到"备份结束时刻"的完整状态。

四、关键技术特性:支持"增量热备份"的底层逻辑

达梦物理热备份不仅支持全量(备份所有数据页),还支持增量(仅备份"上一次备份后修改过的数据页"),其实现依赖**"页修改标记(Page Dirty Flag)"** 技术:

  1. 每次数据库启动或完成一次全量/增量备份后,达梦会初始化一个"页修改追踪表";
  2. 当数据页被修改时,数据库会在"页修改追踪表"中标记该页的"修改状态"(如标记页的物理地址和修改时间);
  3. 执行增量热备份时,备份进程只需扫描"页修改追踪表",仅复制"标记为修改过的数据页",同时追踪对应期间的重做日志,大幅减少备份量和时间。

总结:物理热备份的技术核心链路

graph LR A[发起热备份命令] --> B[记录当前SCN,创建一致性快照] B --> C[强制刷盘快照点前的脏页] C --> D[复制快照点的一致性数据页(全量/增量)] D --> E[实时追踪并复制快照点后的重做日志] E --> F[生成包含"数据页+重做日志"的备份集]

本质上,达梦物理热备份是通过**"SCN快照确保起点一致"+"重做日志追踪确保增量完整"+"页级管理实现高效复制"** 的技术组合,在不中断业务的前提下,实现了物理文件级的可靠备份,兼顾了备份效率、数据完整性和业务连续性。

相关推荐
工业甲酰苯胺几秒前
Redis支持事务吗?了解Redis的持久化机制吗?
数据库·redis·bootstrap
NineData28 分钟前
NineData 最新发布 SQL Server 双向实时同步功能
数据库·后端·架构
手握风云-1 小时前
MySQL数据库精研之旅第十一期:打造高效联合查询的实战宝典(二)
数据库·mysql
Jasonakeke2 小时前
【重学MySQL】八十九、窗口函数的分类和使用
数据库·mysql
云飞云共享云桌面2 小时前
共享云服务器替代传统电脑做三维设计会卡顿吗
大数据·运维·服务器·数据库·自动化
倔强的石头1062 小时前
数据对话的“通用语法”:SQL与KingbaseES的智能处理艺术
数据库·sql
zhz52144 小时前
从PostgreSQL到人大金仓(KingBase)数据库迁移实战:Spring Boot项目完整迁移指南
数据库·spring boot·postgresql
万行4 小时前
点评项目(Redis中间件)&第一部分Redis基础
java·数据库·redis·缓存·中间件
SelectDB4 小时前
Apache Doris 登顶 RTABench —— 实时分析领域的性能王者
数据库·数据分析·开源