Rman_异地跨平台跨版本的恢复总结及案例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rman_异地跨平台跨版本的恢复总结及案例相关的知识,希望对你有一定的参考价值。
http://blog.itpub.net/30126024/viewspace-2122858/
结论:
1. Rman可以跨平台,网上有资料基于ID 413586.1(metalink上有),但是还是少用rman来进行跨平台操作。
2. Rman可以跨版本,但是一般只能从低到高,且要执行catupgrd.sql。不能从高到低,唯一成功的是低版本升级到高版本后备份可以恢复到同样的低版本
跨平台的实例:
Solaris上的9i的DB通过rman备份后恢复到RHEL5.4上的11.2.0.1
跨版本的实例:
RMAN_11.2.0.1异机恢复到11.2.0.4
RMAN_11.2.0.1升级到11.2.0.4的DB异机恢复到11.2.0.1版本的DB
RMAN_11.2.0.1升级到11.2.0.4的DB异机恢复到12.1.0.2
RMAN_备份在异地恢复
A的整库备份在B还原
以下相当于到在一个只安装了oracle软件的B服务器上进行的恢复,B没有任何关于A库的数据,也发现在整个过程中都没有去手动创建B库的在线日志,因为B库在线日志会在alter database open resetlogs的时候自动创建,只要B服务器的在线日志路径和A库一样即可(如果B服务器已经安装了oracle软件并创建了DB,则第五、六步可以合并成一步即目标库根据spfile创建pfile,并修改pfile中的db_name为源库DB名称,并在目标库创建源库datafile、online redo log对应的目录)
1. A库执行backup database format ‘/backup/rman/full_%U.bak’;
在A的/backup/rman会出现两个以full命名的文件,一个是数据库备份,一个参数文件和控制的备份
2. A库再执行alter system archive log current或alter system switch logfile
在A的归档目录下生成刚刚最新的归档日志
以上两步可接变成一步如下
Rman>backup database format ‘/u01/app/rman/full%U.bak‘ plus archivelog format ‘/u01/app/rman/arch%U.bak‘
3. 把A库/backup/rman下的两个文件和刚刚最新的归档日志拷贝到B库一样的目录
4. 修改目标库的.bash_profile中ORACLE_SID=源库的sid,并source应用一下
5. 在B库执行echo $ORACLE_SID,等于A库sid的情况下再执行
rman target /
rman>startup nomount
rman>restore spfile to pfile ‘$ORACLE_HOME目录/dbs/initA的SID.ora‘ from‘/backup/rman/full_09l9esg4_1_1‘;
6. 修改刚刚还原出来的pfile,并根据pfile文件创建诸如dump、archivelog、datafile、online redo log等路径,如B库创建了和A库一样的控制文件路径、数据文件路径、日志文件路径
7. B库shutdown abort再startup nomount
8. B库rman 恢复操作
rman>restore controlfile from‘/backup/rman/full_09l9esg4_1_1‘;
rman>alter database mount;
rman>restore database;
rman>recover database until sequence 主库拷贝过来的那个归档日志的sequence+1
以上如果使用归档日志的备份包需要在recover database之前执行如下两句(需要catalog 最后一个归档日志的备份包,为什么需要catalog是因为它在controlfile备份包之后生成的。XX只需要from最大的那个sequence-2就可以了,不需要源库和目标库的archivelog目录一致,只要目标库有archivelog目录就可以了,会自动restore到目标库的archivelog目录)
rman>catalog backuppiece ‘‘;
rman>restore archivelog from sequence XX;
9. B库open resetlogs
Sqlplus>alter database open resetlogs
心得:
第8步,如果没有了A库最新的归档日志,restore database后直接recover database,会报错说找不到归档日志,所以进行整库备份后,必须手动归档,并把归档日志也拷贝到异地
第8步,万一不小心在mount状态时修改了B的归档路径,导致A库和B库的归档日志路径不一样,则把A库的归档日志拷贝到B库的实际归档路径,即可恢复,不要重新创建一个归档路径和A库一样,再把归档日志拷贝到这个新建的归档路径,一切以B库的archive log list中的路径为准
20150812RMAN异地还原的操作的例子
1. 源库A执行如下
Rman>delete noprompt archivelog until time ‘sysdate-1‘;
Rman>backup database format ‘/orabackup/rman_backup/data%U.bak‘ plus archivelog format ‘/orabackup/rman_backup/arch%U.bak‘
2. 把源库的备份包拷贝至目标库B(并非/orabackup/rman_backup/,所以后面第8步要catalog数据文件备份包和归档日志文件备份包)
3. 在B库的linux下执行ORACLE_SID=A库的sid或修改.bash_profile中ORACLE_SID=A库的sid并source .bash_profile
4. B库关闭DB并确认spfile已经删除(顺便删除所有datafile、redofile和archivelog)
5. 在B库执行echo $ORACLE_SID,等于A库sid的情况下再执行
rman target /
rman>startup nomount
rman>restore spfile to pfile ‘$ORACLE_HOME目录/dbs/initA的SID.ora‘ from‘/backup/rman/data_09l9esg4_1_1‘;
6. 修改刚刚还原出来的pfile,如control、dump、archivelog等路径
7. B库shutdown abort再startup nomount
8. B库rman 恢复操作
rman>restore controlfile from‘/backup/rman/full_09l9esg4_1_1‘;
rman>alter database mount;
rman> catalog backuppiece ‘/backup/rman/data0bqedd5a_1_1.bak‘;
RMAN>run{
set newname for datafile 1 to ‘ /datafile/system01.dbf‘;
set newname for datafile 2 to ‘ /datafile/sysaux01.dbf‘;
set newname for datafile 3 to ‘ /datafile/undotbs01.dbf‘;
set newname for datafile 4 to ‘ /datafile/users01.dbf‘;
set newname for tempfile 1 to ‘/datafile/temp01.dbf‘;
restore database;
switch datafile all;
switch tempfile all;
}
rman> catalog backuppiece ‘/backup/rman/arch0bqedd5a_1_1.bak‘;
rman> catalog backuppiece ‘/backup/rman/arch0bqedd5a_1_1.bak‘;
RMAN> recover database;
根据上面报错提示再执行
RMAN> recover database until sequence 3160;
9. 退出rman进入[[email protected] dbs]$ sqlplus / as sydba
10.SQL> alter database open resetlogs;
如果报错ORA-00344: unable to re-create online log ‘/oradata/TESTIO/redo01.log‘
则select * from v$logfile;后再执行
SQL> alter database rename file ‘/oradata/TESTIO/redo01.log‘ to ‘/u01/app/oracle/oradata/redo01.log‘;
SQL> alter database rename file ‘/oradata/TESTIO/redo02.log‘ to ‘/u01/app/oracle/oradata/redo02.log‘;
SQL> alter database rename file ‘/oradata/TESTIO/redo03.log‘ to ‘/u01/app/oracle/oradata/redo03.log‘;
SQL> alter database open resetlogs;
以上需要了解的是
set newname for datafile其中是包含datafile和undofile
set newname for tempfile只包含tempfile
所以一开始需要先在源库执行
select file_id,file_name from dba_data_files order by file_id
select file_id,file_name from dba_temp_files order by file_id
当然如果前面set newname for tempfile导致后面报错
ALTER TABLESPACE TEMP drop TEMPFILE ‘/oradata/TESTIO/temp01.dbf‘;
ALTER TABLESPACE TEMP ADD TEMPFILE ‘/u01/app/oracle/oradata/temp01.dbf‘ size 500M autoextend on next 50M maxsize 30G;
RMAN_11.2.0.1异机恢复到直接安装11.2.0.4的版本
RMAN_11.2.0.1异机恢复到11.2.0.1升级后的11.2.0.4版本
源DB信息:DB_NAME为DB521102,版本为直接安装的11.2.0.1
目标DB信息:DB_NAME为DB11204,版本为直接安装的11.2.0.4,非11.2.0.1升级的版本
目标DB信息:DB_NAME为DB11204,版本为11.2.0.1升级到直接安装的11.2.0.4的版本
1. 源DB执行
Rman>backup database format ‘/u01/app/rman/full%U.bak‘ plus archivelog format ‘/u01/app/rman/arch%U.bak‘ delete input;
2. 源库把备份后的四个备份包scp到目标库/u01/app/rman/目录
3. 目标库根据spfile创建pfile,并修改pfile中的db_name为DB521102,并在目标库创建源库datafile、online redo log对应的目录
4. 修改目标库的.bash_profile中ORACLE_SID=源库的sid,并source应用一下
5. 目标库按顺序执行如下语句(下面第5个语句,需要catalog 最后一个归档日志的备份包,为什么需要catalog是因为它在controlfile备份包之后生成的。下面第6个语句,只需要from最大的那个sequence-2就可以了,不需要源库和目标库的archivelog目录一致,只要目标库有archivelog目录就可以了,会自动restore到目标库的archivelog目录)
sql>startup nomount pfile=’’
rman>restore controlfile from ’/u01/app/rman/fullXX.bak’
rman>alter database mount;
rman>restore database;
rman>catalog backuppiece ’/u01/app/rman/52arch04rc7tru_1_1’
rman>restore archivelog from sequence XX;
rman>recover database until sequence 最大的sequence+1;
sql>alter database open resetlogs;
出现如下报错
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
6. 解决方法,目标库重新登陆按如下执行(执行catupgrd.sql完后实例会自动shutdown,之后直接startup的过程不再需要resetlogs了)
sql>startup upgrade;
SQL>@$ORACLE_HOME/rdbms/admin/catupgrd.sql;
sql> startup
RMAN_11.2.0.4异机恢复到11.2.0.1
源DB信息:DB_NAME为DB11204,版本为直接安装的11.2.0.4
目标DB信息:DB_NAME为ORCL,版本为11.2.0.1
1. 源DB执行
Rman>backup database format ‘/u01/app/rman/full%U.bak‘ plus archivelog format ‘/u01/app/rman/arch%U.bak‘ delete input;
2. 源库把备份后的四个备份包scp到目标库/u01/app/rman/目录
3. 目标库根据spfile创建pfile,并修改pfile中的db_name为DB11204,并在目标库创建源库datafile、online redo log对应的目录
4. 修改目标库的.bash_profile中ORACLE_SID=源库的sid,并source应用一下
5. 目标库按顺序执行如下语句
sql>startup nomount pfile=’’
rman>restore controlfile from ’/u01/app/rman/fullXX.bak’
直接报错如下(把pfile中的由*.compatible=‘11.2.0.0.0‘改成*.compatible=‘11.2.0.4.0‘并shutdown abort再startup nomount pfile的过程中则报错ORA-00401: the value for parameter compatible is not supported by this release,即pfile中的由*.compatible改成啥都没用)
RMAN_11.2.0.1升级到11.2.0.4的DB异机恢复到11.2.0.1版本的DB
源DB信息:DB_NAME为ORCL,由11.2.0.1升级到了11.2.0.4
目标DB信息:DB_NAME为TESTDB,版本为11.2.0.1
1. 源DB执行
Rman>backup database format ‘/u01/app/rman/full%U.bak‘ plus archivelog format ‘/u01/app/rman/arch%U.bak‘ delete input;
2. 源库把备份后的四个备份包scp到目标库/u01/app/rman/目录
3. 目标库根据spfile创建pfile,并修改pfile中的db_name为ORCL,并在目标库创建源库datafile、online redo log对应的目录
4. 修改目标库的.bash_profile中ORACLE_SID=源库的sid,并source应用一下
5. 目标库按顺序执行如下语句(下面第5个语句,需要catalog 最后一个归档日志的备份包,为什么需要catalog是因为它在controlfile备份包之后生成的。下面第6个语句,只需要from最大的那个sequence-2就可以了,不需要源库和目标库的archivelog目录一致,只要目标库有archivelog目录就可以了,会自动restore到目标库的archivelog目录)
sql>startup nomount pfile=’’
rman>restore controlfile from ’/u01/app/rman/fullXX.bak’
rman>alter database mount;
rman>restore database;
rman>catalog backuppiece ’/u01/app/rman/52arch04rc7tru_1_1’;
rman>restore archivelog from sequence XX;
rman>recover database until sequence 最大的sequence+1;
sql>alter database open resetlogs;
出现如下报错
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
6. 解决方法,目标库重新登陆按如下执行(奇怪的是下面第2个语句执行过程中遇到问题,不像正常升级一样会shutdown数据库,而且以下第四个语句也不用再resetlogs了)
sql>startup upgrade;
SQL> @$/rdbms/admin/catupgrd.sql;
sql> shutdown immediate;
sql> startup
RMAN_11.2.0.1异机恢复到直接安装12.1.0.2的版本
源DB信息:DB_NAME为DB521102,版本为直接安装的11.2.0.1
目标DB信息:DB_NAME为DB12c,版本为直接安装的12.1.0.2
前面restore spfile to pfile,并修改pfile中*.compatible=‘12.1.0.0.0‘
Startup nomount
Restore controlfile
Alter database mount
Restore database
Recover database until sequence都是正常的,alter database open resetlogs开始出现问题了,不知道什么原因,难道真是11GR2不能异机恢复到12CR1?
RMAN_11.2.0.1升级到11.2.0.4的异机恢复到直接安装12.1.0.2的版本
源DB信息:DB_NAME为DB521102,版本为直接安装的11.2.0.1,再升级到11.2.0.4
目标DB信息:DB_NAME为DB12c,版本为直接安装的12.1.0.2
1. 源DB执行
Rman>backup database format ‘/u01/app/rman/full%U.bak‘ plus archivelog format ‘/u01/app/rman/arch%U.bak‘ delete input;
2. 源库把备份后的四个备份包scp到目标库/u01/app/rman/目录
3. 目标库根据spfile创建pfile,并修改pfile中的db_name为DB521102,并在目标库创建源库datafile、online redo log对应的目录
rman>restore spfile to pfile ‘XX/initDB521102.ora‘ from‘/backup/rman/full_09l9esg4_1_1‘;
并修改pfile中*.compatible=‘12.1.0.0.0‘
4. 修改目标库的.bash_profile中ORACLE_SID=源库的sid,并source应用一下
5. 目标库按顺序执行如下语句(下面第5个语句,需要catalog 最后一个归档日志的备份包,为什么需要catalog是因为它在controlfile备份包之后生成的。下面第6个语句,只需要from最大的那个sequence-2就可以了,不需要源库和目标库的archivelog目录一致,只要目标库有archivelog目录就可以了,会自动restore到目标库的archivelog目录)
sql>startup nomount pfile=’’
rman>restore controlfile from ’/u01/app/rman/fullXX.bak’
rman>alter database mount;
rman>restore database;
rman>catalog backuppiece ’/u01/app/rman/52arch04rc7tru_1_1’
rman>restore archivelog from sequence XX;
rman>recover database until sequence 最大的sequence+1;
sql>alter database open resetlogs;
出现如下报错
alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 2
ORA-00904: "I"."UNUSABLEBEGINNING#": invalid identifier
Process ID: 11222
Session ID: 188 Serial number: 65058
6. 解决方法,目标库重新登陆按如下执行(执行/u01/app/oracle/product/12c/db_1/perl/bin/perl catctl.pl -n 4 catup完后实例会自动shutdown,之后直接startup的过程不再需要resetlogs了)
sql>startup upgrade;
cd /u01/app/oracle/product/12c/db_1/rdbms/admin/
/u01/app/oracle/product/12c/db_1/perl/bin/perl catctl.pl -n 4 catupgrd.sql
sql> startup
以上是关于Rman_异地跨平台跨版本的恢复总结及案例的主要内容,如果未能解决你的问题,请参考以下文章