执行RMAN恢复的高级场景_在新主机上还原数据库

使用RESTORE和RECOVER命令在新主机上还原数据库。当你想执行灾难恢复过程测试或永久地移动数据库到新的主机时,在新主机上还原数据库是很有用的。

如果在本节中使用这个过程,那么还原的数据库的DBID与原始数据库的DBID是相同的。不要在与源数据库相同的恢复目录中注册以这种方式创建的测试数据库。因为两个数据库的DBID是相同的,测试数据库的元数据会干扰RMAN还原和恢复源数据库的能力。

如果你的目标是创建目标数据库的一个副本在一台新主机上持续的使用,那么使用RMAN的DUPLICATE命令而不是这个过程。DUPLICATE命令分配一个新的DBID给创建的数据库,让它可以在与源数据库相同的恢复目录中注册。


1.准备在新主机上还原数据库

必须执行某些步骤来准备还原数据库到一台新主机上。

步骤包括以下:
1)记录源数据库的DBID。
2)让源数据库初始化参数文件在新主机上可访问。使用操作系统工具从旧主机复制文件到新主机。
3)如果只是执行还原操作测试,那么确保RMAN没有连接到恢复目录。否则,RMAN记录关于还原的数据文件的元数据在恢复目录中。这个元数据会干扰将来尝试还原和恢复主数据库。
如果由于控制文件不够大来包含你必须还原的所有备份的RMAN仓库数据,必须使用恢复目录,那么使用Oracle Data Pump来导出目录和导入它到不同的数据库模式中。然后,使用复制的恢复目录进行还原测试。否则,恢复目录将还原的数据库视为当前的目标数据库。
4)确保用来还原操作的备份在还原主机上可访问。例如,如果备份是使用介质管理器制作,那么验证磁带设备连接到了新主机。如果正在使用磁盘副本,那么使用以下部分的步骤。
5)如果执行生产数据库的测试还原,那么在还原环境中在还原数据库之前执行以下其中一个操作:
a.如果测试数据库使用与生产数据库使用的恢复区域物理上不同的快速恢复区域,那么设置测试数据库实例的DB_RECOVERY_FILE_DEST为新的位置。
b.如果测试数据库使用与生产数据库使用的恢复区域物理上相同的快速恢复区域,那么设置测试数据库实例的DB_UNIQUE_NAME为与生产数据库不同的名称。

如果你不执行上面其中一个操作,那么RMAN假设你正在还原生产数据库和从快速恢复区域中删除闪回日志,因为它们被视为不可用。


2.还原磁盘备份到新主机上

使用磁盘上的数据文件副本或备份集将数据库移动到新主机,必须手动传输文件到新主机。这个过程假设RMAN在使用恢复目录。

还原备份到新主机:
1)启动RMAN,连接到目标数据库和恢复目录。

2)运行LIST命令查看数据文件的备份和控制文件的自动备份。
例如,查看数据文件副本:
LIST COPY;

例如,查看控制文件备份:
LIST BACKUP OF CONTROLFILE;

自动备份的备份片名称必须使用%F替换变量,这样自动备份片名称包含字符串c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII代表DBID,YYYYMMDD是备份生成的日期时间戳,QQ是16进制序列号。

3)使用操作系统工具复制备份到新主机。
例如,复制所有数据文件副本到新主机的?/oradata/trgt目录:
% cp -r /disk1/*dbf /net/new_host/oracle/oradata/trgt

复制自动备份备份片到新主机的/tmp目录:
% cp -r /disk1/auto_bkp_loc/c-1618370911-20130208-00 /net/new_host/tmp

当从非缺省的位置还原自动备份时,必须使用SET CONTROLFILE AUTOBACKUP FORMAT命令。


3.在新主机上测试数据库还原

建议测试是否可以还原数据库到新主机上。

在这个场景中,你有两个网络连接的Linux主机,hosta和hostb。目标数据库是hosta上的trgta,注册在恢复目录catdb中。你想在hostb上测试还原和恢复trgta,同时保持数据库trgta在hosta上运行。

现在,假设hostb的目录结构与hosta不同。目标数据库位于/net/hosta/dev3/oracle/dbs,但你想还原数据库到/net/hostb/oracle/oradata/test。你在介质管理器上有两台主机可以访问的数据文件,控制文件,归档redo日志和spfile的磁带备份。数据库TRGTA的ORACLE_SID是TRGTA,还原的数据库不更改它。

警告:如果为测试目的还原数据库,决不能同时连接RMAN到测试数据库和恢复目录。

还原数据库到新主机上:
1) 确保目标数据库的备份在新主机上可访问。

为了测试灾难恢复,必须拥有目标数据库的可恢复的备份。当准备灾难备份策略时,确保数据文件,控制文件,spfile的备份在hostb上是可还原的。因此,必须配置介质管理软件以便hostb是介质管理客户端和可以读取hosta上创建的备份集。

2) 配置hostb上的ORACLE_SID。

这个场景假设你想在hostb上启动RMAN和通过操作系统验证。然而。你必须本地或通过网络服务名称连接到hostb。

在使用管理员权限登录hostb之后,编辑/etc/group文件以便包含在DBA组中:
dba:*:614:<your_user_name>

在hostb上设置与hosta上相同的ORACLE_SID环境变量:
% setenv ORACLE_SID trgta

3)在hostb上启动RMAN,连接到目标数据库而不连接到恢复目录。
% rman NOCATALOG
RMAN> CONNECT TARGET /

4)设置DBID,启动数据库实例而不挂载数据库。
SET DBID 1340752057;
STARTUP NOMOUNT

RMAN无法找到还未被还原的spfile,但使用虚设的spfile启动实例:

startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/net/hostb/oracle/dbs/inittrgta.ora'
trying to start the Oracle instance without parameter files ...
Oracle instance started

5)还原和编辑spfile。

因为当你制作备份时启动了控制文件自动备份特性,spfile是包含在备份中。如果还原的自动备份有非缺省的格式,那么使用SET CONTROLFILE AUTOBACKUP FORMAT命令标明格式。

分配一个通道给介质管理器,然后还原spfile作为客户端参数文件,使用SET命令标明自动备份的位置(在这个示例中,自动备份位于/tmp):

RUN
{
    ALLOCATE CHANNEL c1 DEVICE TYPE sbt PARMS ‘…’;
    SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/tmp/%F’;
    RESTORE SPFILE
        TO PFILE ‘?/oradata/test/inittrgta.ora’
        FROM AUTOBACKUP;
    SHUTDOWN ABORT;
}

6)编辑还原的初始化参数文件。

更改位置相关的参数,例如,以_DEST结尾的来反映新的目录结构。
- IFILE
- LOG_ARCHIVE_DEST_1
- CONTROL_FILES

7)使用编辑的初始化参数文件重启实例。
STARTUP FORCE NOMOUNT PFILE=‘?/oradata/test/inittrgta.ora’;

8)从自动备份中还原控制文件,然后挂载数据库。
RUN
{
    ALLOCATE CHANNEL c1 DEVICE TYPE sbt PARMS ‘…’;
    RESTORE CONTROLFILE FROM AUTOBACKUP;
    ALTER DATABASE MOUNT;
}

RMAN还原控制文件到在CONTROL_FILES初始化参数指定的所有位置。

9)使用新的文件名称登记数据文件副本或CATALOG START WITH(如果你知道使用相同的前缀可以轻松定位到目录中的所有文件)。
CATALOG START WITH ‘/oracle/oradata/trgt/’;

如果你想单独指定每个文件,可以执行CATALOG命令如下:
CATALOG DATAFILECOPY
‘/oracle/oradata/trgt/system01.dbf’, ‘/oracle/oradata/trgt/undotbs01.dbf’,
‘/oracle/oradata/trgt/cwmlite01.dbf’, ‘/oracle/oradata/trgt/drsys01.dbf’,
‘/oracle/oradata/trgt/example01.dbf’, ‘/oracle/oradata/trgt/indx01.dbf’,
‘/oracle/oradata/trgt/tools01.dbf’, ‘/oracle/oradata/trgt/users01.dbf’;

10)在新数据库上启动SQL*Plus会话,查询记录在控制文件中的数据库文件名称。

因为控制文件来自trgta数据库,记录的文件名称使用原始的hosta文件名称。可以查询V$视图来获取这个信息。

COLUMN NAME FORMAT a60
SPOOL LOG '/tmp/db_filenames.out'
SELECT FILE# AS "File/Grp#", NAME
FROM V$DATAFILE
UNION
SELECT GROUP#,MEMBER
FROM V$LOGFILE;
SPOOL OFF
EXIT

11)编写RMAN还原和恢复脚本。脚本必须包括以下步骤:
a.对于目标主机上的每个还原到与源主机上不同路径的文件,使用SET NEWNAME来指定目标主机上的新路径。
b.对于每个创建在与源主机上不同位置的在线redo日志,使用SQL的ALTER DATBASE RENAME FILE命令来指定目标主机上的路径名称。
c.执行SET UNTIL操作来限制恢复到归档redo日志的结束位置。如果没有指定SET UNTIL命令,恢复停止时报错(因为在线redo日志不能备份的原因,在其它主机上无法恢复在线redo日志中的更改)。
d.还原和恢复数据库。
e.运行SWITCH DATAFILE ALL以便控制文件认可新的路径名称为正式的数据文件新名称。

以下代码显示执行还原和恢复操作的RMAN脚本reco_test.rman。
RUN
{
    # allocate a channel to the tape device
    ALLOCATE CHANNEL c1 DEVICE TYPE sbt PARMS ‘…’;
    # rename the data files and online redo logs
    SET NEWNAME FOR DATAFILE 1 TO ‘?/oradata/test/system01.dbf’;
    SET NEWNAME FOR DATAFILE 2 TO ‘?/oradata/test/undotbs01.dbf’;
    SET NEWNAME FOR DATAFILE 3 TO ‘?/oradata/test/cwmlite01.dbf’;
    SET NEWNAME FOR DATAFILE 4 TO ‘?/oradata/test/drsys01.dbf’;
    SET NEWNAME FOR DATAFILE 5 TO ‘?/oradata/test/example01.dbf’;
    SET NEWNAME FOR DATAFILE 6 TO ‘?/oradata/test/indx01.dbf’;
    SET NEWNAME FOR DATAFILE 7 TO ‘?/oradata/test/tools01.dbf’;
    SET NEWNAME FOR DATAFILE 8 TO ‘?/oradata/test/users01.dbf’;
    ALTER DATABASE RENAME FILE ‘/dev3/oracle/dbs/redo01.log’
        TO ‘?/oradata/test/redo01.log’;
    ALTER DATABASE RENAME FILE ‘/dev3/oracle/dbs/redo02.log’
        TO ‘?/oradata/test/redo02.log’;
    # Do a SET UNTIL to prevent recovery of the online logs
    SET UNTIL SCN 123456;
    # restore the database and switch the data file names
    RESTORE DATABASE;
    SWITCH DATAFILE ALL;
    # recover the database
    RECOVER DATABASE;
}
EXIT

12)执行前面步骤中创建的脚本。
例如,启动RMAN连接到目标数据库,运行@命令:
% rman TARGET / NOCATALOG
RMAN> @reco_test.rman

13)使用RESETLOGS选项打开还原的数据库。
ALTER DATABASE OPEN RESETLOGS;

警告:当你在下个步骤中打开数据库时,不要连接到恢复目录。否则,创建的新的数据库转生会自动注册到恢复目录中,生产数据库的文件名称会被脚本中指定的新数据文件名称所替换。

14)可选地,删除测试数据库和所有它的文件。

注:如果你使用ASM磁盘组,那么DROP DATABASE命令是安全移除测试数据库的文件的唯一方式。如果还原到非ASM存储,那么你也可以使用操作系统命令来移除数据库。

使用DROP DATABASE命令来自动删除与数据库相关的所有文件。以下示例删除数据库文件:
STARTUP FORCE NOMOUNT PFILE=‘?/oradata/test/inittrgta.ora’;
DROP DATABASE;

因为你连接到恢复目录时不执行还原和恢复操作,恢复目录不包含任何还原的文件或在测试过程中执行的步骤的记录。类似地,trgta数据库的控制文件也完全不会受测试影响。




来源:《Oracle Database Backup and Recovery User’s Guide,19c》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值