对于RAC环境而言,如果两个实例分别连接带库进行备份,那么默认情况下,彼此是看不到对方的备份信息的。
看一个简单的例子,在RAC环境的节点2上执行备份:
bash-3.00$ rman target /
恢复管理器: Release 10.2.0.3.0 - Production on 星期二 7月 21 11:05:47 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: TRADEDB (DBID=4181457554)
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> backup spfile;
5> }
使用目标数据库控制文件替代恢复目录分配的通道: c1通道 c1: sid=304 实例=tradedb2 devtype=SBT_TAPE通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)
启动 backup 于 21-7月 -09通道 c1: 启动全部数据文件备份集通道 c1: 正在指定备份集中的数据文件在备份集中包含当前的 SPFILE通道 c1: 正在启动段 1 于 21-7月 -09通道 c1: 已完成段 1 于 21-7月 -09段句柄=94kkmdp4_1_1 标记=TAG20090721T110612 注释=API Version 2.0,MMS Version 5.0.0.0通道 c1: 备份集已完成, 经过时间:00:02:46完成 backup 于 21-7月 -09释放的通道: c1
在节点2上,进行恢复的测试:
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> restore spfile to '/export/home/oracle/spfiletradedb2.ora' from '94kkmdp4_1_1';
5> }
分配的通道: c1通道 c1: sid=304 实例=tradedb2 devtype=SBT_TAPE通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)
启动 restore 于 21-7月 -09
通道 c1: 已找到的自动备份: 94kkmdp4_1_1通道 c1: 从自动备份复原 SPFILE 已完成完成 restore 于 21-7月 -09释放的通道: c1
显然不会有任何的问题,但是对于节点1来说,虽然通过读取控制文件,可以“看到”这个备份信息,但是它无法从带库上找到这个文件:
bash-3.00$ rman target /
恢复管理器: Release 10.2.0.3.0 - Production on 星期二 7月 21 14:28:10 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: TRADEDB (DBID=4181457554)
RMAN> list backup of spfile tag 'TAG20090721T110612';
备份集列表
===================
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
1266 Full 256.00K SBT_TAPE 00:02:37 21-7月 -09
BP 关键字: 2297 状态: AVAILABLE 已压缩: NO 标记: TAG20090721T110612
句柄: 94kkmdp4_1_1 介质:
包含的 SPFILE: 修改时间: 21-7月 -09
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> restore spfile to '/export/home/oracle/spfiletradedb2.ora' from '94kkmdp4_1_1';
5> }
使用目标数据库控制文件替代恢复目录分配的通道: c1通道 c1: sid=136 实例=tradedb1 devtype=SBT_TAPE通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)
启动 restore 于 21-7月 -09
释放的通道: c1
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore 命令 (在 07/21/2009 11:24:05 上) 失败
RMAN-06172: 没有找到自动备份或指定的句柄不是有效副本或片段
为了使得当前节点可以看到其他节点的备份信息,需要在分配连接的时候指定NB_ORA_CLIENT信息:
RMAN> run
2> {
3> allocate channel c1 device type sbt parms 'ENV=(NB_ORA_CLIENT=ahrac2)';
4> restore spfile to '/export/home/oracle/spfiletradedb2.ora' from '94kkmdp4_1_1';
5> }
使用目标数据库控制文件替代恢复目录分配的通道: c1通道 c1: sid=126 实例=tradedb1 devtype=SBT_TAPE通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)
启动 restore 于 21-7月 -09
通道 c1: 已找到的自动备份: 94kkmdp4_1_1释放的通道: c1
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore 命令 (在 07/21/2009 14:28:29 上) 失败
ORA-19870: 读取备份段 94kkmdp4_1_1 时出错
ORA-19507: 无法检索顺序文件, 句柄= "94kkmdp4_1_1", 参数 = ""
ORA-27029: skgfrtrv: sbtrestore 返回错误
ORA-19511: 从介质管理器层接收到错误, 错误文本为:
Failed to process backup file <94kkmdp4_1_1>
虽然这里仍然报错,但是错误信息已经改变,而且RMAN已经明确的给出信息:通道 c1: 已找到的自动备份: 94kkmdp4_1_1。
只不过是其他的原因导致恢复过程出现了错误。除了在RMAN分配CHANNEL的时候需要配置CLIENT信息,还要在NETBACKUP的安装SERVER上进行设置,确保任何名称的客户端都可以读取备份信息:
bash-3.00# cd /usr/openv/netbackup/db
bash-3.00# mkdir altnames
bash-3.00# touch altnames/No.Restrictions
创建netbackup/db/altnames/No.Restrictions文件,然后再次执行恢复:
RMAN> run
2> {
3> allocate channel c1 device type sbt parms 'ENV=(NB_ORA_CLIENT=ahrac2)';
4> restore spfile to '/export/home/oracle/spfiletradedb2.ora' from '94kkmdp4_1_1';
5> }
分配的通道: c1通道 c1: sid=126 实例=tradedb1 devtype=SBT_TAPE通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)
启动 restore 于 21-7月 -09
通道 c1: 已找到的自动备份: 94kkmdp4_1_1通道 c1: 从自动备份复原 SPFILE 已完成完成 restore 于 21-7月 -09释放的通道: c1
终于在节点1上恢复了节点2在带库上的备份。