达梦备份还原介绍

备份还原

前言

本文档根据官方文档,进行整理。

一、概述

DM 数据库中的数据存储在数据库的物理数据文件中,数据文件按照页、簇和段的方式进行管理,数据页是最小的数据存储单元。任何一个对 DM 数据库的操作,归根结底都是对某个数据文件页的读写操作

DM备份的文件内容有哪些?

  1. 从数据库文件中拷贝有效的数据页保存到备份集中,这里的有效数据页包括数据文件的描述页和被分配使用的数据页。
  2. 数据库继续运行期间,备份过程中产生的归档日志

还原与恢复是备份的逆过程。还原是将备份集中的有效数据页重新写入目标数据文件的过程。恢复则是指通过重做归档日志,将数据库状态恢复到备份结束时的状态;也可以恢复到指定时间点和指定 LSN。恢复结束以后,数据库中可能存在处于未提交状态的活动事务,这些活动事务在恢复结束后的第一次数据库系统启动时,会由 DM 数据库自动进行回滚。备份、还原与恢复的关系如图所示。

达梦备份还原介绍_第1张图片

二、基本概念

1、表空间与数据文件

DM 数据库的表空间是一个逻辑概念,其目的主要是为了方便数据库的管理,数据库的所有对象在逻辑上都存放在某个表空间中,而物理上都存储在所属表空间的数据文件中。一个表空间由一个或多个数据文件组成。

数据文件是数据库中最重要的文件类型,是真实数据存储的地方。DM 中数据文件的扩展名为.DBF,分为系统默认生成的数据文件和用户自己创建的数据文件两类。需要注意的是,HUGE 数据文件不同于一般数据文件,其扩展名为.DTA。

DM 数据库中的表空间可以分为普通表空间混合表空间普通表空间不能存储 HUGE 表,而混合表空间可以同时存储普通(非 HUGE)表和 HUGE 表,其中 HUGE 数据文件存储在混合表空间定义中指定的 HUGE 数据文件路径下。可以通过为普通表空间添加 HUGE 数据文件路径将其升级为混合表空间。

1.1 默认的4个表空间
表空间 说明
SYSTEM 存放了 DM 数据库全局字典信息和全局系统数据,是**DM 数据库能够正常运行的必要前提**。CREATE TABLE 等 DDL 操作会修改 SYSTEM 表空间数据
ROLL 存放 DM 数据库运行过程中产生的所有回滚记录。DM 中几乎所有的数据库修改操作都会生成回滚记录,并保存在 ROLL 表空间的数据文件中。
TEMP 存放临时表数据以及数据库运行过程中产生的临时数据。在数据库运行过程中,SORT、HASH JOIN 等操作都可能会生成临时结果集,它们作为临时数据存放在 TEMP 表空间中。
若数据库重启,保存在 TEMP 表空间中的所有数据都会丢失。
MAIN MAIN 表空间为混合表空间。在创建用户时,如果没有指定默认表空间,系统自动指定 MAIN 表空间为用户默认的表空间。MAIN 表空间的默认数据文件为 MAIN.DBF,默认 HUGE 数据文件路径为 HMAIN 目录所在路径。

2、REDO日志

重做日志,又叫 REDO 日志,忠实记录了所有物理页的修改,基本信息包括操作类型、表空间号、文件号、页号、页内偏移、实际数据等。数据库中 INSERT、DELETE、UPDATE 等 DML 操作以及 CREATE TABLE 等 DDL 操作最终都会转化为对某些数据文件、某些数据页的修改。数据库系统正常运行时候,用不上REDO日志。但是在系统故障重启时,通过重做 REDO 日志,可以将数据库恢复到故障时的状态

任何数据页从内存缓冲区写入磁盘之前,必须保证其对应的 REDO 日志已经写入到联机日志文件

REDO 日志包(RLOG_PKG)是 DM 数据库保存 REDO 日志的数据单元,一个日志包内可保存一个或多个 PTX 产生的 REDO 日志。

PTX:物理事务(Physical Transaction,简称 ptx)

日志包生成时按照序号连续递增,相邻日志包的 LSN 顺序是总体递增的,但是在 DMDSC 集群环境下不一定连续

  • 未开启并行日志,RLOG_PKG 包内日志的 LSN 是递增的。
  • 开启并行日志,一个 RLOG_PKG 包内包含多路并行产生的日志,每一路并行日志的 LSN 是递增的,但是各路之间的 LSN 并不能保证 LSN 有序,因此并行日志包内 LSN 具有局部有序,整体无序的特点

3、归档日志

系统在归档模式下运行会更安全,当出现介质故障,如磁盘损坏导致数据文件丢失、异常时,利用归档日志,系统可以恢复至故障发生的前一刻。因此,为了保证归档日志文件和数据文件不同时出现问题,建议将归档目录与数据文件配置、保存到不同的物理磁盘上除了表备份还原其他的联机备份与还原必须运行在归档模式下

4、LSN

LSN(Log Sequence Number)是由系统自动维护的 Bigint 类型数值,具有自动递增、全局唯一特性,每一个 LSN 值代表着 DM 系统内部产生的一个物理事务。物理事务(PTX)是数据库内部一系列修改物理数据页操作的集合,与数据库管理系统中事务(Transaction)概念相对应,具有原子性、有序性、无法撤销等特性。

DM 数据库中与 LSN 相关的信息,可以通过查询 v$rlogV$RAPPLY_PARALLEL_INFO表来获取。

4.1 LSN的类型:
类型 说明
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 由检查点线程负责调整。
APPLY_LSN 数据库还原恢复后已经写入联机 Redo 日志文件的日志包的原始最大 LSN 值,APPLY_LSN 取自源库的原始日志包中的最大 LSN 值。DSC 集群的每一个节点独立维护 APPLY_LSN。
RPKG_LSN 数据库还原恢复后已经重演日志的最大 LSN。DSC 集群的每一个节点独立维护 RPKG_LSN。

注意:

  1. 数据库故障重启时,CKPT_LSN 之前的 REDO 日志不需要重做
  2. 只需要从 CKPT_LSN+1 开始重做 REDO 日志,就可以将系统恢复到故障前状态。
  3. 联机重做日志文件中,LSN 值<=CKPT_LSN 的 REDO 日志都可以被覆盖。

5、包序号

每个 RLOG_PKG 都有对应的序号属性,称之为包序号(PKG SEQNO),日志包生成时按照序号连续递增。包序号包括本地包序号(LSEQ)和全局包序号(GSEQ),本地包序号是节点内唯一、连续递增的值,用于校验联机日志连续性;全局包序号由数据守护集群的主备库共同维护,具有全局唯一、连续、递增的特性,用于校验归档日志的连续性。

DM 数据库中与全局包序号相关的信息,可以通过查询 v r l o g 和 V rlog 和 V rlogVRAPPLY_PARALLEL_INFO 表来获取。

5.1 全局包序号类型:
类型 说明
CUR_SEQ 系统已经分配的最大全局包序号。RLOG_PKG 写入联机日志文件前,系统会为其分配一个唯一的全局包序号。
FILE_SEQ 已经写入联机 Redo 日志文件的最大全局包序号。每次将 Redo 日志包 RLOG_PKG 写入联机 Redo 日志文件后,都要修改 FILE_SEQ 值。
APPLY_SEQ 数据库还原恢复后已经写入联机 Redo 日志文件的原始最大全局包序号,APPLY_SEQ 取自源库的原始日志包的包序号。DSC 集群的每一个节点独立维护 APPLY_SEQ。
RPKG_SEQ 数据库还原恢复后已经重演日志的最大全局包序号。DSC 集群的每一个节点独立维护 RPKG_SEQ。

6、检查点

DM 数据库运行过程中,用户的所有操作都在内存中进行。每修改一条记录都必须先把记录所在的数据页加载到 BUFFER 缓冲区中,然后进行修改。事务运行时,会把生成的 REDO 日志保留在 Redo 日志包 RLOG_PKG 中,每条日志记录对应一个 LSN,当事务提交或 Redo 日志包满或执行检查点时会进行日志刷盘。

检查点(checkpoint)是一个数据库事件,它的功能是按照数据页的修改顺序,依次将 BUFFER 缓冲区中的脏页写入磁盘,并在这个过程中动态调整 CKPT_LSN 值,释放日志空间。

DM 的检查点分为两种:完全检查点和部分检查点:

  • 完全检查点:会**将内存缓冲区中的所有脏页写入磁盘,并调整 CKPT_LSN,在数据库正常关闭时会产生一个完全检查点**。
  • 部分检查点:根据 dm.ini 配置文件中的参数 CKPT_FLUSH_RATE 和 CKPT_FLUSH_PAGES,确定每次检查点刷脏页的数量。执行部分检查点的过程中,DDL/DML 操作都可以正常执行,DM 系统中绝大多数情况下触发的都是部分检查点。

数据库运行过程中产生的待写入日志首先写入 Redo 日志包 RLOG_PKG,当日志刷盘时一起写入联机日志文件中。在联机日志文件中,可以覆盖写入 REDO 日志的文件长度为可用日志空间;不能被覆盖的 REDO 日志,系统故障重启需要重做的 REDO 日志为有效日志有效日志的 LSN 取值范围是(CKPT_LSN,FILE_LSN]

下图说明了联机日志文件、Redo 日志包 RLOG_PKG 以及相关各 LSN 之间的关系。

达梦备份还原介绍_第2张图片

我的个人解读(不知道正确与否):

假设我本次需要传输LSN范围1200的REDO日志包RLOG_PKG,目前已经写入联机日志文件的LSN为180的RLOG_PKG,并且系统已经刷盘了1~60的RLOG_PKG的数据页。那么我么可以得到如下结果:

  • CKPT_LSN=60,(1~60 REDO日志包影响的数据页已经持久化到硬盘,已经写入REDO日志文件)
  • FILE_LSN=80,(61~80 REDO日志包影响的数据页还没有持久化到硬盘,但是已经写入REDO日志文件)
  • FLUSH_LSN=200,(81~200 REDO日志包还没有写入REDO日志文件)

这就意味着,这会如果出现了故障,需要还原。那么数据库重新启动后会自动重做LSN为61~80的RLOG_PKG。

7、备份集

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

7.1 备份片

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

  • 备份集中存放数据页的备份片称为数据备份片
  • 存放 REDO 日志的备份片称为日志备份片

备份片的大小可以在备份时通过 MAXPIECESIZE 指定,一个备份集中可能生成多个备份片。

7.2 元数据

元数据文件用来存放备份信息,元数据文件的后缀为.meta。通过元数据文件,可以了解整个备份集信息。元数据文件中包含的备份信息包括:

  • 备份集本身相关的信息,如是否联机备份,备份的范围,备份的加密信息,以及备份的压缩信息等;
  • 备份源库的建库参数信息,如 DSC 的节点数,是否大小写敏感,PAGE_CHECK 属性等;
  • 数据文件信息,如备份了哪些数据文件,文件大小,以及文件相关的表空间信息等;
  • 备份片的信息,如包含哪些备份片文件、备份片大小等信息;
  • 备份库的 dm.ini 参数信息和密钥文件(dm_service.prikey 或者 dm_external.config,若指定 usbkey 加密,则不备份)。

8、备份

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

备份的分类

划分标准 分类
备份组织形式 1️⃣物理备份
2️⃣逻辑备份
数据库是否运行 1️⃣联机备份
2️⃣脱机备份
备份的粒度 1️⃣库备份
2️⃣表空间备份
3️⃣归档备份
4️⃣表备份
一致性 1️⃣一致性备份
2️⃣非一致性备份
完整性 1️⃣完全备份
2️⃣增量备份
8.1 逻辑备份和物理备份

逻辑备份是指利用 dexp 导出工具,将指定对象(库级、模式级、表级)的数据导出到文件的备份方式。逻辑备份针对的是数据内容,并不关心这些数据物理存储在什么位置。

物理备份则直接扫描数据库文件,找出那些已经分配、使用的数据页,拷贝并保存到备份集中。物理备份过程中,不关心数据页的具体内容是什么,也不关心数据页属于哪一张表,只是简单的根据数据库文件系统的描述,来挑选有效的数据页。

8.2 联机备份和脱机备份

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

备份异常关闭的数据库,要求配置了本地归档,如果本地归档不完整,则需要先修复本地归档,再进行备份。

在这里插入图片描述
为什么联机备份要开启本地归档?

联机备份,可能存在一些处于活动状态的事务正在执行,为确保备份数据的一致性,需要将备份期间产生的 REDO 日志一起备份。因此,只能在配置本地归档、并开启本地归档的数据库上执行联机备份

注意:

只有已经关闭的数据库才允许执行脱机备份。正在运行的数据库,无法执行脱机备份,系统会报错。

8.3 数据备份和归档日志备份

按照备份内容不同,可以分为数据备份和归档日志备份。

8.3.1 数据备份

数据备份主要针对数据文件内容,包括库备份、表空间备份和表备份。其中,未指定 WITHOUT LOG 参数执行的库备份和表空间备份还包含了 REDO 日志备份

数据备份粒度:

粒度 说明 联机备份 脱机备份 全量备份 增量备份
库备份 库备份会拷贝数据库中所有数据文件的有效数据页。
表空间备份 针对特定表空间执行的备份,只能在联机状态下执行。 X
表备份 拷贝指定表的所有数据页到备份集中,并会记录各个数
据页之间的逻辑关系用以恢复。
1️⃣表备份只能在联机状态下执行
2️⃣**一次表备份操作只能备份一张用户表
3️⃣
不支持增量表备份**。
X X
归档日志
8.3.2 归档日志备份

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

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

按照备份集中的数据是否满足一致性,可以将备份划分为一致性备份和非一致性备份。

备份类型 是否指定
WITHOUT LOG 选项
备份集内容
一致性备份 X 1️⃣完整的数据文件内容
2️⃣**REDO 日志信息**
非一致性备份 1️⃣完整的数据文件内容

注意:

  1. 利用非一致性备份集还原的数据库,无法直接启动,必须借助归档日志进行恢复之后才可以启动。但是有一种情况除外:数据库正常关闭时,会生成完全检查点,脱机备份生成的备份集中,不包含任何 REDO 日志。因此脱机备份一个正常关闭的数据库,既可以从归档日志恢复也可以从备份集恢复
  2. 表空间备份生成的备份集是非一致性备份集。

8.5 完全备份和增量备份

按照备份数据完整性,可将备份分为完全备份和增量备份。

库备份和表空间备份支持增量备份,表备份不支持增量备份。

备份类型 支持全量备份 支持增量备份
库备份
表空间备份
表备份 X

表备份不是直接扫描数据文件,而是BUFFER中加载数据页,拷贝到备份片文件中表备份不需要配置归档就可以执行,并且不支持增量表备份。

8.5.1 完全备份

完全备份生成的备份集包含了指定库(或者表空间)的全部有效数据页。当数据规模比较大的情况下,生成的完全备份集通常会比较大,而且备份时间也会比较长。

8.5.2 增量备份

增量备份是在某个特定备份集基础上,收集数据库新修改的数据页进行备份,可以有效减少备份集的空间占用、提高备份速度。这个特定的、已经存在的备份集称为增量备份的基备份,根据对基备份的要求不同,DM 的增量备份分为以下两种:

8.5.2.1 差异增量备份

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

利用增量备份进行还原操作时,要求其基备份必须是完整的;如果差异增量备份的基备份本身也是一个增量备份,那么同样要求其基备份是完整的;任何一个增量备份,最终都是以一个完全备份作为其基备份。因此,完全备份是增量备份的基础。

8.5.2.2 累积增量备份

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

增量备份的基备份集既可以是脱机备份生成的,也可以是联机备份生成的,脱机增量备份的基备份集可以是联机备份生成的,联机增量备份的基备份集也可以是脱机备份生成的。


9、还原

还原是备份的逆过程,就是从备份集中读取数据页,并将数据页写入到目标数据库对应数据文件相应位置的过程。

  • 联机备份时,系统中可能存在一些处于活动状态的事务正在执行,并**不能保证备份集中的所有数据页是处于一致性状态**;
  • 脱机备份时,数据页不一定是正常关闭的,也不能保证备份集中所有数据页是处于一致性状态。因此,还原结束后目标库有可能处于非一致性状态,不能马上提供数据库服务;必须要进行数据库恢复操作后,才能正常启动
9.1 逻辑还原和物理还原
还原类型 还原的数据来源 还原工具
逻辑还原 dexp工具导出的备份数据 dimp 工具
物理还原 DMRMAN工具导出的备份集 DMRMAN工具
9.2 联机还原和脱机还原

联机还原指数据库处于运行状态时,通过 SQL 语句执行还原操作。表还原可以在联机状态下执行

脱机还原指数据库处于关闭状态时执行的还原操作,脱机还原通过 DMRMAN 工具进行。库备份、表空间备份和归档备份,可以执行脱机还原。

脱机还原操作的目标库必须处于关闭状态

9.3 数据还原和归档日志还原

根据备份集类型,数据还原可以分为库还原、表空间还原和表还原。

备份集类型 还原的数据来源 联机执行 脱机执行
库还原 1️⃣库备份集 X
表空间还原 1️⃣表空间备份集
2️⃣库备份集
X
表还原 1️⃣表备份集 X

表空间还原,还原的目标表空间不能是 TEMP 表空间,只能是 MAIN、SYSTEM、ROLL 表空间,或者用户定义的表空间。

归档日志还原则将归档日志备份集中的归档日志内容,重新生成到指定目录中。

9.4 完全还原和增量还原

完全还原是指直接利用完全备份集进行数据还原操作。增量还原指通过增量备份集进行数据还原操作。但是考虑到增量备份集的基础一定是一个完全备份集,因此增量还原过程中隐含了一个完全还原操作。如果增量备份集的基备份集被删除了,那么单独使用这个增量备份集是无法进行还原操作的。

三、备份还原过程

针对不同的备份对象,一个完整的备份还原过程包含的步骤不同。

有的步骤既可以在联机状态下执行,又可以在脱机状态下执行。用户可根据实际需要选择联机或脱机执行,任选一种即可。

下表中列出了不同的状态下所支持的操作

状态 备份粒度 备份 还原 恢复
恢复一致性 更新DB_MAGIC
联机
表空间
归档
脱机
表空间
归档

根据上表可得结论:

联机状态 脱机状态
任何对象都能备份 库才能备份
表能还原,其他对象不能还原 除了表以外,任何对象都能还原
任何对象都不能执行恢复操作 库对象支持恢复一致性更新DB_MAGIC操作,表空间支持恢复一致性操作

四、备份方式

当前仅支持备份集方式的备份还原,不再支持其他备份方式。备份还原实现策略有两种:dmap 辅助进程方式和无辅助进程方式。用户可通过 DM.INI 参数 bak_use_ap 来选择(dmrman 使用参数 use_ap),bak_use_ap 可取值 1、2。默认为 1。

bak_use_ap 的两种取值的相应作用如下:

1:DMAP 辅助进程方式,可支持第三方备份(指定 DEVICE TYPE 为 TAPE)。DMAP 插件执行,改造了备份还原任务子系统,允许指定并行度,大幅提升了备份还原的效率,特别是加密、压缩的处理效率。如果选择使用 DMAP 辅助进程,执行备份还原之前就必须启动 DMAP 服务。安装 DM 数据库以后,DMAP 服务会自动启动。如果需要手动启动,有两种途径,一是启动 DM 服务查看器中的 DmAPService。二是通过手动启动 DMAP 执行码实现,DMAP 执行码位于 DM 安装目录的 bin 子目录下。除此之外,LINUX 下,还可以调用 bin 目录下的 DmAPService 脚本。

2:无辅助进程方式,不依赖 DMAP,由主进程 dmserver 自身执行备份还原,但不支持第三方备份(指定 DEVICE TYPE 为 TAPE)。

你可能感兴趣的:(达梦,数据库)