目前支持的NMDA 版本有NMDA 1.5 1.6 8.2 9.0 及以上 (NMDA 1.2于2016年3月底已经过保)。关于恢复请参考NMDA 8.2-SP1- NMDA Admin Guide (302-001-217 REV 01),以下提到的页码也是针对此文档的。关于Oracle恢复,一般都需要在DBA的协助下进行。在9.0以前,NMDA客户端有一个recover功能(右键客户端->recover),会根据需求一步步生成一个RMAN恢复脚本。注意: 只是生成脚本,具体执行还是得到目标客户端,运行RMAN。9.0新的版本可以直接在界面上恢复到本机或者duplicate到异机了。传统的方式是DBA直接准备一个RMAN脚本,区别只是在RMAN脚本中加上send或者parms参数将相应的NW信息填上。
准备工作以及具体步骤:
1. 先在NMC里面创建一个基本的异机客户机配置,名字是需要跑恢复脚本的目标主机名,“基本的”意思是存储集这栏saveset只需要写一个非RMAN文件名,比如可以写ALL或者/etc/hosts(随便写一个),然后在别名里面注意加上长短名; 具体请参考:P161 - Performing NMDA data restore and recovery
2. 在异机(目标端)的hosts文件里面也要加上源端的主机名和Networker服务器主机名条目,然后重启Networker nsrexecd服务生效。注意: 恢复过程中碰到的问题多是由域名解析造成的,所以可以先创建一个异机的普通文件备份测试一下恢复,通过后再去做Oracle的,这样就容易多了。
比如这里有一个域名解析问题:
nsradmin -p nsrexecd
>p type:nsrla
结果输出中看到的并不是当前的本机名,而是另一个名字。原因是目标端以前改过服务器名。
解决办法:
nsr_shutdown 关闭服务
mv /nsr/res/nsrladb /nsr/res/nsrladb 重命名nsrladb
/etc/init.d/networker start
nsrorara -i 手动注册NMDA Oracle模块 (重新注册NMDA Oracle 向导选项)
Oracle准备rman恢复脚本,一般都是这个格式,可以加上debug选项以及各种retry参数:
run {
allocate channel t1 type ’SBT_TAPE’;
allocate channel t2 type ’SBT_TAPE’;
send 'NSR_ENV=(NSR_SERVER=mars.emc.com,NSR_CLIENT=server1.emc.com,NSR_DEBUG_LEVEL=5, NSR_DIAGNOSTIC_DEST=/nsr/apps/logs)';
restore database;
recover database;
release channel t1;
release channel t2;
}
具体各种参数可以参考P355 Common NMDA parameters,debug日志(同时包含了backup的)一般命名格式为:
nsrdasv_Oracle_2016_10_27.xx.xx.log | 总的schedule nsrdasv执行日志 |
libnsrora_Oracle_2016_10_27.19_31_31.xx.log | 每个channel都有一个debug日志 |
msglog | RMAN的输出,需要设置NSR_RMAN_ARGUMENTS参数,在向导高级选项页或者nmda_oracle.cfg配置文件 |
然后Oracle异机恢复的大致步骤:
1. 取得源数据库dbid (如何取得dbid请咨询DBA)
2. 在异机,启动数据库到nomount阶段,如果启动提示没有spfile,可以直接拿一个spfile模板来修改启动(如何创建一个空的spfile,请咨询DBA)
sqlplus / as sysdba
sqlplus>startup nomount;
3. 恢复控制文件
rman target /
rman>set dbid=&dbid;
rman>allocate channel t1 type ‘SBT’;
rman>send 'NSR_ENV=(NSR_SERVER=&servername, NSR_CLIENT=&clientname,NSR_DATA_VOLUME_POOL=&poolname)';
rman>restore controlfile from autobackup; (这个是从最新的备份恢复,或者也可以指定具体一个备份集restore controlfile from 'c-xxxx-xxxxxx')
4. mount 数据库
sqlplus>alter database mount;
5. 恢复数据文件
rman>restore datafile;
6. 所有的脚本在allocate channel都要类似指定NMDA参数,比如send 'NSR_ENV=(NSR_SERVER=&servername, NSR_CLIENT=&clientname,NSR_DATA_VOLUME_POOL=&poolname)';
7. recover 数据库,这一步比较容易出错,一般都是缺少最新的归档日志,需要DBA协助再开Networker Case
rman>recover database;
8. 打开数据库
sqlplus>alter database open resetlogs;
更多精彩内容,请点击“阅读原文”进行查看!
如何每天都能收到如此精彩的文章?
①点击右上角→点击“查看官方账号”→点击“关注”
②长按并识别下图中的二维码,直接访问EMC中文支持论坛





