达梦数据库基础管理—备份与还原简介和原理

达梦数据库基础管理—备份与还原简介和原理



一、备份还原简介

1.1 概述

  DM数据库中数据存在数据库的物理文件中,数据文件按照页、簇和段的方式进行管理,数据页是最小的数据存储单元,数据库中任何DML和DLL操作都是对数据页的读写操作。
  DM备份的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,有效的数据页包括数据文件的描述页和被分配使用的数据页。备份过程中所产生操作数据,以日志的形式写到归档日志中,为了保证数据可以恢复到最新的状态,需要将备份中产生的归档日志也保存到备份集中。
  DM还原与恢复是备份的逆过程,还原是将备份集中的有效数据页重新写入目标数据文件的过程。恢复是指通过重做归档日志,将数据库状态恢复到备份结束时的状态,也可以恢复到指定时间点和指定LSN。恢复结束后,对于未提交的事务会自动进行回滚。
在这里插入图片描述

1.2 基本概念

1.2.1 表空间与数据文件

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

1.2.2 重做日志

  重做日志(REDO),记录了所有物理页的修改,基本信息包括操作类型、表空间号、文件号、页号、页内偏移、实际数据等。数据库中的DML和DDL操作都会转化为对某些数据文件、某些数据页的修改。通过redo日志可以将数据恢复到故障时的状态。
  DM数据库默认包含两个扩展名为log的日志文件,用来保存redo日志,称为联机重做日志文件,这两个文件循环使用。任何数据页从内存缓冲区写入磁盘之前,必须保证其对应的redo日志已经写入到联机日志中。

1.2.3 归档日志

  DM数据库可以在归档和非归档两种模式下运行。DM支持多种归档方式,包括本地归档、即时归档、实时归档、异步归档和远程归档。其中本地归档和远程归档与备份还原密切相关。系统运行在归档模式下,当出现介质故障损坏时,利用归档日志可以恢复至故障发生前的某一时刻。除了表备份还原,其他的联机备份与还原必须运行在归档模式下。

1.2.4 LSN介绍

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

DM数据库中与LSN相关的视图: V$RLOG和V$RAPPLY_PARALLEL_INFO

包含以下集中类型的LSN:
CUR_LSN:系统已经分配的最大LSN值。
FLUSE_LSN:已经发起日志刷盘请求,但还没有真正写入联机redo日志文件的最大LSN值。
FILE_LSN:已经写入联机redo日志文件的最大LSN值
CKPT_LSN:检查点LSN,所有LSN<=CKPT_LSN的上物理事务修改的数据页,已经从buffer缓冲区写入磁盘
APPLY_LSN:数据库还原恢复后写入联机redo日志文件的日志包的原始最大LSN值
RPKG_LSN:数据库还原恢复后已经重演日志的最大LSN

1.2.5 包序号介绍

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

1.2.6 检查点

  DM数据库运行过程中,用户的所有操作都在内存中进行,每修改一条记录都必须先把记录所在的数据页加载到BUFFER缓冲区中,然后进行修改。
  检查点(checkpoint)是一个数据库事件,功能是按照数据页的修改顺序,一次将BUFFER缓冲区中的脏页写入磁盘,并在这个过程中动态调整CKPT_LSN值,释放日志空间。

  DM检查点分为:完全检查点和部分检查点

  • 完全检查点:会将内存缓冲区中的所有脏页写入磁盘,并调整CKPT_LSN,在数据库正常关闭时会产生一个完全检查点
  • 部分检查点:根据参数CKPT_FLUSH_RATE和CKPT_FLUSH_PAGES确定每次检查点刷脏页的数量。部分检查点过程中,不影响正常的DML和DDL操作。

1.2.7 备份集

  备份集:用来存放备份过程中产生的备份数据及备份信息。一个备份集对应一次完整的备份。一个备份集就是一个目录,包括一个或多个备份片文件以及一个备份元数据文件。

1.2.7.1 备份片

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

1.2.7.2 元数据

元数据文件用来存放备份信息,后缀.meta。元数据文件中包含以下备份信息:

  1. 备份集本身相关信息:是否联机备份、备份的范围、备份加密信息、备份压缩信息等
  2. 备份源库的建库参数信息:DSC的节点数、是否大小写敏感、PAGE_CHECK属性等
  3. 数据文件信息:数据文件、文件大小、相关表空间信息等
  4. 备份片信息:包含哪些备份片文件、备份片大小等
  5. 备份库的dm.ini参数信息和密钥文件
1.2.7.3 备份集搜索目录

  备份集搜索目录包括4类:

  1. 数据库的默认备份目录
  2. WITH BACKUPDIR子句指定的目录
  3. 还原时备份集所在的上级目录
  4. 增量备份时基备份所在的上级目录

  如果使用第三方备份(介质为TAPE类型),则只搜索WITH BACKUPDIR子句指定的备份集目录

1.2.8 备份

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

1.2.8.1 逻辑备份和物理备份
  • 逻辑备份(dexp):将指定对象库级、模式级、表级的数据导出到文件的备份方式
  • 物理备份:直接扫描数据文件,找出那些已经分配、使用的数据页,拷贝并保存到备份集中
1.2.8.2 联机备份和脱机备份
  • 联机备份:数据库处于运行状态、并正常提供服务下进行的备份操作。可以通过客户端工具连接到数据库实例后,执行SQL语句进行,也可以通过配置作业,定时完成自动备份。在备份过程中如果有事务在运行,为了确保数据的一致性,需要将备份期间产生的redo日志一起备份。因此,只能在配置本地归档并开启归档模式的数据库上执行联机备份。
  • 脱机备份:数据库处于关闭状态时进行的备份操作。
1.2.8.3 数据备份和归档日志备份

  数据备份主要针对数据文件内容,包括:库备份、表空间备份、表备份

  • 库备份:对整个数据库执行备份,拷贝数据库所有数据文件的有效数据页
  • 表空间备份:针对特定表空间执行备份,必须在联机状态下执行
  • 表备份:拷贝指定表中的所有数据页到备份集中,并会记录各个数据页之间的逻辑关系用以恢复,只能在联机状态下备份,并且一次只能备份一张表,不支持增量表备份
  • 归档日志备份:针对归档日志进行操作,扫描归档目录收集归档日志文件,并将归档日志写入到备份集中。既可以在数据库运行状态下进行联机归档日志备份,也可以在数据库关闭状态下进行脱机归档日志备份
1.2.8.4 日志备份范围
  • 节点BEGIN_LSN:归档日志起始LSN值,BEGIN_LSN=备份开始时检查点偏移前一个RLOG_PKG的MX_LSN
  • 节点BEGIN_SEQ:BEGIN_LSN所在redo日志包的序号
  • 节点END_LSN:归档日志结束LSN值,END_LSN=备份结束时FILE_LSN
  • 节点END_SEQ:END_LSN所在redo日志包的序号
  • BAK_END_LSN:全局备份结束LSN。单节点等于END_LSN,DSC环境,大于等于最大的END_LSN
  • 如果BEGIN_SEQ=END_SEQ,表明备份过程中没有任何数据被修改。增量备份时要求BEGIN_LSN必须大于等于基准备份的END_LSN,如果不满足条件,则强制生成检查点,直到满足条件为止
1.2.8.5 一致性备份和非一致性备份
  • 一致性备份的备份集包含了完整的数据文件内容和归档日志信息,利用一个单独的备份集可以将数据库恢复到备份时状态。
  • 非一致性备份的备份集只包含数据文件相关内容,没有归档日志信息,利用非一致性备份还原的数据库,无法直接启动,必须借助归档日志来恢复。表空间备份、指定WITHOUT
    LOG选项的联机备份生成的备份集都是非一致性备份集。
1.2.8.6 完全备份和增量备份
  • 完全备份生成的备份集包含了指定库或者表空间的全部有效数据页。当数据规模比较大的情况下,生成的完全备份集通常会比较大,备份时间也会较长。
  • 增量备份是在某个特定的备份基础上,收集数据库新修改的数据页进行备份,可以有效减少备份集的空间占用、提高备份速度。DM的增量备份分为差异增量备份和累积增量备份。两者都必须以一个完全备份作为其基备份。完全备份是增量备份的基础。

1.2.9 还原与恢复

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

1.2.9.1 逻辑还原和物理还原
  • 逻辑还原就是逻辑备份的逆过程,通过dimp工具,把dexp导出的备份数据重新导入到目标数据库。
  • 物理还原是物理备份的逆过程,通过DMRMAN工具或者SQL语句,把备份集中的数据内容(数据文件、数据页、归档文件)重新拷贝、写入目标文件。
1.2.9.2 联机还原和脱机还原
  • 联机还原:指数据库处于运行状态时,通过SQL语句执行还原操作。表还原可以在联机状态下执行。
  • 脱机还原:指数据库处于关闭状态时,通过DMRMAN工具进行。库备份、表空间备份和归档备份,可以执行脱机还原。
1.2.9.3 数据还原和归档日志还原
  • 数据还原:分为库还原、表空间还原和表还原,表空间还原既可以是表空间备份集,也可以是库备份集。还原的目标表空间不能是TEMP表空间,只能是MAIN、SYSTEM、ROLL表空间和用户定义的表空间。
  • 归档日志还原:将归档日志备份集中的归档日志内容,重新生成到指定目录中
1.2.9.4 完全还原和增量还原
  • 完全还原:指直接利用完全备份集进行数据还原操作。
  • 增量还原:通过增量备份集进行数据还原操作。增量还原过程中隐含了一个完全还原操作,如果增量备份集的基备份集被删除了,将无法使用这个增量备份集进行还原。

二、备份还原原理

2.1 归档说明

  备份与恢复过程都依赖归档日志,归档日志是保证数据一致性和完整性的重要保障。当出现介质故障时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点。

2.1.1 本地归档

  Redo日志本地归档(LOCAL)就是将redo日志写入到本地归档日志文件的过程。配置本地归档情况下,redo日志刷盘线程将redo日志写入联机redo日志文件后,对应的RLOG_PKG由专门的归档线程写入本地归档日志文件中。
  本地归档日志文件不能被覆盖,如果配置了归档日志空间上限,系统会自动删除最早生成的归档redo日志文件,腾出空间。
  为了最大限度地保护数据,当磁盘空间不足导致归档写入失败,系统将自动挂起等待,直到释放出足够的空间后继续运行。DM提供了按照指定的时间或指定的LSN删除归档日志的系统函数(SF_ARCHIVELOG_DELETE_BEFORE_TIMESF_ARCHIVELOG_DELETE_BEFORE_LSN),谨慎使用。避免归档日志缺失,导致数据无法恢复。

2.1.2 远程归档

  远程归档(REMOTE ARCHIVE):将归档目录配置在远程节点上。专用用于DSC环境中,远程归档采用双向配置的方式,双向配置远程归档就是两个节点将自己的远程归档相互配置在对方机器上,所有节点都拥有一套包括所有节点的,完整的归档日志。

  两种配置方式:

  • 一是共享本地归档的远程归档,即将远程归档目录配置为另一节点的本地归档目录,来共享它的本地归档日志文件。
  • 二是通过MAL发送的远程归档,将写入本地归档的REDO日志信息,通过MAL发送到远程节点并写入到指定的目录中,生成远程归档日志文件。

在这里插入图片描述
在这里插入图片描述
  在出现节点故障情况下,通过MAL发送的远程归档的内容有可能是不完整的,而共享本地归档的远程归档,其本质就是本地归档,因而不存在远程归档日志丢失问题,因此更加可靠高效。

2.1.3 归档切换

  由于本地归档和远程归档是异步写入归档日志文件的,redo日志在写入联机日志文件后,再由专门的归档线程负责将这些REDO日志写入本地归档日志文件。通过以下SQL命令,可以完成归档切换功能:

  • alter database archivelog current;
  • alter system archive log current;
  • alter system switch logfile;

2.1.4 归档修复

  数据库异常关闭时,可能存在部分REDO日志未写入本地归档日志文件中,归档日志文件中的内容比实际可恢复的数据少一部分。在恢复时就无法恢复到最新状态,需要从联机日志文件拷贝该部分日志以补齐归档日志。
  本地归档修复会扫描联机日志文件,将那些已经写入到联机日志文件、但还没有写入到归档日志文件的REDO日志,重新写入到归档日志中,流程如下:

  1. 收集本地归档日志文件
  2. 扫描归档文件,获取最后一个有效RLOG_PKG偏移
  3. 首先,根据偏移来截取最后一个本地归档日志中有效内容,删除掉RLOG_PKG偏移之后的多余内容,保留RLOG_PKG偏移之前的内容,并调整日志文件头信息。然后,再创建一个新的空的归档日志文件。
  4. 扫描联机日志文件,拷贝缺失的REDO日志并写入新创建的归档日志文件

2.2 备份

  DM的物理备份一般包括数据备份和日志备份两部分,数据备份是拷贝数据页内容,日志备份则是拷贝备份过程中产生的REDO日志。
在这里插入图片描述

  • 完全备份:备份程序会扫描数据文件,拷贝所有被分配、使用的数据页,写入到备份文件中(如上图第二根横轴)。库备份会扫描整个数据库的所有数据文件,表空间备份则只扫描表空间内的数据文件。
  • 增量备份:<=基备份END_LSN的所有数据页已经写入磁盘,但是基于BEGIN_LSN与END_LSN之间的数据页可能被修改,导致数据库中的数据与备份文件中的数据不一致,所以增量备份会拷贝LSN>基备份BEGIN_LSN的数据页写入到备份片文件中。(如上图第三根横轴)
  • 日志备份:就是将备份过程中产生的REDO日志拷贝到备份片文件中,用来在数据库还原结束后,将数据库恢复到一致性状态。首先在备份开始时记录一个BEGIN_LSN,在备份结束后记录一个END_LSN,在BEGIN_LSN和END_LSN之间的REDO日志,就对应备份过程中用户对数据的修改。其中BEGIN_LSN=CKPT_LSN,作为日志备份的起点,END_LSN=FILE_LSN,作为日志的终点。

2.3 还原与恢复

  还原恢复时,若性能较差,则可以通过适当增大dm.ini中buffer参数或者根据主机核数适当调整REDOS_PARALLEL_NUM参数值来提升还原恢复性能。

2.3.1 数据还原

2.3.1.1 库还原

  DM既可以将一个已存在的数据库作为还原目标库,也可以指定一个路径作为还原目标库的目录。库还原的主要步骤包括:清理目标库环境、重建数据库文件、拷贝数据页、重建联机日志文件、修改配置参数等

2.3.1.1.1 清理目标库环境

  如果目标库存在数据库,还原首先解析dm.ini配置文件,获取dm.ctl控制文件路径,删除控制文件中的数据文件,如果指定OVERWRITE选项,若待还原文件存在则删除,不指定,若待还原文件存在则报错
  如果指定还原到一个目录,如果指定OVERWRITE参数,检查目标目录内是否存在相关文件,如果存在在恢复过程中会自动删除这些已存在的文件。如果不指定OVERWRITE参数,如果存在相关文件则报错。

2.3.1.1.2 重建数据库文件

  如果将一个已存在数据库作为还原目标,需要将目标数据库的dm.ini路径作为还原参数。还原过程中,会重新创建数据文件,并将相关信息写入dm.ctl控制文件中
  如果将数据库还原到指定目录,则会在这个目录创建一个dm.ini配置文件,设置CTL_PATH、SYSTEM_PATH配置项指向这个目录,并在这个目录下创建dm.ctl控制文件。DMDSC不支持指定目录还原数据库。
  数据文件重建策略:

  • 目标库和备份集中的SYSTEM_PATH路径相同,按照备份集中记录的原始路径创建文件
  • 目标库和备份集中的SYSTEM_PATH路径不相同,默认在目标库的SYSTEM_PATH目录下创建文件
  • 使用mapped file指定源文件与目标文件的映射关系,定制数据库文件的物理分布情况。
2.3.1.1.3 重置目标库

  具体包括:

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

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

  • 设置还原标志,标识当前库为指定要还原的库,不允许使用

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

2.3.1.1.4 修改配置参数

  还原到指定库时,默认会保留目标库的配置参数不变,也可以指定REUSE DMINI子句,使用备份集中的配置参数替换目标库dm.ini的参数。还原到指定目录时,会重新建立一个dm.ini配置文件,并用备份集中的参数值来设置这些配置项。一般与路径相关的配置参数,不会被替换,而是保留目标库的原始值不变

  注意事项:

  1. 指定的dm.ini必须存在且各项配置信息有效,其中CTL_PATH必须配置且路径必须有效
  2. 若指定目录还原,则指定目录作为数据库系统目录处理
  3. 由于还原是要确保数据库数据的完整性,因此,对于增量备份的还原,需要搜集完整的备份集链表,然后从前到后,逐个还原备份集中数据
2.3.1.2 表空间还原

  表空间还原只可以在脱机状态下执行。通过使用DMRMAN工具执行,对表空间状态没有限制。如果还原后状态为RES_OFFLINE,表明表空间已进行还原操作,但数据不完整。在部分数据文件损坏时,可以指定还原数据文件,跳过损坏的数据文件。也吃吃mapped file进行数据文件映射。
  表空间状态包括:ONLINE(联机状态)、OFFLINE(脱机状态)、RES_OFFLINE(还原状态)、CORRUPT(损坏状态)。V$TABLESPACE视图中的STATUS$分别对应的是0/1/2/3。

2.3.1.3 表还原

  表还原主要包括三部分内容:表结构还原、数据还原、重建索引和约束。
  如果还原目标表不存在,则利用备份集中记录的建表语句重建目标表,如果存在,则清除表中数据、删除二级索引和约束。数据还原过程从表备份集拷贝数据页,重构数据页之间的逻辑关系,并重新形成一个完整的表对象。在数据还原结束后,使用备份集中记录的信息,重新再表上创建二级索引,并建立各种约束。
  表备份集允许跨库还原,但要求还原目标库与源库的数据页大小等建库参数相同。需要匹配的建库参数参考下表:
在这里插入图片描述

2.3.2 数据恢复

  数据恢复是指在还原执行结束后,重做REDO日志,将数据库恢复到一致性状态,并执行更新DB_MAGIC的过程。其中重做REDO日志可以多次执行,直到恢复到目标状态。还原结束后,必须经过恢复操作,数据库才允许启动。

2.3.2.1 指定备份集恢复

  指定备份集恢复的简要过程包括:

  • (1)从备份集读取REDO日志,并生成一个临时的本地归档日志文件
  • (2)利用生成的临时归档日志文件,重做REDO日志,并将数据修改写入磁盘
  • (3)删除临时生成的归档日志文件
  • (4)更新数据库日志信息,设置CKPT_LSN为最后一个重做的REDO日志LSN值
  • (5)修改数据库状态为ACTIVE,标记数据库启动时需要进行相应的回滚活动事务、PURGE已提交事务
2.3.2.2 指定归档恢复

  利用本地归档日志进行恢复时,DMRMAN工具会扫描指定的归档日志目录,收集与恢复数据库PERMANENT_MAGIC值相等的归档日志文件。

  指定归档恢复的执行场景主要包括:

  • 将还原后处于非一致性状态的数据库恢复到一致性状态
  • 将已经处于一致性状态的数据库尽可能地恢复到最新状态
  • 将数据库恢复到指定时间点状态
  • 将数据库恢复到指定LSN产生时的状态
2.3.2.3 更新DB_MAGIC

  若备份集满足BEGIN_LSN=END_LSN,即在备份过程中未产生REDO日志,则使用此备份集还原只需要更新DB_MAGIC即可完成恢复。更新DB_MAGIC不重做REDO日志,仅仅更新库的DB_MAGIC值和数据库状态

2.3.2.4 DMDSC库恢复

  DMDSC库与普通单节点数据库的区别在于DMDSC库的多个节点共同维护一份数据,每个节点上都有独立的联机日志和本地归档日志。重做REDO日志恢复时,需要重做所以所有节点上的REDO日志,因此需要提供各个节点的归档日志

2.4 归档日志备份与还原

2.4.1 归档日志备份

  归档日志备份:专门用来备份本地归档日志,将符合条件的本地归档日志文件拷贝到备份集中保存起来。如果本地归档目录中包含多个不同数据库的归档日志文件,也只会备份一个特定数据库的归档日志。由于本地归档的异步实现机制,为了确保归档日志备份的完整性,一般会在归档日志备份之前执行一个归档切换动作。

2.4.2 归档日志还原

  归档日志还原:使用归档日志备份集,既可以将归档日志文件还原到指定数据的归档目录,也可以还原到用户指定的任意归档目录中

  归档日志还原的过程包括:

  • (1)根据过滤条件,从归档日志备份集收集需要还原的归档日志文件
  • (2)在指定的归档目录创建归档文件。如果归档文件已经存在,默认采用认为该归档完好,生成一条日志记录,不再还原策略。也可以使用OVERWRITE策略参数:1表示认为归档文件完好,不在还原该归档文件,添加一条日志记录;2表示存在同名归档立即报错返回,终止还原;3表示强制删除归档,重新还原同名归档
  • (3)从备份集拷贝REDO日志,写入目标归档日志文件

社区地址:https://eco.dameng.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值