结论:
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 archivel