Oracle RMAN Migrate DB from RAC ASM to Single non-ASM

环境: Linux 5.5 x64 + Oracle 11.2.3 RAC + ASM ->Linux 5.5 x64 + Oracle 11.2.3 Single + non-ASM

迁移: ORALCE_HOME,DATABASE(pfile,controlfile,datafile,redolog,archivelog)

#######################################  RAC Oracle Home迁移成Single Oracle Home #######################################
1, Oracle Home从RAC拷贝到Single主机,启动SQLPLUS出现ORA-29702
http://somireddy.wordpress.com/2011/10/08/ora-29702-error-occurred-in-cluster-group-service-operation/
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk rac_off
make -f ins_rdbms.mk ioracle

[oraprod@q1ebsdb lib]$ ll|grep ins_rdbms.mk
-rw-r--r-- 1 oraprod oinstall   40678 Sep 17  2011 ins_rdbms.mk
[oraprod@q1ebsdb lib]$ make -f ins_rdbms.mk rac_off
rm -f /prod/oracle/product/11.2.0/db_1/lib/libskgxp11.so
cp /prod/oracle/product/11.2.0/db_1/lib//libskgxpg.so /prod/oracle/product/11.2.0/db_1/lib/libskgxp11.so
rm -f /prod/oracle/product/11.2.0/db_1/lib/libskgxn2.so
cp /prod/oracle/product/11.2.0/db_1/lib//libskgxns.so \
              /prod/oracle/product/11.2.0/db_1/lib/libskgxn2.so
/usr/bin/ar d /prod/oracle/product/11.2.0/db_1/rdbms/lib/libknlopt.a kcsm.o
/usr/bin/ar cr /prod/oracle/product/11.2.0/db_1/rdbms/lib/libknlopt.a /prod/oracle/product/11.2.0/db_1/rdbms/lib/ksnkcs.o

[oraprod@q1ebsdb lib]$ make -f ins_rdbms.mk ioracle
chmod 755 /prod/oracle/product/11.2.0/db_1/bin

 - Linking Oracle
rm -f /prod/oracle/product/11.2.0/db_1/rdbms/lib/oracle
gcc  -o /prod/oracle/product/11.2.0/db_1/rdbms/lib/oracle -m64 -L/prod/oracle/product/11.2.0/db_1/rdbms/lib/ -L/prod/oracle/product/11.2.0/db_1/lib/ -L/prod/oracle/product/11.2.0/db_1/lib/stubs/   -Wl,-E /prod/oracle/product/11.2.0/db_1/rdbms/lib/opimai.o /prod/oracle/product/11.2.0/db_1/rdbms/lib/ssoraed.o /prod/oracle/product/11.2.0/db_1/rdbms/lib/ttcsoi.o  -Wl,--whole-archive -lperfsrv11 -Wl,--no-whole-archive /prod/oracle/product/11.2.0/db_1/lib/nautab.o /prod/oracle/product/11.2.0/db_1/lib/naeet.o /prod/oracle/product/11.2.0/db_1/lib/naect.o /prod/oracle/product/11.2.0/db_1/lib/naedhs.o /prod/oracle/product/11.2.0/db_1/rdbms/lib/config.o  -lserver11 -lodm11 -lcell11 -lnnet11 -lskgxp11 -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lclient11  -lvsn11 -lcommon11 -lgeneric11 -lknlopt `if /usr/bin/ar tv /prod/oracle/product/11.2.0/db_1/rdbms/lib/libknlopt.a | grep xsyeolap.o > /dev/null 2>&1 ; then echo "-loraolap11" ; fi` -lslax11 -lpls11  -lrt -lplp11 -lserver11 -lclient11  -lvsn11 -lcommon11 -lgeneric11 `if [ -f /prod/oracle/product/11.2.0/db_1/lib/libavserver11.a ] ; then echo "-lavserver11" ; else echo "-lavstub11"; fi` `if [ -f /prod/oracle/product/11.2.0/db_1/lib/libavclient11.a ] ; then echo "-lavclient11" ; fi` -lknlopt -lslax11 -lpls11  -lrt -lplp11 -ljavavm11 -lserver11  -lwwg  `cat /prod/oracle/product/11.2.0/db_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /prod/oracle/product/11.2.0/db_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lmm -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lztkg11 `cat /prod/oracle/product/11.2.0/db_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /prod/oracle/product/11.2.0/db_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11   -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `if /usr/bin/ar tv /prod/oracle/product/11.2.0/db_1/rdbms/lib/libknlopt.a | grep "kxmnsd.o" > /dev/null 2>&1 ; then echo " " ; else echo "-lordsdo11"; fi` -L/prod/oracle/product/11.2.0/db_1/ctx/lib/ -lctxc11 -lctx11 -lzx11 -lgx11 -lctx11 -lzx11 -lgx11 -lordimt11 -lclsra11 -ldbcfg11 -lhasgen11 -lskgxn2 -lnnz11 -lzt11 -lxml11 -locr11 -locrb11 -locrutl11 -lhasgen11 -lskgxn2 -lnnz11 -lzt11 -lxml11  -loraz -llzopro -lorabz2 -lipp_z -lipp_bz2 -lippdcemerged -lippsemerged -lippdcmerged  -lippsmerged -lippcore  -lippcpemerged -lippcpmerged  -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lsnls11 -lunls11  -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lasmclnt11 -lcommon11 -lcore11 -laio    `cat /prod/oracle/product/11.2.0/db_1/lib/sysliblist` -Wl,-rpath,/prod/oracle/product/11.2.0/db_1/lib -lm    `cat /prod/oracle/product/11.2.0/db_1/lib/sysliblist` -ldl -lm   -L/prod/oracle/product/11.2.0/db_1/lib
test ! -f /prod/oracle/product/11.2.0/db_1/bin/oracle ||\
           mv -f /prod/oracle/product/11.2.0/db_1/bin/oracle /prod/oracle/product/11.2.0/db_1/bin/oracleO
mv /prod/oracle/product/11.2.0/db_1/rdbms/lib/oracle /prod/oracle/product/11.2.0/db_1/bin/oracle
chmod 6751 /prod/oracle/product/11.2.0/db_1/bin/oracle

#######################################  RMAN恢复备份集权限不足 #######################################

2, 问题2:备份集权限不足。
RMAN> restore spfile from '/u01/FULL_PROD_20130715_16';
Starting restore at 15-JUL-13
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 07/15/2013 17:32:26
RMAN-06172: no AUTOBACKUP found or specified handle is not a valid copy or piece
这里是权限的问题,设置全部可读写,恢复成功。
[root@q1ebsdb u01]# chmod 777 ARCH_PROD_20130715_17 CTRL_PROD_20130715_18 FULL_PROD_20130715_1*
[oraprod@q1ebsdb u01]$ rman target /
Recovery Manager: Release 11.2.0.3.0 - Production on Mon Jul 15 17:33:10 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database: PROD (not mounted)
RMAN> restore spfile from '/u01/FULL_PROD_20130715_16';
Starting restore at 15-JUL-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=9 device type=DISK
channel ORA_DISK_1: restoring spfile from AUTOBACKUP /u01/FULL_PROD_20130715_16
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 15-JUL-13

#######################################  备份数据库 #######################################
#  备份数据库。
backup full database tag 'FULL' format='/u01/FULL_%d_%T_%s';
backup archivelog all tag 'ARCH' format '/u01/ARCH_%d_%T_%s' delete all input;
backup current controlfile tag 'CTRL'  format '/u01/CTRL_%d_%T_%s';

#######################################3种方式恢复数据库 RAC ASM ->Single non-ASM#######################################
1,相同DBNAME,相同DBID
2,不同DBNAME,相同DBID
3,不同DBNAME,不同DBID

####################################### 1 RMAN恢复相同DBNAME,相同DBID数据库 #######################################

#  恢复同名数据库,DBNAME和DBID都相同。
1,利用恢复出来的spfile生成pfile,并修改成initprod.ora,SQLPLUS启动数据库nomount状态。
2,恢复DB_NAME相同的数据库: RMAN恢复控制文件,转换恢复数据文件,恢复数据库,启用新的归档日志,再次恢复数据库。
startup nomount;
set dbid=228115897
restore controlfile from '/u01/CTRL_PROD_20130715_18';
alter database mount;
catalog start with '/u01';
run{     
SET NEWNAME FOR DATABASE TO '/prod/oracle/oradata/prod/%b';
SET NEWNAME FOR TEMPFILE 1 TO '/prod/oracle/oradata/prod/%b';
RESTORE DATABASE;
SWITCH DATAFILE ALL;
SWITCH TEMPFILE ALL;
}
RECOVER DATABASE;
此时数据库会开始使用归档目录下的归档日志,重新catalog新产生并拷贝过来的归档文件。
catalog start with '/prod/oracle/fast_recovery_area/PROD/archivelog/2013_07_15';
RECOVER DATABASE;
alter database open resetlogs;
通过nis可以进行数据库改名。

#######################################  2 RMAN恢复不同DBNAME,但相同DBID数据库 #######################################

#  RMAN恢复到不同数据库,DBNAME不同,但DBID相同。
准备2个pfile,initprod.ora和initTEST.ora,仅仅db_name不同而已。
export ORACLE_SID=prod
startup nomount pfile='/prod/oracle/product/11.2.0/db_1/dbs/initprod.ora';
restore controlfile from '/u01/CTRL_PROD_20130715_18';
startup mount;
catalog start with '/u01/';
run{     
SET NEWNAME FOR DATABASE TO '/prod/oracle/oradata/TEST/%b';
SET NEWNAME FOR TEMPFILE 1 TO '/prod/oracle/oradata/TEST/%b';
RESTORE DATABASE;
SWITCH DATAFILE ALL;
SWITCH TEMPFILE ALL;
}
修改logfile,主要是为了更新控制文件的在线日志从ASM->non-ASM。
alter database rename file '+DATADG/prod/onlinelog/group_1.267.817172147' to '/prod/oracle/oradata/TEST/group_1.267.817172147';
alter database rename file '+FRADG/prod/onlinelog/group_1.260.817172149' to '/prod/oracle/oradata/TEST/group_1.260.817172149';
alter database rename file '+DATADG/prod/onlinelog/group_2.266.817172151' to '/prod/oracle/oradata/TEST/group_2.266.817172151';
alter database rename file '+FRADG/prod/onlinelog/group_2.259.817172151' to '/prod/oracle/oradata/TEST/group_2.259.817172151';
alter database rename file '+DATADG/prod/onlinelog/group_3.265.817172153' to '/prod/oracle/oradata/TEST/group_3.265.817172153';
alter database rename file '+FRADG/prod/onlinelog/group_3.258.817172153' to '/prod/oracle/oradata/TEST/group_3.258.817172153';
alter database rename file '+DATADG/prod/onlinelog/group_4.264.817172155' to '/prod/oracle/oradata/TEST/group_4.264.817172155';
alter database rename file '+FRADG/prod/onlinelog/group_4.257.817172155' to '/prod/oracle/oradata/TEST/group_4.257.817172155';
alter database rename file '+DATADG/prod/onlinelog/group_5.271.817172163' to '/prod/oracle/oradata/TEST/group_5.271.817172163';
alter database rename file '+FRADG/prod/onlinelog/group_5.264.817172163' to '/prod/oracle/oradata/TEST/group_5.264.817172163';
alter database rename file '+DATADG/prod/onlinelog/group_6.270.817172163' to '/prod/oracle/oradata/TEST/group_6.270.817172163';
alter database rename file '+FRADG/prod/onlinelog/group_6.263.817172163' to '/prod/oracle/oradata/TEST/group_6.263.817172163';
alter database rename file '+DATADG/prod/onlinelog/group_7.269.817172167' to '/prod/oracle/oradata/TEST/group_7.269.817172167';
alter database rename file '+FRADG/prod/onlinelog/group_7.262.817172167' to '/prod/oracle/oradata/TEST/group_7.262.817172167';
alter database rename file '+DATADG/prod/onlinelog/group_8.268.817172167' to '/prod/oracle/oradata/TEST/group_8.268.817172167';
alter database rename file '+FRADG/prod/onlinelog/group_8.261.817172167' to '/prod/oracle/oradata/TEST/group_8.261.817172167';

SQL> alter database backup controlfile to trace as '/u01/control_trace.txt';--生成DBNAME=PROD的控制文件脚本。

shutdown immediate;

export ORACLE_SID=TEST
startup nomount pfile='/prod/oracle/product/11.2.0/db_1/dbs/initTEST.ora'

修改/u01/control_trace.txt,PROD=>TEST,利用NORETLOGS那一段脚本创建control_trace.sql,重建TEST控制文件。
SQL> !rm -rf /prod/oracle/oradata/TEST/control01.ctl
SQL> @/u01/control_trace.sql
CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS  ARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01161: database name PROD in file header does not match given name of TEST
ORA-01110: data file 1: '/prod/oracle/oradata/TEST/system.259.817171877'

修改control_trace.sql中RESET=>SET,注意这里是关键。
SQL> @/u01/control_trace.sql
CREATE CONTROLFILE SET DATABASE "TEST" NORESETLOGS  ARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01223: RESETLOGS must be specified to set a new database name

修改control_trace.sql中NORESETLOGS=>RESETLOGS,注意这里也是关键。
SQL> @/u01/control_trace.sql

Control file created.

注意:这一步控制文件已经重建完毕,如果源数据库有结构变化,这里需要手动增加数据文件。这一步也可以放在后面恢复时提醒数据文件缺失并OFFLINE时进行处理。

RMAN恢复
export ORACLE_SID=TEST
RMAN> recover database;

Starting recover at 22-JUL-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=10 device type=DISK

starting media recovery

unable to find archived log
archived log thread=1 sequence=369
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/22/2013 14:36:21
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 369 and starting SCN of 14781355

RMAN> catalog start with '/u01/'; --注意/u01/目录里只存放了恢复使用的备份集。
RMAN> recover database; --这里是进行归档日志的恢复,需要多尝试几次,它会利用所有的归档日志。
...
Executing: alter database datafile 6 offline
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_23/o1_mf_1_426_8yvs7zwz_.arc thread=1 sequence=426
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_23/o1_mf_2_179_8yvs7zw9_.arc thread=2 sequence=179
channel default: deleting archived log(s)
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_23/o1_mf_1_426_8yvs7zwz_.arc RECID=95 STAMP=821527552
archived log file name=/backup/thread_1_seq_427.364.821465293 thread=1 sequence=427
channel default: deleting archived log(s)
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_23/o1_mf_2_179_8yvs7zw9_.arc RECID=96 STAMP=821527552
archived log file name=/backup/thread_2_seq_180.368.821484023 thread=2 sequence=180
archived log file name=/backup/thread_1_seq_428.366.821473911 thread=1 sequence=428
archived log file name=/backup/thread_1_seq_429.361.821484021 thread=1 sequence=429
archived log file name=/backup/thread_1_seq_430.370.821491237 thread=1 sequence=430
archived log file name=/backup/thread_2_seq_181.369.821494839 thread=2 sequence=181
archived log file name=/backup/thread_1_seq_431.371.821502021 thread=1 sequence=431
unable to find archived log
archived log thread=2 sequence=182
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/23/2013 10:07:46
RMAN-06054: media recovery requesting unknown archived log for thread 2 with sequence 182 and starting SCN of 19195470

这里显示datafile 6没有,需要创建。
SQL> alter database create datafile 6 as '/prod/oracle/oradata/TEST/EBSDATA.ora';
SQL> alter database datafile 6 online;
RMAN> recover database; --此时会恢复数据文件6.

Starting recover at 23-JUL-13
using channel ORA_DISK_1

starting media recovery

archived log for thread 1 with sequence 427 is already on disk as file /backup/thread_1_seq_427.364.821465293
archived log for thread 1 with sequence 428 is already on disk as file /backup/thread_1_seq_428.366.821473911
archived log for thread 1 with sequence 429 is already on disk as file /backup/thread_1_seq_429.361.821484021
archived log for thread 1 with sequence 430 is already on disk as file /backup/thread_1_seq_430.370.821491237
archived log for thread 1 with sequence 431 is already on disk as file /backup/thread_1_seq_431.371.821502021
archived log for thread 1 with sequence 432 is already on disk as file /backup/thread_1_seq_432.373.821512819
archived log for thread 2 with sequence 180 is already on disk as file /backup/thread_2_seq_180.368.821484023
archived log for thread 2 with sequence 181 is already on disk as file /backup/thread_2_seq_181.369.821494839
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=2 sequence=179
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=426
channel ORA_DISK_1: reading from backup piece /backup/ARCH_PROD_20130722_20
channel ORA_DISK_1: piece handle=/backup/ARCH_PROD_20130722_20 tag=ARCH
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_23/o1_mf_1_426_8yvsh60n_.arc thread=1 sequence=426
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_23/o1_mf_2_179_8yvsh60j_.arc thread=2 sequence=179
channel default: deleting archived log(s)
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_23/o1_mf_1_426_8yvsh60n_.arc RECID=98 STAMP=821527782
archived log file name=/backup/thread_1_seq_427.364.821465293 thread=1 sequence=427
channel default: deleting archived log(s)
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_23/o1_mf_2_179_8yvsh60j_.arc RECID=99 STAMP=821527782
archived log file name=/backup/thread_2_seq_180.368.821484023 thread=2 sequence=180
archived log file name=/backup/thread_1_seq_428.366.821473911 thread=1 sequence=428
archived log file name=/backup/thread_1_seq_429.361.821484021 thread=1 sequence=429
archived log file name=/backup/thread_1_seq_430.370.821491237 thread=1 sequence=430
archived log file name=/backup/thread_2_seq_181.369.821494839 thread=2 sequence=181
archived log file name=/backup/thread_1_seq_431.371.821502021 thread=1 sequence=431
unable to find archived log
archived log thread=2 sequence=182
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/23/2013 10:09:45
RMAN-06054: media recovery requesting unknown archived log for thread 2 with sequence 182 and starting SCN of 19195470

RMAN> recover database; --最后一次恢复,会提示需要在线日志thread 2 sequence 182。

RMAN恢复会到最后一个归档日志应用完毕,接下来在SLQPLUS中恢复应用在线日志。
SQLPLUS恢复在线日志,下面的恢复正常完成。

SQL> recover database using backup controlfile;
ORA-00279: change 19195470 generated at 07/23/2013 01:00:39 needed for thread 2
ORA-00289: suggestion :
/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_23/o1_mf_2_182_%u_.arc
ORA-00280: change 19195470 for thread 2 is in sequence #182


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/backup/group_6.263.817172163
ORA-00279: change 19195470 generated at 07/23/2013 00:00:36 needed for thread 1
ORA-00289: suggestion : /backup/thread_1_seq_431.371.821502021
ORA-00280: change 19195470 for thread 1 is in sequence #431


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/backup/thread_1_seq_431.371.821502021
ORA-00279: change 19242558 generated at 07/23/2013 03:00:21 needed for thread 1
ORA-00289: suggestion : /backup/thread_1_seq_432.373.821512819
ORA-00280: change 19242558 for thread 1 is in sequence #432
ORA-00278: log file '/backup/thread_1_seq_431.371.821502021' no longer needed
for this recovery


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/backup/thread_1_seq_432.373.821512819
ORA-00279: change 19312913 generated at 07/23/2013 06:00:17 needed for thread 1
ORA-00289: suggestion :
/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_23/o1_mf_1_433_%u_.arc
ORA-00280: change 19312913 for thread 1 is in sequence #433
ORA-00278: log file '/backup/thread_1_seq_432.373.821512819' no longer needed
for this recovery


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/backup/group_2.259.817172151
Log applied.
Media recovery complete.
SQL> alter database open;

SQL> alter database open resetlogs;
Database altered.

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/prod/oracle/oradata/TEST/TEMP.ora' size 16M autoextend on;

SQL>  select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
UNDOTBS2
EBSDATA

SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/prod/oracle/oradata/TEST/undotbs2.256.817172295
/prod/oracle/oradata/TEST/users.257.817171937
/prod/oracle/oradata/TEST/undotbs1.258.817171901
/prod/oracle/oradata/TEST/sysaux.260.817171845
/prod/oracle/oradata/TEST/system.259.817171877
/prod/oracle/oradata/TEST/EBSDATA.ora

SQL> conn jeron_peng/amaxgs

        ID NAME
---------- ------------------------------------------------------------
         1 11.1.0.7.0
         2 11.2.0.3.0
         6 2013-07-15 23:42:00
         4 11.2.0.3.0Jul152013
         5 CompleteBackup
         3 11.2.0.3.0CPUApr2013
         7 2013-07-22 16:43:00
最后产生的数据已经恢复出来。

注意一点:这里其实数据库结构已经发生了变化,最新的控制文件已经创建了数据文件6,而恢复的控制文件是没有的,恢复时会提示数据文件OFFLINE,我们只需在后面创建并ONLINE。
SQL> alter database create datafile 6 as '/prod/oracle/oradata/TEST/EBSDATA.ora';
SQL> alter datafile 6 online;

#################################### 3 RMAN DUPLICATE恢复不同DBNAME,不同DBID数据库 #######################################

#  DUPLICATE恢复到不同名数据库。
Duplicate prod to TEST from backupset without target and catelog.
创建新库需要的audit目录,数据文件目录,trace文件目录,闪回恢复目录等。
创建密码文件,保持和源库完全一样。orapwd file=orapwTEST password=amaxgs
创建pfile,initTEST.ora,启动数据库,并创建spfile,重启数据库从spfile启动。
利用下面的Duplicate,注意BACKUP LOCATION路径组后有“/”,必须为‘/u01/’,否则‘/u01’会报错,找不到SPFILE或者CONTROLFILE等。
run{
SET NEWNAME FOR DATABASE TO '/prod/oracle/oradata/TEST/%b';
SET NEWNAME FOR TEMPFILE 1 TO '/prod/oracle/oradata/TEST/%b';
DUPLICATE DATABASE TO 'TEST' BACKUP LOCATION '/u01/';
}

[oratest@q1ebsdb ~]$ rman auxiliary /

Recovery Manager: Release 11.2.0.3.0 - Production on Thu Jul 18 22:27:00 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to auxiliary database: TEST (not mounted)

RMAN> exit


Recovery Manager complete.
[oratest@q1ebsdb ~]$ rman auxiliary /

Recovery Manager: Release 11.2.0.3.0 - Production on Thu Jul 18 22:28:33 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to auxiliary database: TEST (not mounted)

RMAN> run{
SET NEWNAME FOR DATABASE TO '/prod/oracle/oradata/TEST/%b';
2> 3> SET NEWNAME FOR TEMPFILE 1 TO '/prod/oracle/oradata/TEST/%b';
DUPLICATE DATABASE TO 'TEST' BACKUP LOCATION '/u01/';
}4> 5>

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting Duplicate Db at 18-JUL-13

contents of Memory Script:
{
   sql clone "alter system set  db_name =
 ''PROD'' comment=
 ''Modified by RMAN duplicate'' scope=spfile";
   sql clone "alter system set  db_unique_name =
 ''TEST'' comment=
 ''Modified by RMAN duplicate'' scope=spfile";
   shutdown clone immediate;
   startup clone force nomount
   restore clone primary controlfile from  '/u01/CTRL_PROD_20130715_18';
   alter clone database mount;
}
executing Memory Script

sql statement: alter system set  db_name =  ''PROD'' comment= ''Modified by RMAN duplicate'' scope=spfile

sql statement: alter system set  db_unique_name =  ''TEST'' comment= ''Modified by RMAN duplicate'' scope=spfile

Oracle instance shut down

Oracle instance started

Total System Global Area     839282688 bytes

Fixed Size                     2233000 bytes
Variable Size                494931288 bytes
Database Buffers             335544320 bytes
Redo Buffers                   6574080 bytes

Starting restore at 18-JUL-13
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=133 device type=DISK

channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/prod/oracle/oradata/TEST/control01.ctl
Finished restore at 18-JUL-13

database mounted
released channel: ORA_AUX_DISK_1
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=133 device type=DISK

contents of Memory Script:
{
   set until scn  14784494;
   set newname for datafile  1 to
 "/prod/oracle/oradata/TEST/system.259.817171877";
   set newname for datafile  2 to
 "/prod/oracle/oradata/TEST/sysaux.260.817171845";
   set newname for datafile  3 to
 "/prod/oracle/oradata/TEST/undotbs1.258.817171901";
   set newname for datafile  4 to
 "/prod/oracle/oradata/TEST/users.257.817171937";
   set newname for datafile  5 to
 "/prod/oracle/oradata/TEST/undotbs2.256.817172295";
   restore
   clone database
   ;
}
executing Memory Script

executing command: SET until clause

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 18-JUL-13
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /prod/oracle/oradata/TEST/system.259.817171877
channel ORA_AUX_DISK_1: restoring datafile 00002 to /prod/oracle/oradata/TEST/sysaux.260.817171845
channel ORA_AUX_DISK_1: restoring datafile 00003 to /prod/oracle/oradata/TEST/undotbs1.258.817171901
channel ORA_AUX_DISK_1: restoring datafile 00004 to /prod/oracle/oradata/TEST/users.257.817171937
channel ORA_AUX_DISK_1: restoring datafile 00005 to /prod/oracle/oradata/TEST/undotbs2.256.817172295
channel ORA_AUX_DISK_1: reading from backup piece /u01/FULL_PROD_20130715_15
channel ORA_AUX_DISK_1: piece handle=/u01/FULL_PROD_20130715_15 tag=FULL
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:45
Finished restore at 18-JUL-13

contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script

datafile 1 switched to datafile copy
input datafile copy RECID=6 STAMP=821140212 file name=/prod/oracle/oradata/TEST/system.259.817171877
datafile 2 switched to datafile copy
input datafile copy RECID=7 STAMP=821140212 file name=/prod/oracle/oradata/TEST/sysaux.260.817171845
datafile 3 switched to datafile copy
input datafile copy RECID=8 STAMP=821140212 file name=/prod/oracle/oradata/TEST/undotbs1.258.817171901
datafile 4 switched to datafile copy
input datafile copy RECID=9 STAMP=821140212 file name=/prod/oracle/oradata/TEST/users.257.817171937
datafile 5 switched to datafile copy
input datafile copy RECID=10 STAMP=821140212 file name=/prod/oracle/oradata/TEST/undotbs2.256.817172295

contents of Memory Script:
{
   set until scn  14784494;
   recover
   clone database
    delete archivelog
   ;
}
executing Memory Script

executing command: SET until clause

Starting recover at 18-JUL-13
using channel ORA_AUX_DISK_1

starting media recovery

channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=369
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=2 sequence=149
channel ORA_AUX_DISK_1: reading from backup piece /u01/ARCH_PROD_20130715_17
channel ORA_AUX_DISK_1: piece handle=/u01/ARCH_PROD_20130715_17 tag=ARCH
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_18/o1_mf_1_369_8yhz017z_.arc thread=1 sequence=369
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_18/o1_mf_2_149_8yhz01vo_.arc thread=2 sequence=149
channel clone_default: deleting archived log(s)
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_18/o1_mf_1_369_8yhz017z_.arc RECID=2 STAMP=821140226
channel clone_default: deleting archived log(s)
archived log file name=/prod/oracle/fast_recovery_area/TEST/archivelog/2013_07_18/o1_mf_2_149_8yhz01vo_.arc RECID=1 STAMP=821140226
media recovery complete, elapsed time: 00:00:02
Finished recover at 18-JUL-13
Oracle instance started

Total System Global Area     839282688 bytes

Fixed Size                     2233000 bytes
Variable Size                494931288 bytes
Database Buffers             335544320 bytes
Redo Buffers                   6574080 bytes

contents of Memory Script:
{
   sql clone "alter system set  db_name =
 ''TEST'' comment=
 ''Reset to original value by RMAN'' scope=spfile";
   sql clone "alter system reset  db_unique_name scope=spfile";
   shutdown clone immediate;
   startup clone nomount;
}
executing Memory Script

sql statement: alter system set  db_name =  ''TEST'' comment= ''Reset to original value by RMAN'' scope=spfile

sql statement: alter system reset  db_unique_name scope=spfile

Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area     839282688 bytes

Fixed Size                     2233000 bytes
Variable Size                494931288 bytes
Database Buffers             335544320 bytes
Redo Buffers                   6574080 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "TEST" RESETLOGS ARCHIVELOG
  MAXLOGFILES     16
  MAXLOGMEMBERS      3
  MAXDATAFILES      100
  MAXINSTANCES     8
  MAXLOGHISTORY      292
 LOGFILE
  GROUP   1  SIZE 50 M ,
  GROUP   2  SIZE 50 M ,
  GROUP   3  SIZE 50 M ,
  GROUP   4  SIZE 50 M
 DATAFILE
  '/prod/oracle/oradata/TEST/system.259.817171877'
 CHARACTER SET AL32UTF8

sql statement: ALTER DATABASE ADD LOGFILE
 
 
 
  INSTANCE 'i2'
  GROUP   5  SIZE 50 M ,
  GROUP   6  SIZE 50 M ,
  GROUP   7  SIZE 50 M ,
  GROUP   8  SIZE 50 M

contents of Memory Script:
{
   set newname for tempfile  1 to
 "/prod/oracle/oradata/TEST/temp.272.817172253";
   switch clone tempfile all;
   catalog clone datafilecopy  "/prod/oracle/oradata/TEST/sysaux.260.817171845",
 "/prod/oracle/oradata/TEST/undotbs1.258.817171901",
 "/prod/oracle/oradata/TEST/users.257.817171937",
 "/prod/oracle/oradata/TEST/undotbs2.256.817172295";
   switch clone datafile all;
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /prod/oracle/oradata/TEST/temp.272.817172253 in control file

cataloged datafile copy
datafile copy file name=/prod/oracle/oradata/TEST/sysaux.260.817171845 RECID=1 STAMP=821140247
cataloged datafile copy
datafile copy file name=/prod/oracle/oradata/TEST/undotbs1.258.817171901 RECID=2 STAMP=821140247
cataloged datafile copy
datafile copy file name=/prod/oracle/oradata/TEST/users.257.817171937 RECID=3 STAMP=821140247
cataloged datafile copy
datafile copy file name=/prod/oracle/oradata/TEST/undotbs2.256.817172295 RECID=4 STAMP=821140247

datafile 2 switched to datafile copy
input datafile copy RECID=1 STAMP=821140247 file name=/prod/oracle/oradata/TEST/sysaux.260.817171845
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=821140247 file name=/prod/oracle/oradata/TEST/undotbs1.258.817171901
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=821140247 file name=/prod/oracle/oradata/TEST/users.257.817171937
datafile 5 switched to datafile copy
input datafile copy RECID=4 STAMP=821140247 file name=/prod/oracle/oradata/TEST/undotbs2.256.817172295

contents of Memory Script:
{
   Alter clone database open resetlogs;
}
executing Memory Script

database opened
Finished Duplicate Db at 18-JUL-13

################################# 注意事项 #################################
1,catalog start with '/u01/'; 目录必须为/u01/这种格式,/u01会出错。
2,创建控制文件RESET->SET,NORESETLOGS->RESETLOGS
3,DUPLICATE DATABASE TO 'TEST' BACKUP LOCATION '/u01/'; 目录必须为/u01/这种格式,/u01会出错。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值