记一次Oracle 11.2.0.4 RAC异地还原到单实例
此次记录一下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异地还原到单实例相关推荐
- oracle数据库升级失败,Oracle 11.2.0.1 rac 升级失败后,数据库降级方案(flashback database)...
升级失败后,数据库降级方案(flashback database) 环境:Oracle 11.2.0.1 rac on redhat 5.8 Flashback database 准备工作 查看是否f ...
- 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 ...
- 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的一切状态都正常,出现这错误都少有点意外: ...
- 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 ...
- Oracle 11.2.0.4 RAC 手动打补丁
文章目录 1 补丁介绍 1.1 下载补丁和最新OPatch 1.2 补丁说明 2 检查数据库当前OPatch版本 3 确认停止oem 1.查看oem运行状态: 2.如果是运行状态,则需要关闭: 4 更 ...
- 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 ...
- oracle11内存建议,环境:oracle 11.2.0.1 +aix6内存问题
环境:oracle 11.2.0.1 +rac +AIX 6.1建立两套 1问题描述 2010年11月29日下午15点左右,p570a主机telnet不进去,应用新建连接不成功,严重影响到业务,16点 ...
- 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 ...
- 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. ...
最新文章
- 小米AI实验室六篇论文获ICASSP2022收录,多模态语音唤醒挑战赛夺冠
- 深度学习---TensorFlow学习笔记:搭建CNN模型
- 新ITC提交APP常见问题与解决方法(Icon Alpha,Build version,AppIcon120x120)(2014-11-17)
- 打孔怎么定位_红米K40将要发布,采用居中打孔屏,极窄边框设计
- ISA SERVER使用指南
- 网络编程学习笔记(getaddrinfo函数)
- C++ 函数--幽径初探索
- TensorFlow版的“Hello World”,运行官网第一个例子
- “chaos”的算法--之Floyd算法详解(求最短路径)
- win7 linux 共享文件夹权限设置,samba 配置共享 win7 无权限访问
- shell切割日志脚本
- charts引入icon图片_v-charts 踩坑之路
- python小游戏之二
- opencv MAC搭建 + Xcode配置
- C# System.Drawing.SystemColors 系统颜色
- 计算机专业抑郁症多,社工专业毕业的我得了抑郁症,我的痛苦别人难以理解?...
- 程序员常用英语单词1700
- 手把手教你怎样运用手机群控软件赚钱-手游工作室篇
- 透声投影幕布透声与画面效果可以媲美吗?
- 哥伦比亚大学计算机科学硕士排名,2020年哥伦比亚大学排名TFE Times美国最佳计算机科学硕士专业排名第16...