Rman_异地、跨平台、跨版本的恢复总结及案例

http://blog.itpub.net/30126024/viewspace-2122858/

结论:

1. Rman可以跨平台,网上有资料基于ID 413586.1metalink上有),但是还是少用rman来进行跨平台操作。

2. Rman可以跨版本,但是一般只能从低到高,且要执行catupgrd.sql。不能从高到低,唯一成功的是低版本升级到高版本后备份可以恢复到同样的低版本

 

 

跨平台的实例:

Solaris上的9iDB通过rman备份后恢复到RHEL5.4上的11.2.0.1

 

跨版本的实例:

RMAN_11.2.0.1异机恢复到11.2.0.4

RMAN_11.2.0.1升级到11.2.0.4DB异机恢复到11.2.0.1版本的DB

RMAN_11.2.0.1升级到11.2.0.4DB异机恢复到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名称,并在目标库创建源库datafileonline redo log对应的目录

 

1.  A库执行backup database format ‘/backup/rman/full_%U.bak’;

    A/backup/rman会出现两个以full命名的文件,一个是数据库备份,一个参数文件和控制的备份

2.  A库再执行alter system archive log currentalter 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_profileORACLE_SID=源库的sid,并source应用一下

5.  B库执行echo $ORACLE_SID,等于Asid的情况下再执行

rman target /

rman>startup nomount

rman>restore spfile to pfile '$ORACLE_HOME目录/dbs/initASID.ora' from'/backup/rman/full_09l9esg4_1_1';

6.  修改刚刚还原出来的pfile,并根据pfile文件创建诸如dumparchivelogdatafileonline redo log等路径,如B库创建了和A库一样的控制文件路径、数据文件路径、日志文件路径

7.  Bshutdown abortstartup nomount

8.  Brman 恢复操作

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.  Bopen 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_profileORACLE_SID=A库的sidsource .bash_profile

4.  B库关闭DB并确认spfile已经删除(顺便删除所有datafileredofilearchivelog

5.  B库执行echo $ORACLE_SID,等于Asid的情况下再执行

rman target /

rman>startup nomount

rman>restore spfile to pfile '$ORACLE_HOME目录/dbs/initASID.ora' from'/backup/rman/data_09l9esg4_1_1';

6.  修改刚刚还原出来的pfile,controldumparchivelog等路径

7.  Bshutdown abortstartup nomount

8.  Brman 恢复操作

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进入[oracle@localhost 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其中是包含datafileundofile

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_NAMEDB521102,版本为直接安装的11.2.0.1

目标DB信息:DB_NAMEDB11204,版本为直接安装的11.2.0.4,非11.2.0.1升级的版本

目标DB信息:DB_NAMEDB11204,版本为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_nameDB521102,并在目标库创建源库datafileonline redo log对应的目录

4.  修改目标库的.bash_profileORACLE_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_NAMEDB11204,版本为直接安装的11.2.0.4

目标DB信息:DB_NAMEORCL,版本为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_nameDB11204,并在目标库创建源库datafileonline redo log对应的目录

4.  修改目标库的.bash_profileORACLE_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 abortstartup nomount pfile的过程中则报错ORA-00401: the value for parameter compatible is not supported by this releasepfile中的由*.compatible改成啥都没用)

 

 

 

 

 

 

 

 

 

RMAN_11.2.0.1升级到11.2.0.4DB异机恢复到11.2.0.1版本的DB

DB信息:DB_NAMEORCL,由11.2.0.1升级到了11.2.0.4

目标DB信息:DB_NAMETESTDB,版本为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_nameORCL,并在目标库创建源库datafileonline redo log对应的目录

4.  修改目标库的.bash_profileORACLE_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_NAMEDB521102,版本为直接安装的11.2.0.1

目标DB信息:DB_NAMEDB12c,版本为直接安装的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_NAMEDB521102,版本为直接安装的11.2.0.1,再升级到11.2.0.4

目标DB信息:DB_NAMEDB12c,版本为直接安装的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_nameDB521102,并在目标库创建源库datafileonline 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_profileORACLE_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

All for u
原文地址:https://www.cnblogs.com/ayumie/p/7738285.html