登录到1.71上执行如下操作,从带库中恢复控制文件到dev02上,恢复的数据库RMAN备份是0级全备,不含2级累积增量备份。
生产环境的主机名为db2,ORACLE_SID和db_name 都为 PROD ,dev02环境的主机名为zone04,ORACLE_SID和db_name都叫 DEV02
此次恢复实验,采用的控制文件备份是跟0级备份是同一时刻备份到带库上的
Last login: Thu Mar 14 17:06:04 2013 from 192.168.1.210
Oracle Corporation SunOS 5.10 Generic Patch January 2005
You have new mail.
Sourcing //.profile-EIS.....
root@test # bash
root@test # obtool
ob> cd --host db2 //切换到db2主机上
ob> ls
/
ob> cd /
ob> ls
db_data/ opt/
ob> cd db_data
ob> ls
PROD/ PROD.db.20130125.tar PROD.tar.20121223.db.yj
PROD.db.20130116.tar PROD.db.bak.20130104 PROD.tar.20121225.db
ob> cd PROD
ob> ls
db/ nohup.out oraInventory/ temp/
ob> cd db
ob> ls
apps_st/ tech_st/
ob> cd tech_st
ob> ls
11.2.0/ cfbak/
ob> cd cfbak //找到控制文件备份目录
ob> ls -l
-rw-r----- oraprod.dba 40.4 MB 2013/03/12.00:45 cntrl_936_1_809829905_20130312
-rw-r----- oraprod.dba 40.4 MB 2013/03/13.00:40 cntrl_945_1_809916020_20130313
-rw-r----- oraprod.dba 40.4 MB 2013/03/14.00:39 cntrl_954_1_810002383_20130314
-rw-r----- oraprod.dba 40.4 MB 2013/03/18.00:34 cntrl_1023_1_810381548_20130318
-rwxr-xr-x oraprod.dba 12.1 KB 2013/03/10.15:03 rman_bak.sh (16)
-rw-rw-rw- root.root 60.6 KB 2013/03/14.00:39 rman_bak.sh.out (16)
-rwxr-xr-x oraprod.dba 246 2013/02/18.19:19 run_bak.sh (16)
ob> pwd
/db_data/PROD/db/tech_st/cfbak on host db2 (browsing catalog data)
ob> cd /
ob> restore --tohost zone04 --go /db_data/PROD/db/tech_st/cfbak/cntrl_1023_1_810381548_20130318 --aspath /export/home/oradev/cfbak/cntrl_1023_1_810381548_20130318
Info: 1 catalog restore request item submitted; job id is admin/69.
这样首先将db2的控制文件从带库目录 /db_data/PROD/db/tech_st/cfbak/cntrl_1023_1_810381548_20130318 恢复到 dev02主机的/export/home/oradev/cfbak目录,名字保持一致
然后在dev02主机(也就是zone04主机)的/export/home/oradev/cfbak目录下可以看到还原回来的控制文件
紧接着从备份集中恢复控制文件
bash-3.2$ export ORACLE_SID=PROD //(注意此时的ORACLE_SID仍然为PROD ,而且用生产环境的pfile启动db到nomount状态)
bash-3.2$ rman target /
Recovery Manager: Release 11.2.0.3.0 - Production on Thu Mar 14 18:28:05 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database (not started)
RMAN>
RMAN> startup nomount pfile='/export/zones/zone04/root/uat_data/DEV02/db/tech_st/11.2.0/dbs/initPROD.ora';
Oracle instance started
Total System Global Area 1069252608 bytes
Fixed Size 2166160 bytes
Variable Size 427823728 bytes
Database Buffers 624951296 bytes
Redo Buffers 14311424 bytes
RMAN> restore controlfile from '/export/home/oradev/cfbak/cntrl_1023_1_810381548_20130318';
Starting restore at 18-MAR-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=551 device type=DISK
channel ORA_DISK_1: copied control file copy
output file name=/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/cntrl01.dbf
output file name=/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/cntrl02.dbf
output file name=/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/cntrl03.dbf
Finished restore at 18-MAR-13
RMAN>
这时候在 /export/zones/zone04/root/uat_data/DEV02/db/apps_st/data目录下可以看到三个控制文件
然后将db启动到mount状态(原rman窗口中)
RMAN> alter database mount;
using target database control file instead of recovery catalog
database mounted
然后直接在dev02主机上/export/zones/zone04/root/uat_data目录下创建脚本 catlog.txt ,catlog.txt脚本内容如下:
注意数据文件编号一定要跟数据文件名对应,否则恢复会出错
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
run{
ALLOCATE CHANNEL ch00 TYPE sbt parms 'ENV=(ob_media_family=erpdb-mf)';
set newname for datafile 1 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system01.dbf';
set newname for datafile 2 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system02.dbf';
set newname for datafile 3 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system03.dbf';
set newname for datafile 4 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system04.dbf';
set newname for datafile 5 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system05.dbf';
set newname for datafile 6 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system06.dbf';
set newname for datafile 7 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system07.dbf';
set newname for datafile 8 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system08.dbf';
set newname for datafile 9 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system09.dbf';
set newname for datafile 10 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system10.dbf';
set newname for datafile 11 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system11.dbf';
set newname for datafile 12 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/undo01.dbf';
set newname for datafile 13 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_archive01.dbf';
set newname for datafile 14 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_int01.dbf';
set newname for datafile 15 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_media01.dbf';
set newname for datafile 16 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_nolog01.dbf';
set newname for datafile 17 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_queue01.dbf';
set newname for datafile 18 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_queue02.dbf';
set newname for datafile 19 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_ref01.dbf';
set newname for datafile 20 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_ref02.dbf';
set newname for datafile 21 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_summ01.dbf';
set newname for datafile 22 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_data01.dbf';
set newname for datafile 23 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_data02.dbf';
set newname for datafile 24 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_data03.dbf';
set newname for datafile 25 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_ind01.dbf';
set newname for datafile 26 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_ind02.dbf';
set newname for datafile 27 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_ind03.dbf';
set newname for datafile 28 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_ind04.dbf';
set newname for datafile 29 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_ind05.dbf';
set newname for datafile 30 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/ctxd01.dbf';
set newname for datafile 31 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/odm.dbf';
set newname for datafile 32 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/olap.dbf';
set newname for datafile 33 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/owad01.dbf';
set newname for datafile 34 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/portal01.dbf';
set newname for datafile 35 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/sysaux01.dbf';
set newname for datafile 36 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/apps_ts_tools01.dbf';
set newname for datafile 37 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/interim.dbf';
set newname for datafile 38 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_data4.dbf';
restore database;
switch datafile all;
RELEASE CHANNEL ch00;
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
再在 /export/zones/zone04/root/uat_data 目录下创建 zx.sh 脚本,脚本内容如下:
-bash-3.2$ more zx.sh
rman target / cmdfile='/export/zones/zone04/root/uat_data/catlog.txt' log='/export/zones/zone04/root/uat_data/cat.log'
然后在vnc窗口中,export ORACLE_SID=PROD , 然后直接执行 sh zx.sh , 这个时候数据库就进行恢复。
接下来是 recover 数据库
注意:一定要指定备份到带库上的归档日志通道 ALLOCATE CHANNEL , 否则报错
RMAN> run{
ALLOCATE CHANNEL ch00 TYPE sbt parms 'ENV=(ob_media_family=erpdb-mf)';
recover database;
RELEASE CHANNEL ch00;
}
allocated channel: ch00
channel ch00: SID=551 device type=SBT_TAPE
channel ch00: Oracle Secure Backup
Starting recover at 18-MAR-13
starting media recovery
channel ch00: starting archived log restore to default destination
channel ch00: restoring archived log
archived log thread=1 sequence=938
channel ch00: restoring archived log
archived log thread=1 sequence=939
channel ch00: reading from backup piece al_1021_1_810381476
channel ch00: piece handle=al_1021_1_810381476 tag=TAG20130318T095756
channel ch00: restored backup piece 1
channel ch00: restore complete, elapsed time: 00:02:35
archived log file name=/export/zones/zone04/root/uat_data/DEV02/db/tech_st/11.2.0/dbs/arch1_938_800615529.dbf thread=1 sequence=938
archived log file name=/export/zones/zone04/root/uat_data/DEV02/db/tech_st/11.2.0/dbs/arch1_939_800615529.dbf thread=1 sequence=939
unable to find archived log
archived log thread=1 sequence=940
released channel: ch00
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/18/2013 12:16:15
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 940 and starting SCN of 226495995
RMAN>
上述提示的两个归档日志此时会在下述的路径下出现:
-bash-3.2$ cd $ORACLE_HOME/dbs
-bash-3.2$ ls
arch1_938_800615529.dbf initDEV02_noaq.ora lkDEV02
arch1_939_800615529.dbf initDEV02.ora.bak20120312 lkPROD
DEV02_zone04_ifile.ora init.ora orapwPROD
hc_DEV02.dat initPROD.ora
hc_PROD.dat initPROD.ora.bak.ok
-bash-3.2$
出现上述错误以后,可以直接在rman中执行
RMAN> run{
ALLOCATE CHANNEL ch00 TYPE sbt parms 'ENV=(ob_media_family=erpdb-mf)';
recover database until scn 226495995;
RELEASE CHANNEL ch00;
}
若接下来不重建控制文件,而直接以resetlogs方式打开数据库会提示报错,主要是因为日志文件路径还是PROD的路径。
RMAN> alter database open resetlogs;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 03/18/2013 18:21:50
ORA-00349: failure obtaining block size for '/db_data/PROD/db/apps_st/data/log01b.dbf'
ORA-27041: unable to open file
SVR4 Error: 2: No such file or directory
Additional information: 9
而在这里,我们采取的方法是在open resetlogs报错的情况下,重建控制文件
找到控制文件创建的语法,重新创建控制文件
bash-3.2$ export ORACLE_SID=PROD (注意这里还是用之前sid为PROD的参数文件启动db)
bash-3.2$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Mon Mar 18 14:48:37 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount pfile='/export/zones/zone04/root/uat_data/DEV02/db/tech_st/11.2.0/dbs/initPROD.ora';
ORACLE instance started.
Total System Global Area 1069252608 bytes
Fixed Size 2166160 bytes
Variable Size 427823728 bytes
Database Buffers 624951296 bytes
Redo Buffers 14311424 bytes
SQL>
SQL> alter database mount;
Database altered.
SQL> alter database backup controlfile to trace as '/tmp/control.sql';
Database altered.
找到restlogs方式的语法
-- Set #2. RESETLOGS case
将db的名字改为 DEV02,同时更改数据文件、日志文件的路径
然后关闭数据库,备份之前的控制文件,然后将三个控制文件删除
SQL> shutdown immediate ;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> exit
bash-3.2$ cp cntrl01.dbf cntrl01.dbf.bak20130318
bash-3.2
bash-3.2$ cd $ORACLE_HOME/dbs
bash-3.2$ cp initPROD.ora initDEV02.ora
注意这里改用新的ORACLE_SID了,而且startup nomount启动的时候,使用的是 initDEV02.ora (db_name 为 DEV02) 文件,而不是
initPROD.ora ( db_name 为 PROD)文件,他们的唯一区别是参数文件里的 db_name不一样,其他都一样
root@zone04 # su - oradev
Oracle Corporation SunOS 5.10 Generic Patch January 2005
-bash-3.2$
-bash-3.2$ env|grep ORACLE_SID
ORACLE_SID=DEV02
-bash-3.2$
-bash-3.2$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Mon Mar 18 15:00:41 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount pfile='/export/zones/zone04/root/uat_data/DEV02/db/tech_st/11.2.0/dbs/initDEV02.ora';
ORACLE instance started.
Total System Global Area 1069252608 bytes
Fixed Size 2166160 bytes
Variable Size 427823728 bytes
Database Buffers 624951296 bytes
Redo Buffers 14311424 bytes
SQL>
然后将控制文件的语法粘贴到sql中,也可以放到一个文本文件ctr.sql 中,执行这个sql文件,如果控制文件创建成功会显示 Control file created.
最终以resetlogs方式打开db
SQL> alter database open resetlogs;
Database altered.
最后添加临时表空间
SQL> select file_name from dba_data_files where tablespace_name='TEMP2';
no rows selected
SQL> ALTER TABLESPACE TEMP1 ADD TEMPFILE '/uat_data/DEV02/db/apps_st/data/temp01.dbf' SIZE 800M AUTOEXTEND on next 50 maxsize 8000M;
Tablespace altered.
SQL> ALTER TABLESPACE TEMP2 ADD TEMPFILE '/uat_data/DEV02/db/apps_st/data/temp02.dbf' SIZE 800M AUTOEXTEND on next 50 maxsize 8000M;
Tablespace altered.
以上是完整的异机恢复步骤
另外一种方法是:在我们执行 alter database open resetlogs 报错的时候,可以不重建控制文件,直接用nid修改db,但是个人理解从本质上还是修改控制文件
RMAN> alter database open resetlogs;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 03/18/2013 18:21:50
ORA-00349: failure obtaining block size for '/db_data/PROD/db/apps_st/data/log01b.dbf'
ORA-27041: unable to open file
SVR4 Error: 2: No such file or directory
Additional information: 9
这个时候可以用 如下命令强制清除当前日志组4
SQL> alter database clear logfile group 4; //清除当前日志组
然后再进行 alter database open resetlogs
再按照步骤执行 nid ,步骤参考 http://blog.youkuaiyun.com/tianlesoftware/article/details/6240983
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24862808/viewspace-756541/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24862808/viewspace-756541/