RMAN恢复RAC备份到高版本单机环境

最近在做一个RAC升级测试11.2.0.1升级到11.2.0.4,为保证业务能在11.2.0.4版本下正常运行,现需要将数据库还原至11.2.0.4的单机环境下,数据库大小为1.04T左右,在这里总结下步骤。

环境简介:

1.本次试验的环境为11.2.0.4的单机环境,存储为Windows NTFS文件系统,系统版本为Windows server 2008R2企业版。

2.备份来自一个双节点的RAC环境,操作系统同为Windows Server 2008R2,存储为ASM磁盘组。

3.RAC环境下文件总大小为1.04T,备份集大小为290G左右。

还原步骤:

1.将备份集拷贝至测试环境。

环境中D盘中安装有Oracle11.2.0.4版本的数据库,安装了默认的orcl实例,实例处于关闭状态。

本次将备份集拷贝至目录'D:\backup\'下。

2.在E盘中新建oradata目录,路径为'E:\oradata'。

E盘空间大小为1.5T,用于存放本次的数据文件,新建archive目录用于存放归档日志。

3.创建实例并强制启动到nomount状态。

oradim -new -sid leo --创建了实例名为leo的windows服务
set oracle_sid=leo --设置当前窗口环境变量
rman target /
startup nomount force --强制启动到nomount状态以便进行spfile的恢复

4.RMAN中还原spfile。

在备份集中找到最小的几个文件,逐一尝试恢复spfile直到成功恢复,当然如果主库正常可以到主库服务器上进入RMAN执行list backup of spfile进行快速识别,图省事可以一个个试。

restore spfile from 'D:\backup\xxx';--恢复spfile
startup nomount force;

5.生成pfile并删除RAC相关参数。

create pfile='D:\pfileleo.txt' from spfile;

删除其中所有的RAC相关参数,同时将audit_file_dest设置为D盘oracle安装目录下的adump目录,并制定log_archive_dest_1的值为E:\archive,此外修改控制文件位置为E:\oradata\control01.ctl,E:\oradata\control02.ctl后保存。

6.使用新的pfile启动到nomount状态。

startup force pfile='D:\pfileleo.txt';

7.RMAN恢复控制文件。

restore controlfile from 'D:\backup\xxx';--xxx为时间最晚的控制文件备份
alter database mount;

8.RMAN注册备份集并恢复数据库。

catalog start with 'D:\backup\';--后继输入yes即可
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
allocate channel c6 type disk;
allocate channel c7 type disk;
allocate channel c8 type disk;
set newname for datafile 1 to 'E:\oradata\xxx.dbf';                       
set newname for datafile 2 to 'E:\oradata\xxx.dbf';                     
set newname for datafile 3 to 'E:\oradata\xxx.dbf';                      
set newname for datafile 4 to 'E:\oradata\xxx.dbf';                      
set newname for datafile 5 to 'E:\oradata\xxx.dbf';                      
set newname for datafile 6 to 'E:\oradata\xxx.dbf';                      
set newname for datafile 7 to 'E:\oradata\xxx.dbf';                      
set newname for datafile 8 to 'E:\oradata\xxx.dbf';                        
...有多少个数据文件加几个set newname语句。
restore database;
switch datafile all; 
}

在这里可以使用如下类似SQL在原库生成set newname的语句:

select 'set newname for datafile '||file_id||' to '||'E:\oradata\'||substr(file_name,xxx) as "SQL" from dba_data_files;--xxx的大小取决于文件目录的长度。

注意要把路径''括起来再执行,以上生成的语句不带'号。

9.Recover数据库。

Restore之后接下来需要进行Recover,选择的恢复终点如下:

1)通过list archivelog all命令找到归档日志的备份,找到每个thread的sequence值最大的备份集,记录下其next scn号及sequence值,假设分别为seq1 scn1和seq2 scn2。

2)比较scn1和scn2选择其中较小的作为本次恢复终点,假设本次较小者为scn1,其对应seq1的序列号。

run {
set until sequence seq1 thread 1;
recover database;
}

10.修改所有redo文件的目录

Alter database rename file '+DATA/xxx/onlinelog/redo01.log' to 'E:\oradata\redo01.log';--有多少个redo文件执行多少次。...

11.以upgrade模式打开数据库。

shutdown immediate;
startup upgrade;

12.删除原临时文件组并新建。

create temporary tablespace TEMP1 tempfile dbfE:\temp01.b' size 2048M;
alter database default temporary tablespace TEMP1;
drop tablespace TEMP;

13.重新以upgrade模式打开数据库并执行升级脚本。

shutdown immediate;
startup upgrade;
sqlplus / as sysdba
>@?/rbdms/admin/catupgrd.sql

14.升级完毕后重启数据库。

shutdown immediate;
startup

注意升级完毕后可能会出现账号密码不正确的情况,手动修改吧。

rac

相关推荐