此次记录一下Oracle RAC集群备份异地单实例恢复操作。主要记录关键操作,由于保密原因不粘贴详细操作流程。

一、环境:

原库:

操作系统:Redhat 6.5
数据库:Oracle 11.2.0.4 RAC (双节点)
工具:rman
IP地址:192.168.10.10(节点1)

异地恢复库:

操作系统:Centos 6.5
数据库:Oracle 11.2.0.4 (单实例)
工具:rman
IP地址:192.168.10.123

二、操作

1.原库两个节点全部停止应用服务,停掉监听,防止再有连接进来进行操作。然后在一个节点(192.168.10.10)使用rman工具进行整库备份,在执行备份前手动归档一次,主要备份数据库、归档文件、控制文件。至于spfile参数文件可以不用备份,因为RAC环境的参数文件到单实例上还是需要修改很多地方的,可以在原库使用命令 create pfile=’/home/oracle/orclint.ora’ from spfile 生成pfile文件。

2.将备份后的数据库、归档、控制文件以及生成的pfile文件使用scp远程复制到192.168.10.123(异地库),放在了/data/rmanbackup目录下

3.192.168.10.123(异地库)已经安装了Oracle 11.2.0.4软件,并未建库。设置环境变量,尤其是ORACLE_SID与192.168.10.10(原库)集群环境一致,便于恢复操作。

4.根据传过来的pfile文件里的内容进行修改,我大致列一下修改后的参数文件:

*.audit_file_dest='/u01/app/oracle/admin/hkrt/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/hkrt/control01.dbf','/u01/app/oracle/oradata/hkrt/control02.dbf'
*.db_block_size=8192
*.db_domain=''
*.db_name='ORCL'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=hkrtXDB)'
*.log_archive_dest_1='LOCATION=/u01/arch'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=5034213376
*.open_cursors=300
*.processes=400

5.参数文件修改完后剩下的操作基本都在异地库了,sqlplus进入空实例,然后根据修改后的pfile进行启动到nomount状态(注意:参数文件中的内存配置、进程数配置要符合异地库内存,不然内存溢出,启动失败)。

参考命令:
startup nomount from pfile=’/data/rmanbackup/orclinit.ora’;

(由于是测试,所有并没有备份密码文件,可以在数据库恢复后重置用户密码)

6.讲数据库启动到nomount状态,登陆rman (rman target /),就可以看到数据库状态为nomount状态。然后进行控制文件的恢复,参考命令:

restore controlfile from ‘/data/rmanbackup//ctl_ORCL_20150830_6552_1’;

执行完控制文件还原操作后,控制文件会恢复到参数文件中指定的目录下

7.控制文件恢复后就可以启动到mount状态了,

RMAN> alter database mount;

启动到mount状态先别着急恢复数据库,需要先将备份集注册到rman中

RMAN> catalog start with ‘/data/rmanbackup’;

(路径就是你存放所有备份的目录)

注册完成后,先交叉校验备份集:

RMAN> crosscheck backupset;

删除过期的备份,因为你备份是异地备份,所以在RAC中记录的备份全部过期,进行清除

RMAN> delete expired backup;

8.现在开始恢复数据库文件,因为RAC数据库数据文件、日志文件等存储路径时在ASM磁盘中,路径基本是以 ‘+DATA’ 开头,在执行restore database 命令前需要进行文件路径转换。

先在原库上生成关于数据文件路径转换的脚本,便于恢复操作,脚本如下(在原库查询得出脚本):

select 'set newname for datafile ' || a.file# || ' to "' || a.name|| '";' from v$datafile a
union all
select 'set newname for tempfile ' || b.file# || ' to "' || b.name|| '";' from v$tempfile b
union all
select'sql "alter database rename file ''''' || c.member|| '''''  to  ''''' ||
c.member|| ''''' ";'
from v$logfile c;

得到结果为:

SETNEWNAMEFORDATAFILE'||A.FILE#||'TO"'||A.NAME||'";'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------set newname for datafile 1 to "+DATA/orcl/datafile/system.189.783470213";set newname for datafile 2 to "+DATA/orcl/datafile/sysaux.269.783470211";set newname for datafile 3 to "+DATA/orcl/datafile/undotbs1.270.783470213";set newname for datafile 4 to "+DATA/orcl/datafile/users.231.783075663";set newname for datafile 5 to "+DATA/orcl/datafile/example.279.783746801";set newname for datafile 6 to "+DATA/orcl/datafile/undotbs2.280.783470779";set newname for tempfile 1 to "+DATA/orcl/tempfile/temp.278.783470381";sql "alter database rename file ''+DATA/orcl/onlinelog/redo01.log''  to  ''+DATA/jmrac/onlinelog/group_2.276.877470349'' ";sql "alter database rename file ''+DATA/orcl/onlinelog/redo02.log''  to  ''+DATA/jmrac/onlinelog/group_2.277.877470349'' ";sql "alter database rename file ''+DATA/orcl/onlinelog/redo03.log''  to  ''+DATA/jmrac/onlinelog/group_1.274.877470345'' ";sql "alter database rename file ''+DATA/orcl/onlinelog/redo04.log''  to  ''+DATA/jmrac/onlinelog/group_1.275.877470345'' ";sql "alter database rename file ''+DATA/orcl/onlinelog/redo05.log''  to  ''+DATA/jmrac/onlinelog/group_3.281.877470929'' ";Ssql  "alter database rename file ''+DATA/orcl/onlinelog/redo06.log''  to  ''+DATA/jmrac/onlinelog/group_3.282.877470931'' ";sql "alter database rename file ''+DATA/orcl/onlinelog/redo07.log''  to  ''+DATA/jmrac/onlinelog/group_4.283.877470937'' ";sql "alter database rename file ''+DATA/orcl/onlinelog/redo08.log''  to  ''+DATA/jmrac/onlinelog/group_4.284.877470943'' ";
。。。。。。。。

会将所有涉及到的数据文件全部显示,我这里就简单写个大概,得到以上脚本后进行简单的编辑:

run{allocate channel ch1 device type disk;
set newname for datafile 1 to "/u01/app/oracle/oradata/orcl/datafile/system.189.783470213";
set newname for datafile 2 to "/u01/app/oracle/oradata/orcl/datafile/sysaux.269.783470211";
set newname for datafile 3 to "/u01/app/oracle/oradata/orcl/datafile/undotbs1.270.783470213";
set newname for datafile 4 to "/u01/app/oracle/oradata/orcl/datafile/users.231.783075663";
set newname for datafile 5 to "/u01/app/oracle/oradata/orcl/datafile/example.279.783746801";
set newname for datafile 6 to "/u01/app/oracle/oradata/orcl/datafile/undotbs2.280.783470779";
set newname for tempfile 1 to "/u01/app/oracle/oradata/orcl/tempfile/temp.278.783470381";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo01.log''  to  ''+DATA/jmrac/onlinelog/group_2.276.877470349'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo02.log''  to  ''+DATA/jmrac/onlinelog/group_2.277.877470349'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo03.log''  to  ''+DATA/jmrac/onlinelog/group_1.274.877470345'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo04.log''  to  ''+DATA/jmrac/onlinelog/group_1.275.877470345'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo05.log''  to  ''+DATA/jmrac/onlinelog/group_3.281.877470929'' ";
Ssql  "alter database rename file ''+DATA/orcl/onlinelog/redo06.log''  to  ''+DATA/jmrac/onlinelog/group_3.282.877470931'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo07.log''  to  ''+DATA/jmrac/onlinelog/group_4.283.877470937'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo08.log''  to  ''+DATA/jmrac/onlinelog/group_4.284.877470943'' ";restore database;
switch datafile all;
switch tempfile all;
}

然后就可以在rman中运行以上修改好的 run 块(脚本)进行数据库恢复。此处我并没有生成关于redo日志的转换语句,因为我在讲redo日志转换放到 run脚本块中执行总会提示 +DATA开头的路径不存在,所以就省略了redo,但是我发现数据库恢复并未受影响,而且在恢复后redo日志路径已经转换了。

9.在执行以上 run 脚本命令后,会提示报错:

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 03/25/2015 09:56:55
RMAN-06026: some targets not found - aborting restore
RMAN-06023: no backup or copy of datafile 4 found to restore
RMAN-06023: no backup or copy of datafile 3 found to restore
RMAN-06023: no backup or copy of datafile 2 found to restore
RMAN-06023: no backup or copy of datafile 1 found to restore

其实所有的备份都在,就是报这个错,然后查看资料,需要进行一下操作:

RMAN> list incarnation;

List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time


1 1 JBDB 1285701182 PARENT 1 15-AUG-09
2 2 JBDB 1285701182 PARENT 945184 12-JUL-13

然后又在原库上做同样的查询:

RMAN> list incarnation;

List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time


1 1 JBDB 1285701182 PARENT 1 15-AUG-09
2 2 JBDB 1285701182 PARENT 945184 12-JUL-13

然后在异地库重置 incarnation 为2:

RMAN> reset database to incarnation 2;

执行后再次执行 run 脚本块:

RMAN> run{allocate channel ch1 device type disk;
set newname for datafile 1 to "+DATA/orcl/datafile/system.189.783470213";
set newname for datafile 2 to "+DATA/orcl/datafile/sysaux.269.783470211";
set newname for datafile 3 to "+DATA/orcl/datafile/undotbs1.270.783470213";
set newname for datafile 4 to "+DATA/orcl/datafile/users.231.783075663";
set newname for datafile 5 to "+DATA/orcl/datafile/example.279.783746801";
set newname for datafile 6 to "+DATA/orcl/datafile/undotbs2.280.783470779";
set newname for tempfile 1 to "+DATA/orcl/tempfile/temp.278.783470381";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo01.log''  to  ''+DATA/jmrac/onlinelog/group_2.276.877470349'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo02.log''  to  ''+DATA/jmrac/onlinelog/group_2.277.877470349'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo03.log''  to  ''+DATA/jmrac/onlinelog/group_1.274.877470345'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo04.log''  to  ''+DATA/jmrac/onlinelog/group_1.275.877470345'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo05.log''  to  ''+DATA/jmrac/onlinelog/group_3.281.877470929'' ";
Ssql  "alter database rename file ''+DATA/orcl/onlinelog/redo06.log''  to  ''+DATA/jmrac/onlinelog/group_3.282.877470931'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo07.log''  to  ''+DATA/jmrac/onlinelog/group_4.283.877470937'' ";
sql "alter database rename file ''+DATA/orcl/onlinelog/redo08.log''  to  ''+DATA/jmrac/onlinelog/group_4.284.877470943'' ";restore database;
switch datafile all;
switch tempfile all;
}

执行正常进行,恢复没有出现问题。

10.数据库文件恢复后,执行recover database会报错,提示缺少归档文件:

RMAN> recover database; Starting recover at
using channel ORA_DISK_1starting media recoveryRMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at
RMAN-06053: unable to perform media recovery because of missing log
RMAN-06025: no backup of archived log for thread 1 with sequence 71125 and starting SCN of 16888076231found to restore

两种方式:
一是在原库找到归档文件然后传到异地库服务器,注册归档信息,然后再次recover恢复数据库,前提是归档文件能找到。集群环境注意在备份前切换一次日志,thread 表示节点。

注册归档信息(归档文件为 arch_71125_xxxx):

RMAN> catalog archivelog ‘/data/rmanbackup/arch_71125_xxxx’;

RMAN> recover database;

(恢复时提示找不到一个unknow的归档,不影响恢复)

二是按照提示的scn进行不完全恢复:
RAMN> run{
set until scn 16888076231;
recover database;
}

因为我归档文件并未找到,所以是第二种方式。

11.恢复完成后登陆数据库然后打开数据库(resetlogs方式):

SQL> alter database open resetlogs;

Database altered.

至此恢复完成。生产环境在恢复成功后一定要重新进行备份。

以上是大概的操作过程,仅供参考,在生产环境执行时一定要慎之又慎,做好数据备份,如果有不同情况,也欢迎评论交流,共同学习。

记一次Oracle 11.2.0.4 RAC异地还原到单实例相关推荐

  1. oracle数据库升级失败,Oracle 11.2.0.1 rac 升级失败后,数据库降级方案(flashback database)...

    升级失败后,数据库降级方案(flashback database) 环境:Oracle 11.2.0.1 rac on redhat 5.8 Flashback database 准备工作 查看是否f ...

  2. ORACLE LINUX 6.3 + ORACLE 11.2.0.3 RAC + VBOX安装文档

    ORACLE LINUX 6.3 + ORACLE 11.2.0.3 RAC + VBOX安装文档 2015-10-21 12:51 525人阅读 评论(0) 收藏 举报  分类: Oracle RA ...

  3. linux oracle11.2安装 ins-1010,Oracle 11.2.0.2 RAC安装出现INS-35354解决

    今天在安装一套Oracle 11.2.0.2 RAC数据库时出现了INS-35354的问题: 因为之前已经成功安装了11.2.0.2的GI,而且Cluster的一切状态都正常,出现这错误都少有点意外: ...

  4. Oracle 11.2.0.1 rac升级到11.2.0.4

    升级过程分为三部分: 1.升级grid 2.升级rdbms 3.升级数据字典 前期准备: 新建grid_home和oracle_home 升级前 升级后 版本 11.2.0.1 11.2.0.4 gr ...

  5. Oracle 11.2.0.4 RAC 手动打补丁

    文章目录 1 补丁介绍 1.1 下载补丁和最新OPatch 1.2 补丁说明 2 检查数据库当前OPatch版本 3 确认停止oem 1.查看oem运行状态: 2.如果是运行状态,则需要关闭: 4 更 ...

  6. ins32012 oracle安装,Oracle 11.2.0.4 RAC Database for Windows 2012安装DB时收到[INS-35423]错误...

    这是同事遇到的问题,在这里做个标记,希望对大家有所帮助. 一.问题描述. 操作系统:Microsoft Windows x64 (64-bit) 2012 数据库版本:Oracle11g 11.2.0 ...

  7. oracle11内存建议,环境:oracle 11.2.0.1 +aix6内存问题

    环境:oracle 11.2.0.1 +rac +AIX 6.1建立两套 1问题描述 2010年11月29日下午15点左右,p570a主机telnet不进去,应用新建连接不成功,严重影响到业务,16点 ...

  8. asm冗余 oracle_oracle 11.2.0.1 rac 修改asm磁盘组的冗余模式(redundancy mode)为normal

    oracle 11.2.0.1 rac 修改asm磁盘组的冗余模式(redundancy mode)为normal 背景介绍: oracle 11.2.0.1 linux rac , ocr和vote ...

  9. Oracle 11.2.0.1 升级到 11.2.0.3 示例

    Oracle 11.2.0.1 单实例升级到11.2.0.3. Oracle 升级的步骤都差不多. 先升级Oracle software,然后升级Oracle instance. Oracle 11. ...

最新文章

  1. 小米AI实验室六篇论文获ICASSP2022收录,多模态语音唤醒挑战赛夺冠
  2. 深度学习---TensorFlow学习笔记:搭建CNN模型
  3. 新ITC提交APP常见问题与解决方法(Icon Alpha,Build version,AppIcon120x120)(2014-11-17)
  4. 打孔怎么定位_红米K40将要发布,采用居中打孔屏,极窄边框设计
  5. ISA SERVER使用指南
  6. 网络编程学习笔记(getaddrinfo函数)
  7. C++ 函数--幽径初探索
  8. TensorFlow版的“Hello World”,运行官网第一个例子
  9. “chaos”的算法--之Floyd算法详解(求最短路径)
  10. win7 linux 共享文件夹权限设置,samba 配置共享 win7 无权限访问
  11. shell切割日志脚本
  12. charts引入icon图片_v-charts 踩坑之路
  13. python小游戏之二
  14. opencv MAC搭建 + Xcode配置
  15. C# System.Drawing.SystemColors 系统颜色
  16. 计算机专业抑郁症多,社工专业毕业的我得了抑郁症,我的痛苦别人难以理解?...
  17. 程序员常用英语单词1700
  18. 手把手教你怎样运用手机群控软件赚钱-手游工作室篇
  19. 透声投影幕布透声与画面效果可以媲美吗?
  20. 哥伦比亚大学计算机科学硕士排名,2020年哥伦比亚大学排名TFE Times美国最佳计算机科学硕士专业排名第16...

热门文章

  1. MPLS静态LSP部署
  2. 安装 synaptic on ubuntu 18
  3. Unity移动平台下的烘焙使用及优化
  4. 青海省谷歌地球高程DEM等高线下载
  5. 无痕埋点在Android中的实现
  6. 微信小程序菜品做法展示数据库设计_微信小程序结合后台数据管理实现商品数据的动态展示、维护...
  7. 程序员:一个女生不主动联系你还有机会吗?
  8. nginx搭建反向代理配置并测试
  9. Vue3项目基本知识点
  10. 【NEEPU OJ】1010--Good luck n' eatfried chicken tonight!