Networker 8.2异机恢复Oracle 11g RAC集群环境
本文是一篇迟来的博文,写这篇博文源于近日在整理技术笔记时,看到2年前写的EMC Networker 8.1异机恢复Oracle 11gR2数据库的操作笔记(测试的是假如生产数据库服务器崩溃宕机,而将备份数据恢复到备用数据库服务器)。虽然去年EMC就已推出了Networker 9,但本文可能多少还有一点参考价值,便稍加整理后发了出来。
一、测试环境
计算机名 | IP地址 | 操作系统 | 角色 | 安装软件 |
Bakserver | 172.16.3.18 | RedHat 6 | 备份服务器 | EMC Networker 8.2.2 |
dm01db01 | RedHat 5 | 生产数据库服务器(源数据库) | Oracle 11g R2、 lgtoclnt-8.2.2-1.x86_64.rpm(Networker客户端) lgtonmda-8.2.2-1.x86_64.rpm (Networker数据库模块) | |
oracletesta | 172.16.0.69 | RedHat 6 | 测试数据库服务器(目标数据库) | Oracle 11g R2、 lgtoclnt-8.2.2-1.x86_64.rpm(Networker客户端) lgtonmda-8.2.2-1.x86_64.rpm (Networker数据库模块) |
注:测试数据库服务器的Oracle版本、实例名、Oracle相关目录、创建数据库时ASM路径及权限必须和生产数据库服务器一致。
二、测试数据库服务器准备
1、安装配置Oracle数据库,其中版本、实例名、相关目录及权限均需要和生产数据库服务器一致,这部分操作不是本文重点故略过。
2、安装Networker客户端及数据库模块,版本需与生产数据库服务器一致。
(1)解压networker客户端安装包配置好yum源并生成缓存,解决安装包依赖问题。
(2)安装Networker客户端
(3)如果恢复数据量较大最好使用SAN存储网络恢复,需要安装存储节点客户端。
(4)启动Networker客户端
(5)解压NMDA8.2.2数据库模块安装包
(6)安装NMDA8.2.2数据库模块
3、链接库文件,切换到oracle用户进入到/$ORACLE_HOME/lib/,然后执行以下命令:
ln –s /usr/lib/libnsrora.so libobk.so
切换root用户 nsrorara -i oracle 模块启用
4、确保归档已开启
[oracle@oracletesta ~]$ sqlplus / as sysdba
SQL>archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oradata/arch
Oldest online log sequence 363
Next log sequence to archive 365
Current log sequence 365
5、打开控制文件自动备份
[oracle@oracletesta ~]$rman target /
RMAN> configure controlfile autobackup on;
RMAN> configure controlfile autobackup format for device type 'sbt_tape' to '/NMDA_%F/'
6、做好hosts解析,确保备份服务器、目标数据库服务器之间能互相解析。
7、创建SAN网络存储节点(这里省略具体步骤)
(1)首先配置SAN网络交换机,将虚拟带库或者物理带库,设备光口和主机HBA卡光口划zone
(2) 再到虚拟带库添加主机连接信息并分配驱动器
(3)最后在Networker 创建存储节点,并扫描设备
(4)配置在Networker 库管理重新配置库,勾选分配的驱动器并启动配置
8、在Networker控制台操作,新客户端向导
(1)输入客户端名称,并按默认选择传统客户端
(2)点击选择Oracle
(3)选择目标池为Data Domain存储中的池
(4)按默认选择第一项
(5)填写相关目录路径,以及用户名、实例名(按照Oracle用户环境变量填写)
(6)选择浏览策略和保留策略,以及远程访问标识*@*
(7)选择添加到的组,默认已经勾选了default组,记得要去掉勾选。此处是要备份时才需要,我们现在只是为了恢复数据库而创建客户端,并不是要添加进组中进行备份,所以后面创建完客户端后需要从组中删除此客户端
(8)选择创建的SAN存储节点
(9)这样就完成了客户端的创建,可以恢复数据了。
三、异机恢复过程
1、通过Networker查询存储集,确认要恢复的日期,例如从DataDomain存储中恢复6月14号的备份数据
2、找到上图框处选中的这个存储集,记下这个存储集的名称
3、数据库的恢复操作必须在测试数据库服务器(即目标机)上进行,需要使用RMAN命令进行恢复
(1)创建临时参数文件pfile,并启动数据库到nomount模式(因为是RAC集群环境,必须将另一个节点数据也关闭)
[oracle@oracletesta ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Tue Nov 2514:18:59 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> shutdown immediate
ORA-01109: database not open
查看原spfile路径
SQL>show parameter spfile;
SQL>'/u01/app/oracle/product/11.2.04/db_1/dbs/spfilePROD1.ora'
SQL>create spfile from pfile;
SQL>create pfile='/u01/app/oracle/product/11.2.04/db_1/dbs/ma.ora' from spfile;
File created.
SQL>startup nomount pfile='/u01/app/oracle/product/11.2.04/db_1/dbs/ma.ora';
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size 2253664 bytes
Variable Size 1006636192 bytes
Database Buffers 587202560 bytes
Redo Buffers 7319552 bytes
(2)查出源数据库dm01db01的DBID,(存储集名称中间NMDA_c-xxxxxxxxx9位数字就是DBid)然后将目标数据库的DBID设置和源数据库的DBID一样
[oracle@oracletesta ~]$ rman target /
Recovery Manager:Release 11.2.0.4.0 - Production on Wed Nov 19 14:49:36 2014
Copyright (c)1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected totarget database: MA (not mounted)
RMAN> set dbid=298958524;
executing command: SET DBID
(3)使用RMAN脚本恢复spfile
RMAN> RUN {
2> ALLOCATE CHANNEL CH1 TYPE 'SBT_TAPE';
3> send 'NSR_ENV=(NSR_SERVER=bakserver, NSR_CLIENT=dm01db01.chinacoal.com)';
4> restore spfile to '/u01/app/oracle/product/11.2.04/db_1/dbs/spfilePROD1.ora' from '/NMDA_c-298958524-20190614-00/';
5> }
执行RMAN脚本后输出如下,可以看到spfile文件已成功恢复:
allocated channel: s1
channel CH1: SID=63 device type=SBT_TAPE
channel CH1: NMDA Oracle v8.2.2
sent command to channel: CH1
Starting restore
channel CH1: restoring spfile from AUTOBACKUP /NMDA_c-298958524-20190614-00/
channel CH1: SPFILE restore from AUTOBACKUPcomplete
退出rman,使用刚刚恢复的参数文件,启动到nomount模式
[oracle@oracletesta ~]$ sqlplus / as sysdba
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup nomount
(4)使用RMAN脚本恢复controlfile
RMAN> RUN {
2> ALLOCATE CHANNEL CH1 TYPE 'SBT_TAPE';
3> send 'NSR_ENV=(NSR_SERVER=bakserver, NSR_CLIENT=dm01db01)';
4> restore controlfile from '/NMDA_c-298958524-20190614-00/';
5> }
执行RMAN脚本后输出如下,可以看到控制文件已成功恢复:
allocated channel: CH1
channel CH1: SID=63 device type=SBT_TAPE
channel CH1: NMDA Oracle v8.2.2
sent command to channel: CH1
Starting restore at 27-NOV-14
channel CH1: restoring control file
channel CH1: restore complete, elapsed time:00:00:07
output filename=/database/dbdata/ma/control01.ctl
output filename=/database/system/fast_recovery_area/ma/control02.ctl
(5)mount数据库
RMAN>alter database mount;
sql statement: alter database mount
(6)通过RMAN脚本还原数据文件,不需要指定时间点,RMAN会根据控制文件的记录去找
执行RMAN脚本后输出如下,可以看到数据文件已经成功restore,并开始recover
执行RMAN脚本后这时会提示报错找不到一个序列号为xxxx的归档,这是因为Oracle不会自动截断日志,会不断要求找下一个归档日志,因此需要在RMAN脚本中指定截断
(8)在recover脚本中添加until sequence 96772,再次使用RMAN脚本recover数据库
这次就recover成功了
(9)打开数据库,并resetlogs,这个报错是,数据库是以完整方式恢复,不需要resetlogs
RMAN> exit
RecoveryManager complete.
[oracle@oracletesta dbs]$ sqlplus / as sysdba
SQL> alter database openresetlogs;
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
SQL> alter database open;
Database altered.
(10)启动监听
[oracle@oracletesta dbs]$ lsnrctl
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 14-JUN-2019 18:37:17
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> start
(11)至此,数据库已完成异机恢复,剩余的工作便是测试数据是否完整、正常,更改应用系统的数据库连接地址进行验证等。