备份还原

DMDSC 集群备份还原的功能、语法与单节点数据库基本保持一致,本章主要介绍 DMDSC 集群与单节点数据库备份、还原的使用方法差异,并说明在 DMDSC 集群中执行备份还原的一些注意事项。关于备份还原更详细的说明,请参考《DM8 备份与还原》手册。

16.1 DMDSC 和单节点差异

达梦数据库中,备份还原的对象包括:表、表空间和数据库。表备份还原的操作对象是数据页,而数据页是通过 BUFFER 获取的,与存储无关,因此 DMDSC 集群的表备份还原与单节点没有任何区别。表空间备份只需要访问属于这个表空间的数据文件,并不需要备份归档日志,因此 DMDSC 集群的表空间备份与单节点没有任何区别。表空间还原要求将表空间数据恢复到最新状态,需要重做归档日志,但 DMDSC 集群中本地归档往往是保存在本地磁盘中的,因此如何访问其他节点生成的归档日志,是 DMDSC 集群需要解决的问题。

数据库备份也需要访问所有节点的本地归档日志文件,同样需要解决如何访问其他节点的归档日志问题;另外,与单节点不同的是,DMDSC 集群备份过程中还需要记录备份开始和结束时各个节点的 LSN 信息,LSN 信息需要在节点间进行传递。数据库还原的过程就是从备份集中读取数据页并重新写入数据库文件中,而 DMDSC 集群的数据库文件是保存在共享存储中的,因此不要特别处理。但是,数据库的恢复操作有可能需要访问本地归档日志文件,因此也需要解决如何访问其他节点归档日志问题。

虽然可以将本地归档(LOCAL ARCHIVE)保存到共享存储中,解决其他节点归档日志问题,但是出于数据安全性和成本的考虑,一般建议将数据库备份文件和本地归档日志文件保存在本地磁盘中,避免由于共享存储的损坏,导致所有数据丢失、无法恢复的风险。而拷贝远程节点归档日志文件,到备份还原执行节点的做法,不但操作繁琐,而且在归档日志量比较大的情况,执行效率也存在很大问题。为了简化操作步骤,降低数据丢失风险,达梦数据库提供了远程归档(REMOTE ARCHIVE)功能,解决了 DMDSC 集群备份还原过程中访问其他节点归档日志文件问题。

配置远程归档后,DMDSC 集群中各个节点接收其他节点发送的 REDO 日志,并保存在节点的本地目录后,DMDSC 集群备份恢复的使用方法与单节点基本保持一致。

16.2 远程归档

16.2.1 简介

远程归档专门用于 DMDSC 环境中。

所谓远程归档(REMOTE ARCHIVE),顾名思义就是将归档目录配置在远程节点上。远程归档采用双向配置的方式,双向配置远程归档就是两个节点将自己的远程归档相互配置在对方机器上。集群中所有的节点,都拥有一套包括所有节点的,完整的归档日志文件。

具体有两种配置方式:一是共享本地归档的远程归档,即将远程归档目录配置为另一节点的本地归档目录,以此来共享它的本地归档日志文件;二是通过 MAL 发送的远程归档,即将写入本地归档的 REDO 日志信息,通过 MAL 发送到远程节点,并写入远程节点的指定归档目录中,形成远程归档日志文件。

注意

远程归档必须双向配置。否则,单向配置后远程归档会处于无效状态。

远程归档与本地归档的主要区别是 REDO 日志写入的位置不同,本地归档将 REDO 日志写入数据库实例所在节点的磁盘,而远程归档则将 REDO 日志写入到其他数据库实例所在节点的指定归档目录。

通过 MAL 发送的远程归档与本地归档的另外一个区别就是归档失败的处理策略不同:本地归档写入失败(比如磁盘空间不足),系统将会挂起;而远程归档失败则会直接将远程归档失效,不再发送 REDO 日志到指定数据库实例。当节点间网络恢复、或者远程节点重启成功后,系统会自动检测并恢复远程归档,继续发送新写入的 REDO 日志,但不会主动补齐故障期间的 REDO 日志。因此,在出现节点故障等情况下,通过 MAL 发送的远程归档的内容有可能是不完整的,而本地归档的内容肯定是完整的;如果备份还原恰好需要用到这段丢失的远程归档日志,那么可以从源端的本地归档拷贝、补齐这部分内容。而共享本地归档的远程归档,其本质就是本地归档,因而不存在远程归档日志丢失的问题,加上共享本地归档精省去了 MAL 发送的过程,因此更加可靠高效。综上所述,DM 推荐用户使用共享本地归档的远程归档。

16.2.1.1 共享本地归档的远程归档

共享本地归档的远程归档就是双向配置的两个节点都不再发送 REDO 日志到对方机器上生成远程归档日志文件,而是将对方的本地归档作为自己的远程归档。例如,节点 0 的本地归档配置在 ASM 共享存储或其他共享磁盘上。节点 1 可以通过将自己的远程归档目录设置为节点 0 的本地归档目录,将节点 0 的本地归档日志文件作为自己的远程归档日志文件。图 15.1 展示了一个共享本地归档的远程归档的双向配置示意图。

共享本地归档的远程归档

图16.1 共享本地归档的远程归档

DMDSC 集群中,各个节点配置一个远程归档为其他节点的本地归档,通过这种共享本地归档的方式,可以在任意一个节点上,访问到 DMDSC 集群所有节点产生的、完整的归档日志文件。若节点出现故障,故障恢复后,因为该节点配置的远程归档为其他节点的本地归档,该节点的远程归档内容仍然是完整的,因此无需进行手动修复。

16.2.1.2 通过 MAL 发送的远程归档

通过 MAL 发送的远程归档就是将写入本地归档的 REDO 日志信息,发送到远程节点,并写入远程节点的指定归档目录中。远程归档的触发时机是,在 REDO 日志写入本地归档日志文件的同时,将 REDO 日志通过 MAL 系统发送给指定的数据库实例。

DMDSC 集群中,如果各个节点在配置本地归档之外,再双向配置一个远程归档,那么就可以在任意一个节点的本地磁盘中,找到一套 DMDSC 集群所有节点产生的、完整的归档日志文件。下图展示了一个通过 MAL 发送的远程归档的双向配置示意图。

通过 MAL 发送的远程归档

图16.2 通过MAL发送的远程归档

若节点出现故障,故障恢复后,因为该节点配置的通过 MAL 发送的远程归档,该节点的远程归档内容可能不完整,可能缺少故障期间的 REDO 日志,因此需要进行手动修复。

16.2.2 远程归档配置方法

与其他归档类型一样,远程归档也是配置在 dmarch.ini 文件中,远程归档相关的主要几个配置项包括:

  1. ARCH_TYPE 设置为 REMOTE,表示是远程归档;
  2. ARCH_DEST 设置为远程数据库实例名,表示 REDO 日志发送到这个节点;
  3. ARCH_INCOMING_PATH 设置为本地存储路径,用于保存 ARCH_DEST 实例发送的 REDO 日志;
  4. 若配置共享本地归档的远程归档,还需要在 DMARCH.INI 中配置全局参数 ARCH_LOCAL_SHARE = 1。其他方式,不需要设置此参数。

16.2.3 DMDSC 归档配置方法

一般建议 DMDSC 集群中的节点,除了配置本地归档之外,再双向配置集群中所有其他节点的远程归档。查询 v$dm_arch_ini、v$arch_status 等动态视图可以获取归档配置以及归档状态等相关信息。

下面以两节点 DMDSC 集群为例,说明如何配置远程归档,DSC0 和 DSC1 是 DMDSC 集群中的两个实例,双向配置共享本地归档的 REMOTE 归档:

DSC0 实例的 DMARCH.INI 配置:

ARCH_LOCAL_SHARE		= 1
[ARCHIVE_LOCAL1]
	ARCH_TYPE			= LOCAL
	ARCH_DEST			=+DMDATA/DSC0/arch
	ARCH_FILE_SIZE		= 128
	ARCH_SPACE_LIMIT	= 0
[ARCH_REMOTE1]
	ARCH_TYPE			= REMOTE
	ARCH_DEST			= DSC1
	ARCH_INCOMING_PATH 	=+DMDATA/DSC1/arch
	ARCH_FILE_SIZE		= 128
	ARCH_SPACE_LIMIT	= 0

DSC1 实例的 DMARCH.INI 配置:

ARCH_LOCAL_SHARE		= 1
[ARCHIVE_LOCAL1]
	ARCH_TYPE			= LOCAL 
	ARCH_DEST			=+DMDATA/DSC1/arch
	ARCH_FILE_SIZE		= 128
	ARCH_SPACE_LIMIT	= 0
[ARCH_REMOTE1]
	ARCH_TYPE			= REMOTE
	ARCH_DEST			= DSC0
	ARCH_INCOMING_PATH =+DMDATA/DSC0/arch
	ARCH_FILE_SIZE		= 128
	ARCH_SPACE_LIMIT	= 0
注意

配置共享本地归档的远程归档时,远程归档指定的本地归档目录必须和真实的本地归档路径完全一致,否则服务器启动过程中校验失败。

16.3 DMDSC 备份集

备份集除了保存备份对象的数据(数据页和归档日志),还记录了备份库节点的描述信息。单节点库生成的备份集,可以认为是只包含一个节点的特殊备份集。与节点相关的描述信息主要包括:

  1. DMDSC 库的节点数,单节点库为 1
  2. 备份开始时 DMDSC 节点的状态,以及各节点 REDO 日志的起始 LSN 和 SEQ
  3. 备份结束时 DMDSC 节点 REDO 日志的结束 LSN 和 SEQ
  4. 备份集中记录了执行备份节点的 dm.ini 配置参数,还原时使用备份集中的参数值覆盖目标库节点的 dm.ini 文件

备份操作可以在 DMDSC 集群的任意节点执行,生成的备份集可以存放在本地磁盘上,也可以存放到共享存储的 DMASM 目录中。但考虑到数据安全性,一般建议将备份集保存在本地磁盘上。可以通过以下方式,将备份集生成到本地磁盘:

  1. 使用 dminit 初始化库时,将默认备份目录 bak_path 设置为本地磁盘
  2. 修改 DMDSC 集群中所有节点的 dm.ini 配置文件,将 bak_path 设置为本地磁盘
  3. 执行备份时,手动指定备份集路径为本地磁盘

16.4 DMDSC 备份还原实例

下面以从归档恢复为例说明 2 节点(DSC0、DSC1)DMDSC 环境下的备份恢复:

  1. 搭建 DMDSC 环境,每个节点都需要双向配置共享本地归档的远程归档。归档配置示例如下:

DSC0 实例的 dmarch.ini 配置:

ARCH_LOCAL_SHARE		= 1
[ARCHIVE_LOCAL1]
	ARCH_TYPE			= LOCAL
	ARCH_DEST			=+DMDATA/DSC0/arch
	ARCH_FILE_SIZE		= 128
	ARCH_SPACE_LIMIT	= 0
[ARCH_REMOTE1]
	ARCH_TYPE			= REMOTE
	ARCH_DEST			= DSC1
	ARCH_INCOMING_PATH =+DMDATA/DSC1/arch
	ARCH_FILE_SIZE	    = 128
	ARCH_SPACE_LIMIT	= 0

DSC1 实例的 dmarch.ini 配置:

ARCH_LOCAL_SHARE		= 1
[ARCHIVE_LOCAL1]
	ARCH_TYPE			= LOCAL 
	ARCH_DEST			= +DMDATA/DSC1/arch
	ARCH_FILE_SIZE	 	= 128
	ARCH_SPACE_LIMIT	= 0
[ARCH_REMOTE1]
	ARCH_TYPE			= REMOTE
	ARCH_DEST			= DSC0
	ARCH_INCOMING_PATH = +DMDATA/DSC0/arch
	ARCH_FILE_SIZE		= 128
	ARCH_SPACE_LIMIT	= 0
  1. 启动 DIsql,联机备份数据库。备份其中任意一个节点即可备份整个 DMDSC 环境。
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_dsc';
  1. 还原数据库。还原数据库之前可选择对备份文件进行校验。需要注意的是,待还原的目标库可以是单机库,也可以是 DMDSC 库,且节点个数允许不同。
RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_dsc';
  1. 恢复数据库。DMDSC 库恢复要求各节点归档完整性由用户保证,即各节点的本地归档都能够访问到。若本地归档配置在 ASM 共享存储上,RMAN 工具启动时,需要指定 DCR_INI 参数。
./dmrman dcr_ini=/dmdata/dameng/dmdcr.ini
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR '+DMDATA/DSC0/arch','+DMDATA/DSC1/arch';
  1. 数据库更新
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC

16.5 DMDSC 镜像备份还原实例

16.5.1 配置文件说明

为了支持从老版本库备份还原至镜像版本库。首先,备份时需要指定镜像数与条带化类型,具体为在导出备份集映射文件(mappedfile)后,修改映射文件配置参数 data_mirror 和 data_striping,其他参数无需改动;还原时以通过指定映射文件方式进行还原恢复。

下面对备份集映射文件中的配置参数进行说明。

表16.1 mappedfile配置参数
参数 含义
fil_id 文件 ID
ts_id 表空间 ID
ts_name 表空间名
data_path 表空间路径
mirror_path DMASM 镜像环境专用。表示表空间创建时指定的数据文件镜像路径,和 ASM 文件镜像无关。
data_mirror DMASM 镜像环境专用。表示镜像类型。SYSTEM/MAIN/ROLL 表空间数据文件副本数,取值 1、2 或 3;缺省为 3
data_striping DMASM 镜像环境专用。表示条带化类型。数据文件条带化粒度,取值 0、32、64、128、256。缺省为 32。单位 KB

16.5.2 备份还原

DMDSC 镜像备份与普通 DSC 备份过程一致,参考[16.4 DMDSC 备份还原实例](#16.4 DMDSC 备份还原实例)的备份文件。

1)生成备份集后需要使用新版 dmrman 工具导出备份集映射文件,映射文件内容参考[16.5.1 配置文件说明](#16.5.1 配置文件说明)。

RMAN> DUMP BACKUPSET '/home/dm_bak/db_full_bak_for_dsc' DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' MAPPED FILE '/opt/dmdbms/data/map_file_01.txt';

2)手动修改映射文件中的镜像和条带化类型参数(data_mirror 和 data_striping)。例如,修改为 data_mirror=2 和 data_striping=64。

3)指定映射文件方式进行还原数据库。

RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_dsc' MAPPED FILE '/opt/dmdbms/data/map_file_01.txt';

4)恢复数据库。

RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_dsc';

5)数据库更新。

RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;

16.6 使用说明

  1. 配置远程归档时,必须同时配置本地归档;
  2. DMDSC 集群环境中,备份还原涉及到的 trace 文件路径、DUMP 命令的映射文件路径、SHOW 命令的备份集信息输出文件路径都不支持 DMASM 类型文件;
  3. 由于 DMDSC 集群中,各个节点可能存在 LSN 值相同的 REDO 日志,恢复过程中无法严格校验归档日志的完整性;因此,需要用户保证全局归档日志的完整性;
  4. 在恢复过程中创建的数据文件,优先使用原始路径创建,如果创建失败,则会在 system_path 目录下创建。因此,在恢复结束后,需要检查一下是否有数据文件创建在本地磁盘上,如果有则需要用户手动执行 SQL,将这些文件重新存放到共享存储、或者 DMASM 文件系统中,确保数据文件可以被 DMDSC 集群中的所有节点访问;
  5. 归档日志是恢复数据库的关键,建议将归档文件与数据库文件分别保存到不同的物理磁盘上,防止归档文件和数据文件同时损坏,以降低数据无法修复的风险;
  6. 如果需要访问 DMASM 文件系统,DMRMAN 必须设置 DCR_INI 参数,指定 DCR 的访问配置;
  7. 数据库恢复过程中,需要保证本地归档和远程归档的完整性。如果由于节点故障等原因,导致远程归档不完整,则需要使用 DMRMAN 工具在对应节点修复本地归档后,将修复后本地归档拷贝过来,再进行恢复;
  8. 还原操作指定 REUSE DMINI 选项时,会将备份集中的 dm.ini 参数更新还原节点上的 dm.ini 配置文件,DMDSC 集群中其他节点的 dm.ini 并不会更新,需要用户手动修改。
微信扫码
分享文档
扫一扫
联系客服