本章节介绍使用联机拷贝数据库进行还原恢复的方式,主要内容包括:
- 概述
- 约束和限制
- 拷贝文件
- 修改文件路径参数
- 还原恢复
- 高级主题
4.1 概述
使用备份集进行还原恢复,在还原阶段,通过重建数据文件、联机日志文件以及更新控制文件等操作重建了目标库的文件结构,并在恢复阶段重做日志将目标库恢复到最新状态。理论上,拷贝源库得到的一个副本,相当于目标从备份集还原后的状态,利用归档日志应该能将该副本恢复到最新状态,以下章节将对该还原恢复方式进行介绍。
4.2 约束与限制
- 调用 SP_BACKUP_COPY_BEGIN 前需设置当前连接 AUTO_COMMIT 为 FALSE,关闭事务自动提交。
- SP_BACKUP_COPY_BEGIN 和 SP_BACKUP_COPY_END 必须在同一连接中执行。
- 每次调用 SP_BACKUP_COPY_END 前必须先调用 SP_BACKUP_COPY_BEGIN,否则将报错。
- 调用 SP_BACKUP_COPY_BEGIN 和 SP_BACKUP_COPY_END 之间不能执行 CREATE TABLESPACE 操作。
4.3 拷贝文件
联机拷贝数据库,主要包含三个步骤:
- 拷贝开始前,记录系统各节点 BEGIN_LSN/BEGIN_SEQ 信息,以确定恢复阶段日志重做的起点。
开始拷贝前,调用系统过程 SP_BACKUP_COPY_BEGIN 记录当前系统 BEGIN_LSN/BEGIN_SEQ 信息。
SP_BACKUP_COPY_BEGIN();
- 开始拷贝数据库,使用常规方式拷贝数据库文件到新的目录。
拷贝数据库文件到备份目录,拷贝数据库文件时,必须包含配置文件(dm.ini)、控制文件(dm.ctl)、秘钥文件(dm_service.prikey)、联机日志文件(DAMENG01.log 和 DAMENG02.log)以及数据文件(*.DBF)。
cp /home/dm/DB_FOR_COPY/DAMENG/dm.ini /home/dm/DB_COPY/
cp /home/dm/DB_FOR_COPY/DAMENG/dm.ctl /home/dm/DB_COPY/
cp /home/dm/DB_FOR_COPY/DAMENG/dm_service.prikey /home/dm/DB_COPY/
cp /home/dm/DB_FOR_COPY/DAMENG/DAMENG01.log /home/dm/DB_COPY/
cp /home/dm/DB_FOR_COPY/DAMENG/DAMENG02.log /home/dm/DB_COPY/
cp /home/dm/DB_FOR_COPY/DAMENG/*.DBF /home/dm/DB_COPY/
- 拷贝结束后,调用系统过程 SP_BACKUP_COPY_END,记录系统各节点 END_LSN/END_SEQ 信息,以在恢复结束后校验数据完整性。该过程同时生成一个仅包含 meta 文件的空备份集,并将记录的信息填充到该文件。
SP_BACKUP_COPY_END(path varchar)中 path 参数指定备份集绝对路径,当参数为相对路径时,将在默认备份目录下生成该备份集。
SP_BACKUP_COPY_END('/home/dm/bak/BAKSET_COPY');
注意联机拷贝数据库前必须已经配置了归档,否则调用SP_BACKUP_COPY_END将报错;该过程产生的空备份集只能用于源库副本的还原,当利用该备份集还原其他库或从该备份集进行恢复时将报错。
4.4 修改文件路径参数
当源库的一个副本拷贝到不同的路径后,在还原恢复前需要修改文件中全部的路径参数。
例如,修改 dm.ini 文件中参数 CTL_PATH 的路径。
//拷贝前:
CTL_PATH = /home/dm/DB_FOR_COPY/DAMENG/dm.ctl #ctl file path
//拷贝后,修改为:
CTL_PATH = /home/dm/DB_COPY/dm.ctl #ctl file path
其他路径参数的修改方法类似。控制文件中路径参数修改方法比较特殊,控制文件修改之前需要先从 ctl 文件转换为 txt 文件,修改之后,再转为 ctl 文件。
例如,修改 dm.ctl 文件中的路径参数步骤如下:
首先,将 dm.ctl 文件转为文本文件 dmctl.txt。
dmctlcvt TYPE=1 SRC=/home/dm/DB_COPY/dm.ctl DEST=/home/dm/DB_COPY/dmctl.txt
其次,修改 dmctl.txt 中的路径参数。将原始路径修改为拷贝副本所在的路径。
//拷贝前:
# file path
fil_path=/home/dm/DB_FOR_COPY/DAMENG/SYSTEM.DBF
//拷贝后,修改为:
# file path
fil_path=/home/dm/DB_COPY/SYSTEM.DBF
最后,将修改完成后的 dmctl.txt 转为二进制文件 dm.ctl,并替换原始 dm.ctl 文件。
dmctlcvt TYPE=2 SRC=/home/dm/DB_COPY/dmctl.txt DEST=/home/dm/DB_COPY/dm.ctl
4.5 还原
从源库的副本进行还原,语法与脱机库还原完全一致,语法请参考[3.3.5 数据库还原](#3.3.5 数据库还原)。
从源库的副本进行还原主要包含以下步骤:
- 启动 DMRMAN,利用空备份集还原源库的副本;
RMAN>RESTORE DATABASE '/home/dm/DB_COPY/dm.ini' FROM BACKUPSET '/home/dm/bak/BAKSET_COPY';
- 利用源库的归档日志将副本恢复到最新状态;
RMAN>RECOVER DATABASE '/home/dm/DB_COPY/dm.ini' WITH ARCHIVEDIR '/home/dm/DB_FOR_COPY/DAMENG/arch';
- 恢复成功后更新副本 DB_MAGIC。
RMAN>RECOVER DATABASE '/home/dm/DB_COPY/dm.ini' UPDATE DB_MAGIC;
4.6 高级主题
DMDSC 环境下,联机拷贝进行还原的操作流程与单机环境基本相同,只在某些操作上略有差别,下面以使用模拟共享磁盘搭建的两节点 DMDSC 为例进行介绍,主要内容包括:
- 拷贝文件
- 修改文件路径参数
- 还原
拷贝文件
开始拷贝前,调用系统过程 SP_BAKCUP_COPY_BEGIN,与单机环境相同,可连接任意节点执行。
SP_BACKUP_COPY_BEGIN();
拷贝文件时,由于 DMDSC 环境数据文件通过 DMASM 管理并存储在共享磁盘上,因此需拷贝所有 ASM 磁盘文件(*.asm)、DMASM 配置文件(dmasvrmal.ini、dmdcr_cfg.ini 以及 dmdcr.ini)以及各节点配置文件(dm.ini)和 MAL 配置文件(dmmal.ini)。
cp /home/dm/DSC_FOR_COPY/asmdisks/*.asm /home/dm/DSC_COPY/asmdisks/
cp /home/dm/DSC_FOR_COPY/dmdcr_cfg.ini /home/dm/DSC_COPY/
cp /home/dm/DSC_FOR_COPY/dmasvrmal.ini /home/dm/DSC_COPY/
cp /home/dm/DSC_FOR_COPY/dsc0/dmdcr.ini /home/dm/DSC_COPY/dsc0/
cp /home/dm/DSC_FOR_COPY/dsc1/dmdcr.ini /home/dm/DSC_COPY/dsc1/
cp /home/dm/DSC_FOR_COPY/dsc0/dm.ini /home/dm/DSC_COPY/dsc0/
cp /home/dm/DSC_FOR_COPY/dsc1/dm.ini /home/dm/DSC_COPY/dsc1/
cp /home/dm/DSC_FOR_COPY/dsc0/dmmal.ini /home/dm/DSC_COPY/dsc0/
cp /home/dm/DSC_FOR_COPY/dsc1/dmmal.ini /home/dm/DSC_COPY/dsc1/
拷贝结束后,调用系统过程 SP_BACKUP_COPY_END 生成空备份集,这一步与单节点相同,可在任意节点执行。
SP_BACKUP_COPY_END('/home/dm/bak/BAKSET_DSC_COPY');
修改文件路径参数
当共享磁盘文件拷贝到不同的目录后,需修改相关路径参数。
- 修改 dmdcr_cfg.ini 中的路径参数 DCR_VTD_PATH 和 DCR_EP_ASM_LOAD_PATH。以 DCR_VTD_PATH 为例进行说明。
//拷贝前:
DCR_VTD_PATH = /home/dm/DSC_FOR_COPY/asmdisks/votedisk.asm
//拷贝后,修改为:
DCR_VTD_PATH = /home/dm/DSC_COPY/asmdisks/votedisk.asm
dmdcr_cfg.ini 修改后,需利用 dmasmcmd 工具重新初始化 DMASM 磁盘,其中 dmasmcmd 工具存放在 DM 安装目录的 bin 目录下。
ASM>INIT DCRDISK '/home/dm/DSC_COPY/asmdisks/dcrdisk.asm' FROM
'/home/dm/DSC_COPY/dmdcr_cfg.ini' IDENTIFIED BY 'password'
其中,dcrdisk.asm 为拷贝前被初始化为 DCR 磁盘的裸设备文件,参数 IDENTIFIED BY 设置登录 DMASM 文件系统的密码。
- 修改 dmdcr.ini 文件中的路径参数 DMDCR_PATH、DMDCR_MAL_PATH、DMDCR_ASM_STARTUP_CMD 和 DMDCR_DB_STARTUP_CMD。
以 0 号节点为例,修改 DMDCR_DB_STARTUP_CMD 参数。
//拷贝前:
DMDCR_DB_STARTUP_CMD = /dm/bin/dmserver path=/home/dm/DSC_FOR_COPY/dsc0/dm.ini
dcr_ini=/home/dm/DSC_FOR_COPY/dsc0/dmdcr.ini
//拷贝后,修改为:
DMDCR_DB_STARTUP_CMD = /dm/bin/dmserver path=/home/dm/DSC_COPY/dsc0/dm.ini
dcr_ini=/home/dm/DSC_COPY/dsc0/dmdcr.ini
- 修改 dm.ini 文件中的路径参数 CONFIG_PATH。dm.ini 中的 ASM 路径参数不需要修改。
以 0 号节点为例,修改 CONFIG_PATH 参数。
//拷贝前:
CONFIG_PATH = /home/dm/DSC_FOR_COPY/dsc0 #config path
//拷贝后,修改为:
CONFIG_PATH = /home/dm/DSC_COPY/dsc0 #config path
- 修改 dmdcr_cfg.ini、dmasvrmal.ini 以及 dmmal.ini 文件中的 IP 参数。以 dmdcr_cfg.ini 中的 DCR_EP_HOST 参数为例。
//拷贝前:
DCR_EP_HOST = 192.168.0.111
//拷贝后,修改为:
DCR_EP_HOST = 192.168.0.222
还原
DMDSC 环境下的还原恢复操作与单机环境完全相同,对任意一个节点进行还原恢复即可,具体请参考 4.5 还原。