达梦数据库系列—16. 备份和还原恢复原理

目录

1、备份集/片

备份集

备份片

2、备份分类

逻辑备份和物理备份

联机备份和脱机备份

数据备份和归档日志备份

一致性备份和非一致性备份

完全备份和增量备份

3、备份还原过程

LSN

备份

还原

恢复


1、备份集/片

备份集

备份集用来存放备份过程中产生的备份数据及备份信息。一个备份集对应了一次完整的备份。一般情况下,一个备份集就是一个目录,备份集包含一个或多个备份片文件,以及一个备份元数据文件。并行备份和非并行备份情况下,备份集里的内容略有不同。

备份片

备份片用来存储备份数据的文件。备份时,目标数据文件内容或归档日志内容经过处理后,都会存放到各自的备份片文件中。备份片文件后缀为.bak,用来存放备份数据,备份集中存放数据页的备份片称为数据备份片,存放 REDO 日志的备份片称为日志备份片。

2、备份分类

备份就是从源库(备份库)中读取有效数据页、归档日志等相关信息,经过加密、压缩等处理后写入备份片,并将相关备份信息写入备份元数据文件的过程。

逻辑备份和物理备份

逻辑备份是指利用 dexp 导出工具,将指定对象(库级、模式级、表级)的数据导出到文件的备份方式。

物理备份则直接扫描数据库文件,找出那些已经分配、使用的数据页,拷贝并保存到备份集中。

联机备份和脱机备份

数据库处于运行状态、并正常提供数据库服务情况下进行的备份操作,我们称为联机备份。数据库处于关闭状态时进行的备份操作,被称为脱机备份。

只有已经关闭的数据库才允许执行脱机备份。正在运行的数据库,无法执行脱机备份,系统会报错。 从 V2.0 版本开始,使用 DMRMAN 工具进行脱机备份,并且支持对异常关闭的数据库进行脱机库备份。

联机备份则使用客户端工具连接到数据库实例后,通过执行 SQL 语句进行。

数据备份和归档日志备份

库备份,顾名思义就是对整个数据库执行的备份,又称为库级备份。库备份会拷贝数据库中所有数据文件的有效数据页。

表空间备份是针对特定表空间执行的备份,又称为表空间级备份。表空间备份只能在联机状态下执行。

表备份则拷贝指定表的所有数据页到备份集中,并会记录各个数据页之间的逻辑关系用以恢复。表备份只能在联机状态下执行,一次表备份操作只能备份一张用户表,并且不支持增量表备份。

归档日志备份是专门针对归档日志文件进行操作,不涉及任何数据文件内容。归档日志备份扫描归档目录收集归档日志文件,并将归档日志写入到备份集中。既可以在数据库运行状态下,执行联机归档日志备份;也可以在数据库关闭状态下执行脱机归档日志备份。

节点 BEGIN_LSN

为了保证备份的完整性和有效性,必须包含的归档日志起始 LSN 值。BEGIN_LSN = 备份开始时检查点偏移前一个 RLOG_PKG 的 max_lsn。

节点 BEGIN_SEQ

BEGIN_SEQ 记录了 BEGIN_LSN 所在 Redo 日志包的序号。

节点 END_LSN

为了保证备份的完整性和有效性,必须包含归档日志结束 LSN 值。END_LSN = 备份结束时 FILE_LSN。

节点 END_SEQ

BEGIN_SEQ 记录了 END_LSN 所在 Redo 日志包的序号。

BAK_END_LSN

备份结束时,可以保证事务一致性的全局备份结束 LSN。单节点 BAK_END_LSN 等于 END_LSN;DSC 集群环境中,每个节点的 END_LSN 都不相同,BAK_END_LSN 大于等于最大的 END_LSN。

如果 BEGIN_SEQ 等于 END_SEQ,则表明备份过程中,该节点没有任何数据被修改。为了简化还原过程,增量备份时要求 BEGIN_LSN 必须大于等于基准备份的 END_LSN,如果不满足条件,则强制生成检查点,直到 BEGIN_LSN 满足条件为止。

一致性备份和非一致性备份

不指定 WITHOUT LOG 选项的备份生成的备份集就是一致性备份。一致性备份的备份集包含了完整的数据文件内容和 REDO 日志信息;利用一个一致性备份集就可以将数据库恢复到备份时状态。

指定 WITHOUT LOG 选项的备份生成的备份集都是非一致性备份集。非一致性备份的备份集只包含数据文件相关内容,没有 REDO 日志信息。利用非一致性备份集还原的数据库,无法直接启动,必须借助归档日志进行恢复之后才可以启动,(脱机备份一个正常关闭的数据库的情况除外)。

完全备份和增量备份

完全备份生成的备份集包含了指定库(或者表空间)的全部有效数据页。

增量备份是在某个特定备份集基础上,收集数据库新修改的数据页进行备份,可以有效减少备份集的空间占用、提高备份速度。

差异增量备份的基备份既可以是一个完全备份集,也可以是一个增量备份集。

累积增量备份的基备份只能是完全备份集,而不能是增量备份集。

3、备份还原过程

库备份与还原包括:备份—还原—恢复。此处恢复又细分为恢复一致性、更新 DB_MAGIC 两步;

表空间备份与还原包括:备份—还原—恢复。此处恢复只包括恢复一致性这一步;

表还原只能在联机模式下,库还原和表空间还原只能在脱机模式(drman)下。

脱机模式下(drman)只能备份全库和归档,不能对表空间和表进行备份。

LSN

LSN(Log Sequence Number)是由系统自动维护的 Bigint 类型数值,具有自动递增、全局唯一特性,每一个 LSN 值代表着 DM 系统内部产生的一个物理事务。

CUR_LSN 是系统已经分配的最大 LSN 值。物理事务提交时,系统会为其分配一个唯一的 LSN 值,大小等于 CUR_LSN+1,然后再修改 CUR_LSN=CUR_LSN+1。

FLUSH_LSN 是已经发起日志刷盘请求,但还没有真正写入联机 Redo 日志文件的最大 LSN 值。

FILE_LSN 是已经写入联机 Redo 日志文件的最大 LSN 值。每次将 Redo 日志包 RLOG_PKG 写入联机 Redo 日志文件后,都要修改 FILE_LSN 值

CKPT_LSN 是检查点 LSN,所有 LSN <= CKPT_LSN 的物理事务修改的数据页,都已经从 Buffer 缓冲区写入磁盘,CKPT_LSN 由检查点线程负责调整。

恢复时,CKPT_LSN 之前的 REDO 日志不需要重做,只需要从 CKPT_LSN+1 开始重做 REDO 日志,就可以将系统恢复到故障前状态。

APPLY_LSN 是数据库还原恢复后已经写入联机 Redo 日志文件的日志包的原始最大 LSN 值,APPLY_LSN 取自源库的原始日志包中的最大 LSN 值。

备份

BEGIN_LSN,为了保证备份的完整性和有效性,必须包含的归档日志起始 LSN 值。可以理解为备份开始时ckpt_LSN。

END_LSN,为了保证备份的完整性和有效性,必须包含归档日志结束 LSN 值。END_LSN = 备份结束时 FILE_LSN。

库完全备份,备份程序会扫描数据文件,拷贝所有被分配、使用的数据页,写入到备份片文件中。上图第二条线。

库增量备份,拷贝 LSN > 基备份 BEGIN_LSN (也就是第一次备份时的CKPT_LSN)的数据页写入备份片文件中。上图第三条线。

表空间备份只拷贝指定表空间的数据页。

表备份主要包括数据备份和元信息备份两部分。与库备份和表空间备份不同,表备份不是直接扫描数据文件,而是从 BUFFER 中加载数据页,拷贝到备份片文件中。表备份的元信息则包括建表语句、重建约束语句、重建索引语句,以及其他相关属性信息。表备份不需要配置归档就可以执行,并且不支持增量表备份。

还原

库还原的主要步骤包括:清理目标库环境;重建数据库文件;拷贝数据页;重建联机日志文件;修改配置参数等。

清理目标库环境

首先解析 dm.ini 配置文件,获取 dm.ctl 控制文件路径,如果指定 OVERWRITE 选项,若待还原文件存在,则删除;

重建数据库文件

如果将一个已存在数据库作为还原目标,则需要将目标数据库的 dm.ini 路径作为还原参数。还原过程中,会重新创建数据文件,并将相关信息写入 dm.ctl 控制文件中。

如果将数据库还原到指定目录,则会在这个目录创建一个 dm.ini 配置文件,设置 CTL_PATH、SYSTEM_PATH 配置项指向这个目录,并在这个目录下创建 dm.ctl 控制文件。

重建联机日志文件

文件编号从 1 开始,如 DAMENG01.log、DAMENG02.log。联机日志文件至少 2 个。

拷贝数据页

从备份集中读取数据页,并将数据页写入数据文件指定位置的过程。

重置目标库

1.更新日志信息,设置当前 CKPT_LSN 为备份集中 BEGIN_LSN,并设置日志文件状态为 INACTIVE;

2.更新 DB_MAGIC,还原后,库中 PERMANENT_MAGIC 仍与备份集中相同

3.更新目标库的控制文件 dm.ctl,把当前库中的数据文件信息都记录到控制文件中,使用备份集中的服务器秘钥文件,重新生成新的秘钥文件。

恢复

数据恢复是指在还原执行结束后,重做 REDO 日志,将数据库恢复到一致性状态,并执行更新 DB_MAGIC 的过程。

还原结束后,必须经过恢复操作,数据库才允许启动。即使备份过程中没有修改任何数据,备份集不包含任何 REDO 日志,在数据库还原结束后,也必须使用 DMRMAN 工具执行数据恢复操作后,才允许启动数据库。

达梦技术社区:https://eco.dameng.com/

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leidata

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值