环境准备:目标服务器168已安装好数据库软件,rac环境备份目录通过nfs挂载到目标服务器上
一 在168服务器上生成参数文件
[oracle@database orcl]$ vim /tmp/initorcl.ora *.audit_file_dest='/oracle/oracle/admin/orcl/adump' *.audit_trail='NONE' *.compatible='11.2.0.4.0' *.control_files='/oracle/oracle/control01.ctl','/oracle/oracle/orcl/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.db_recovery_file_dest='/oracle/oracle/fast_recovery_area' *.db_recovery_file_dest_size=4385144832 *.diagnostic_dest='/oracle/oracle' *.log_archive_format='%t_%s_%r.dbf' *.memory_max_target=15769803776 *.memory_target=15769803776 *.open_cursors=1000 *.pga_aggregate_target=2442450944 *.processes=4000 *.session_cached_cursors=800 *.sga_target=7179869184 *.undo_retention=10800 *.undo_tablespace='UNDOTBS1'
二 利用参数文件打开目标库到nomount状态
SQL> startup nomount pfile='/tmp/initorcl.ora'; ORACLE instance started. Total System Global Area 1.5700E+10 bytes Fixed Size 2268672 bytes Variable Size 9932112384 bytes Database Buffers 5737807872 bytes Redo Buffers 27979776 bytes
三 修改挂载备份目录的权限
[root@database backup]# chmod -R 777 2016091/
四 进入rman ,从备份中恢复控制文件
[oracle@database trace]$ rman target /; Recovery Manager: Release 11.2.0.4.0 - Production on Wed Sep 21 16:23:25 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (not mounted) RMAN>restore controlfile from '/rman/backup/20160921/cntrl_ORCL_1411280035_7303_1_20160921'; Starting restore at 21-SEP-16 using channel ORA_DISK_1 channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:03 output file name=/oracle/oracle/control01.ctl output file name=/oracle/oracle/orcl/control02.ctl Finished restore at 21-SEP-16
启动数据库到mount状态
RMAN>mount database;
利用catalog注册备份
RMAN>catalog start with '/rman/backup/20160921/';
五 修改数据库的归档目录到备份目录
SQL> alter system set log_archive_dest_1='location=/rman/backup/20160921/'; System altered.
六 检查恢复的控制文件中数据文件的目录
SQL> set line 200 pagesize 9999; SQL> col name for a65; SQL> select file#,name from v$datafile;
七 根据实际的服务器的存储情况,重定义数据文件位置,并执行store操作
RUN { SET NEWNAME FOR DATAFILE 1 to '/oracle/oracle/oradata/orcl/system01.dbf'; SET NEWNAME FOR DATAFILE 2 to '/oracle/oracle/oradata/orcl/sysaux01.dbf'; SET NEWNAME FOR DATAFILE 3 to '/oracle/oracle/oradata/orcl/undotbs01.dbf'; SET NEWNAME FOR DATAFILE 4 to '/oracle/oracle/oradata/orcl/users01.dbf'; SET NEWNAME FOR DATAFILE 5 to '/oracle/oracle/oradata/orcl/undotbs02.dbf'; SET NEWNAME FOR DATAFILE 6 to '/oracle/oracle/oradata/orcl/undotbs03.dbf'; SET NEWNAME FOR DATAFILE 7 to '/oracle/oracle/oradata/orcl/undotbs1_02.dbf'; SET NEWNAME FOR DATAFILE 8 to '/oracle/oracle/oradata/orcl/undotbs2_02.dbf'; SET NEWNAME FOR DATAFILE 9 to '/oracle/oracle/oradata/orcl/undotbs3_02.dbf'; SET NEWNAME FOR DATAFILE 10 to '/oracle/oracle/oradata/orcl/prod01.dbf'; SET NEWNAME FOR DATAFILE 11 to '/oracle/oracle/oradata/orcl/prod02.dbf'; SET NEWNAME FOR DATAFILE 12 to '/oracle/oracle/oradata/orcl/prod03.dbf'; SET NEWNAME FOR DATAFILE 13 to '/oracle/oracle/oradata/orcl/prod04.dbf'; SET NEWNAME FOR DATAFILE 14 to '/oracle/oracle/oradata/orcl/prod05.dbf'; SET NEWNAME FOR DATAFILE 15 to '/oracle/oracle/oradata/orcl/prod06.dbf'; SET NEWNAME FOR DATAFILE 16 to '/oracle/oracle/oradata/orcl/prod07.dbf'; SET NEWNAME FOR DATAFILE 17 to '/oracle/oracle/oradata/orcl/prod08.dbf'; SET NEWNAME FOR DATAFILE 18 to '/backup/oradata/orcl/ttsinx01.dbf'; SET NEWNAME FOR DATAFILE 19 to '/backup/oradata/orcl/ttsinx02.dbf'; SET NEWNAME FOR DATAFILE 20 to '/backup/oradata/orcl/ttsinx03.dbf'; SET NEWNAME FOR DATAFILE 21 to '/backup/oradata/orcl/ttsinx04.dbf'; SET NEWNAME FOR DATAFILE 22 to '/backup/oradata/orcl/ttsinx05.dbf'; SET NEWNAME FOR DATAFILE 23 to '/backup/oradata/orcl/ttsinx06.dbf'; SET NEWNAME FOR DATAFILE 24 to '/backup/oradata/orcl/ttsinx07.dbf'; SET NEWNAME FOR DATAFILE 25 to '/backup/oradata/orcl/ttsinx08.dbf'; SET NEWNAME FOR DATAFILE 26 to '/oracle/oracle/oradata/orcl/sysaux02.dbf'; SET NEWNAME FOR DATAFILE 27 to '/oracle/oracle/oradata/orcl/prod09.dbf'; SET NEWNAME FOR DATAFILE 28 to '/oracle/oracle/oradata/orcl/prod10.dbf'; SET NEWNAME FOR DATAFILE 29 to '/oracle/oracle/oradata/orcl/prod11.dbf'; SET NEWNAME FOR DATAFILE 30 to '/oracle/oracle/oradata/orcl/prod12.dbf'; SET NEWNAME FOR DATAFILE 31 to '/oracle/oracle/oradata/orcl/prod13.dbf'; RESTORE DATABASE; SWITCH DATAFILE ALL; }
如果此时遇到下图所示错误

可能是因为incarnation这个值得问题,参考blog:
http://www.cnblogs.com/kerrycode/p/4320996.html
解决方案
RMAN> reset database to incarnation 2; database reset to incarnation 2
八 尝试打开数据库,报错
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: '/oracle/oracle/oradata/orcl/system01.dbf'
需要进行恢复
SQL> recover database until cancel unsing backup controlfile;
具体需要恢复到什么时间点根据时间情况来定,这里测试为目的,恢复到能打开就OK
输入auto自动,根据提示从备份的归档日志中恢复出相应的归档日志
RMAN> restore archivelog from sequence 29367 thread 3;
。。。。
根据提示上归档日志的时间点,恢复到操作控制文件的时间点即可。
九 处理日志,open datebase
再次尝试打开数据库
SQL> alter database open resetlogs; alter database open * ERROR at line 1: ORA-19751: could not create the change tracking file ORA-19750: change tracking file: '+SYSTEMDG/orcl/changetracking/ctf.517.868528725' ORA-17502: ksfdcre:1 Failed to create file +SYSTEMDG/orcl/changetracking/ctf.517.868528725 ORA-17501: logical block size 4294967295 is invali ORA-17503: ksfdopn:2 Failed to open file +SYSTEMDG/orcl/changetracking/ctf.517.868528725 ORA-15001: diskgroup "SYSTEMDG" does not exist or is not mounted ORA-15077: could not locate ASM instance serving a required diskgroup ORA-29701: unable to connect to Cluster Synchronization Service
原因是生产环境开启块变化跟踪功能了
关闭块跟踪:
SQL> alter database disable block change tracking; Database altered.
继续尝试打开数据库
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-00349: failure obtaining block size for '+DATADG/orcl/onlinelog/redo1_1.log’
处理日志文件
SQL> set line 200 pagesize 9999; SQL> col member for a65; SQL> desc v$logfile; Name Null? Type ----------------------------------------------------------------------------------------------------------------- -------- ---------------------------------------------------------------------------- GROUP# NUMBER STATUS VARCHAR2(7) TYPE VARCHAR2(7) MEMBER VARCHAR2(513) IS_RECOVERY_DEST_FILE VARCHAR2(3)
SQL> select group#,thread#,members from v$log; GROUP# THREAD# MEMBERS ---------- ---------- ---------- 1 1 1 2 1 1 3 1 1 4 1 1 5 2 1 6 2 1 8 2 1 7 2 1 9 3 1 11 3 1 10 3 1 12 3 1 12 rows selected.
删除多余的日志组
SQL> alter database drop logfile group 5;
。。。。。
重定义日志文件
alter database rename file '+DATADG/orcl/onlinelog/redo1_4.log' to '/backup/oradata/orcl/redo1_4.log'; alter database rename file '+DATADG/orcl/onlinelog/redo3_11.log' to '/backup/oradata/orcl/redo3_11.log'; alter database rename file '+DATADG/orcl/onlinelog/redo3_12.log' to '/backup/oradata/orcl/redo3_12.log'; alter database rename file '+DATADG/orcl/onlinelog/redo2_7.log' to '/backup/oradata/orcl/redo2_7.log'; alter database rename file '+DATADG/orcl/onlinelog/redo2_8.log' to '/backup/oradata/orcl/redo2_8.log';
再次尝试
SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-00392: log 4 of thread 1 is being cleared, operation not allowed ORA-00312: online log 4 thread 1: '/backup/oradata/orcl/redo1_4.log' alter database clear unarchived logfile group 3; alter database clear unarchived logfile group 4; alter database clear unarchived logfile group 7; alter database clear unarchived logfile group 8; alter database clear unarchived logfile group 11; alter database clear unarchived logfile group 12; SQL> alter database open resetlogs; Database altered.
十 剩余一些文件处理
查看节点情况
SQL> select THREAD#, STATUS, ENABLED from v$thread; THREAD# STATUS ENABLED ---------- ------ -------- 1 OPEN PUBLIC 2 OPEN PUBLIC 3 OPEN PUBLIC
关闭2,3节点,并把对应的日志文件删除,重建undo和temp
SQL> alter database disable thread 2;
。。。。
到此整个恢复完成。
版权声明:本文为博主原创文章,未经博主允许不得转载。
rman恢复






