分布式数据库目前仅支持库级联机备份和库级脱机还原恢复,且备份还原的操作和语法与非分布式数据库环境基本一致,详细使用方法可以参考《DM8备份与还原》和《DM8共享存储集群》。
本章就分布式数据库所做的特殊支持,以及和非分布式数据库的差异给出具体说明。
17.1 联机备份
DM数据库备份包括数据备份和日志备份,前者主要将数据文件中的有效数据页保存到备份集中,后者则是把备份期间产生的REDO日志也写入备份集,这样在还原时才能将数据库恢复到一致性状态。
17.1.1 与非分布式数据库环境备份的差异
和非分布式数据库环境备份相比,分布式数据库备份具有两点不同。详细介绍如下:
- 在分布式数据库中,表空间和数据文件存在两个新属性:副本数和区块策略(即宏区或微区)。备份时这些信息也会记录到备份集中(非分布式数据库中副本数记为0),还原时会据此重建表空间和数据文件。
- 为了备份实时的REDO日志,非分布式数据库的联机备份要求必须配置并开启本地归档。但对分布式数据库而言,数据库服务器会把REDO发送到日志服务器进行归档和执行,备份期间产生的REDO日志完全可以从日志服务器获取,因而联机备份时不要求配置本地归档。
17.1.2 环境要求
DMTDD的库级联机备份要求DCS、DRS工作正常,且所有数据文件的区块至少存在一个可用副本。
17.1.3 备份示例
- 正常启动DMTDD环境
- 启动dmap
./dmap ##ds的dm.ini中指定bak_use_ap=2时可不启动
- 备份数据库
启动disql连接DATA SERVER执行库级备份。
backup database backupset'bak_path';
或
backup database backupset'bak_path' WITHOUT LOG;
注意使用WITHOUT LOG备份的备份集,还原时就必须指定归档恢复才能达到一致性。归档可以是数据库服务器的本地归档(DMTDD一般不需要配置),也可以是日志服务器中保存的该数据库服务器的远程归档。对后者,还需要将归档进一步处理后才能执行恢复。
17.2 脱机还原恢复
还原与恢复是备份的逆过程,还原主要是将数据页从备份集中拷贝回数据库文件,恢复则是重做REDO日志将数据库恢复到一致性状态。恢复REDO日志包括从备份集恢复和从归档恢复。
17.2.1 特性与差异
- 脱机工具dmrman还原恢复时,需要通过日志服务器重建数据,因此为dmrman提供参数dfs_ini,指定与日志服务器连接的配置文件dmdfs.ini
参数使用如下:
格式: dmrman.exe KEYWORD=value
例程: dmrman.exe CTLFILE=c:\dm7data\dameng\res_ctl.txt
关键字说明
---------------------------------------------------------------------------
DFS_INI
指定dmdfs.ini路径;若未指定且当前目录中dmdfs.ini存在,则使用当前目录中的dmdfs.ini。可单独使用,也可与其他参数配合使用
- DMTDD需要根据目标库dm.ini的参数配置确定其是否为DMTDD环境,因此不支持指定目录还原
- 上一节提到DMTDD的备份集中包含了表空间的副本数和区块策略信息,还原恢复时也会依据这些信息重建表空间,若目标环境不满足重建条件,则还原恢复失败。例如备份库有一个3副本的微区表空间和一个4副本的宏区表空间,则还原该库的备份集时,要求目标DMTDD也至少有3个可用的微区容灾域和4个可用的宏区容灾域(宏区或微区的区块大小并不要求一致)
- 当目标环境与备份集的副本分布情况不匹配时,可以通过为RESTORE和RECOVER命令指定FORCE选项来强制执行还原恢复
语法如下:
RESTORE DATABASE '<INI文件路径>'[REUSE DMINI][OVERWRITE][FORCE]...
RECOVER DATABASE '<INI文件路径>'[FORCE] <with_archdir_lst_stmt>...
RECOVER DATABASE '<INI文件路径>'[FORCE] FROM BACKUPSET...
指定该选项后,表空间和数据文件的重建策略为:
第一步,对非DMTDD的备份集(即副本数为0),优先使用dmdfs.ini配置的副本数(缺省为3)重建文件,且系统表空间默认使用微区,用户定义表空间默认使用宏区
第二步,在上一步的基础上,若目标环境的可用宏区微区容灾域不足(也可能为0,即没有配置宏区或微区,此时需要切换区块策略),则将副本数调整为目标环境的可用容灾域数
- 还原后,原数据库服务器在日志服务器中的远程归档会失效,需要手动清理
- 日志服务器的远程归档必须经过整理和修复才可用于数据恢复,否则可能会报错日志不连续
- 服务器秘钥文件(dm_service.prikey或者dm_external.config)不支持创建在DFS中,因此当选择某个DSC数据库服务器执行还原恢复后,需要手动拷贝秘钥文件到其他节点所在机器的对应目录(同一机器则不用拷贝)
17.2.2 环境要求
- 目标库必须是一个已存在的数据库服务器,还原时需指定该库对应的数据库服务器的dm.ini
- 目标环境的所有DFS组件都需要正常启动,包括DCS后台数据库、DCS、DSS、主备DRS、DRAS等
- 目标日志服务器若配置了其他数据库服务器,则还原时这些数据库服务器必须关闭,且在还原恢复期间禁止启动
17.2.3 远程归档修复
日志服务器收到数据库服务器发送的REDO日志后,会先进行归档再分发到存储服务器,正常情况下这些归档中的日志一定是连续的。但若配置了DRS主备,且在数据库服务器运行过程中发生过DRS主备切换,则主备DRS上的归档可能存在不连续和重复的REDO日志。这样的归档必须经过修复和去重后才可用于数据恢复。
- 使用工具dmrachk修复连续性和去重
将目标数据库服务器在主备日志服务器上的远程归档拷贝到同一台机器的同一个目录下(归档文件可能同名,需要修改命名),通过dmrachk工具可以将该目录下来自同一个数据库服务器的归档日志抽取出来,经过连续性排序和去重后生成新的归档。
dmrachk的部分参数如下:
格式: dmrachk keyword=value
例程: dmrachk arch_fil=d:\a.log
强制参数: 必须指定arch_fil或者arch_path
关键字说明(默认值)
------------------------------------------------------------------
ARCH_PATH 指定一个归档目录
ARCH_BAK_PATH 指定备份文件路径,用于存储归档修复过程中的重复文件
BEGIN_LSN 指定归档目录时,指定排除小于该LSN的文件
END_LSN 指定归档目录时,指定排除大于该LSN的文件
BEGIN_SEQ 指定归档目录时,抽取大于该SEQ的文件
END_SEQ 指定归档目录时,抽取小于该SEQ的文件
- 使用工具dmlcvt调整归档文件元信息
拷贝出来的远程归档最后一个文件的元信息不是最新的,需要通过dmlcvt工具调整和修复。
dmlcvt的部分参数如下:
格式: dmlcvt.exe KEYWORD=value
例程: dmlcvt.exe F_TYPE=4 F_PATH=c:\dmdbms\data\DAMENG\dm.ini OUT_PATH=d:\temp
关键字说明(默认值)
----------------------------------------------------------------
F_TYPE 必选,表示读入的日志文件类型,与F_PATH配合使用
1 F_PATH必须指向归档目录
2 F_PATH必须指向某个归档文件
3 F_PATH必须指向单个联机日志文件
4 F_PATH必须指向文件dm.ini
5 F_PATH必须指向ptx->log组成的二进制文件
6 F_PATH必须指向从内存中dump出来的rpkg->data文件
F_PATH 必选,对应F_TYPE的路径
当F_TYPE = 6:
1.gdb dump memory /tmp/x.log begin_addr end_addr
2.dmlcvt f_type=6 f_path='/tmp/x.log' out_path='/tmp/log_analyse' rec_data=1
OP_TYPE 可选,操作类型,对应不同的F_TYPE.
当F_TYPE = 1:
1 打印日志内容,默认值
当F_TYPE = 2:
1 打印日志内容,默认值
2 截断归档日志文件到指定LSN(LSN_START)
3 截断归档日志文件到SEQ(ARCH_SEQ)
4 拷贝从指定LSN(LSN_START)开始的归档文件内容到指定的输出目录(OUP_PATH)中自动新建的归档文件
5 调整归档文件元信息
- 修复示例
假定备份库是为基于DMTDD的DSC环境,多个数据库服务器连接同一个DRS主备,则主DRS和备DRS均保存了每个DS的远程归档。
- 为每个DS创建归档目录,这里假定DSn对应/data/dm/arch_n,将DSn在主备DRS的远程归档均拷贝到此目录(命名冲突时修改归档文件名)。
- 对每个DS的远程归档使用dmrachk修复和去重。命令如下:
./dmrachk arch_path=/data/dm/arch_narch_bak_path=/data/dm/arch_n_repair
经过处理的归档保存在源目录,arch_bak_path用于保存重复的归档日志。
- 对每个DS去重后的最后一个归档文件使用dmlcvt调整元信息。命令如下:
./dmlcvt f_type=2 op_type=5
f_path=/data/dm/arch_n/ARCH000_0x3392CA2C[0]_2019-11-20_16-12-11.log out_path=/data/dm/log
dmlcvt直接在源文件中调整元信息,out_path保存了调整情况的日志。
经过以上步骤,才可直接指定arch_1-arch_n等归档目录进行REDO日志恢复。
17.2.4 还原恢复示例
- 准备还原库
还原库本身必须是一个正常的DATA SERVER,所以还原前需要按照本文中的DMTDD搭建方法搭好DMTDD系统。脱机还原时需要用到DATA SERVER的dm.ini,dmdfs.ini和dcr_ini。
- 启动dmrman和dmap
./dmrman dfs_ini=dmdfs.ini dcr_ini=dmdcr0.ini
./dmap ##dmrman指定use_ap=2时可不启动
- 还原数据库
RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FORCE FROM
BACKUPSET '/home/dm_bak/db_full_bak_for_dsc';
- 从备份集恢复
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FORCE FROM
BACKUPSET '/home/dm_bak/db_full_bak_for_dsc';
- 从归档恢复
这里必须指定数据库服务器的本地归档或经过修复的DRS中的远程归档,恢复时还可以指定截止时间或截止LSN。
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FORCE WITH
ARCHIVEDIR'/data/dm/arch_1','/data/dm/arch_2';
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FORCE WITH
ARCHIVEDIR'/data/dm/arch_1','/data/dm/arch_2'UNTIL TIME '2019-11-20 16:13:40.624931';
- 更新数据库magic
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC