签到成功

知道了

CNDBA社区CNDBA社区

11.2.0.4 rac通过rman备份恢复到单机

2016-11-02 09:56 10094 0 原创 oracle维护
作者: shmily

环境准备:目标服务器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



 http://www.cndba.cn/asker/article/317

修改挂载备份目录的权限

[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/';




修改数据库的归档目录到备份目录

http://www.cndba.cn/asker/article/317


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; 
}



如果此时遇到下图所示错误

图片1.png

可能是因为incarnation这个值得问题,参考blog:

http://www.cnblogs.com/kerrycode/p/4320996.html

解决方案http://www.cndba.cn/asker/article/317


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

图片2.png 

输入auto自动,根据提示从备份的归档日志中恢复出相应的归档日志


RMAN> restore archivelog from sequence 29367 thread 3;

。。。。

根据提示上归档日志的时间点,恢复到操作控制文件的时间点即可。


http://www.cndba.cn/asker/article/317

处理日志,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’


http://www.cndba.cn/asker/article/317

处理日志文件


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.



http://www.cndba.cn/asker/article/317

删除多余的日志组

 


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';



http://www.cndba.cn/asker/article/317

再次尝试


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



http://www.cndba.cn/asker/article/317

关闭2,3节点,并把对应的日志文件删除,重建undotemphttp://www.cndba.cn/asker/article/317


SQL> alter database disable thread 2;


。。。。

到此整个恢复完成。http://www.cndba.cn/asker/article/317


版权声明:本文为博主原创文章,未经博主允许不得转载。

rman恢复

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
shmily

shmily

关注
  • 22
    原创
  • 0
    翻译
  • 2
    转载
  • 11
    评论
  • 访问:142141次
  • 积分:141
  • 等级:初级会员
  • 排名:第23名
精华文章
    热门文章
      Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

      AI QQ群