RMAN在通过NFS备份、恢复的时候,会出现ORA-27054错误。
Oracle 10G Rac环境,采用了NFS mount的方式,将远端站点的目录映射到本地磁盘,来解决RAC的归档日志无法访问的问题。简单执行步骤如下:
首先在两个节点上分别建立归档的目的目录:
# su - oracle
Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001
$ mkdir /data1/archivelog1 /data1/archivelog2
$ exit
# hostname
racnode1
# su - oracle
Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001
$ mkdir /data1/archivelog1 /data1/archivelog2
$ exit
# hostname
racnode2
在节点一设置目录的共享:
# share -F nfs -o rw=racnode2 /data1/archivelog1
在节点二设置目录的共享:
# share -F nfs -o rw=racnode1 /data1/archivelog2
在节点一加载节点二的目录:
# mount racnode2:/data1/archivelog2 /data1/archivelog2
在节点二加载节点一的目录:
# mount racnode1:/data1/archivelog1 /data1/archivelog1
在尝试备份的时候:
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> backup database plus archivelog delete all input;
6> }
分配的通道: c1通道 c1: sid=307 实例=testrac2 devtype=SBT_TAPE通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)
分配的通道: c2通道 c2: sid=306 实例=testrac2 devtype=SBT_TAPE通道c2: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)
启动 backup 于 29-5月 -07当前日志已存档释放的通道: c1释放的通道: c2
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: backup plus archivelog 命令 (在 05/29/2007 14:06:09 上) 失败
www.ixdba.net
RMAN-06059: 没有找到预期的归档日志, 归档日志的丢失将影响可恢复性
ORA-19625: 识别文件/data1/archivelog1/1_253_618591128.dbf时出错
ORA-27054: 创建文件或文件驻留的 NFS 文件系统未使用正确的选项装载
Additional information: 2
从操作系统上可以看到这个文件已经存在:
$ ls -l /data1/archivelog1
total 1599904
-rw-rw---- 1 oracle oinstall 533180928 May 29 14:03 1_253_618591128.dbf
-rw-rw---- 1 oracle oinstall 285244928 May 29 14:05 1_254_618591128.dbf
-rw-rw---- 1 oracle oinstall 292864 May 29 14:06 1_255_618591128.dbf
从Metalink的查询看,这个错误还比较普遍。在文章Note:424785.1里面进行了比较详细的描述。
解决方法包括设置事件10298 level 32,打补丁:5146667,或者在mount的时候设置参数:rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,vers=3,timeo=600,actimeo=0。
注意metalink上给出的参数并非对所有系统都适用,比如在Solaris8上就要去掉tcp参数。而去掉了tcp之后,似乎这种方法就不生效了。
剩下两种方式,打补丁需要将数据库关闭,而且一般使用NFS都是用在Rac的环境,补丁还需要在两个节点上同时打,比较麻烦。
而设置EVENT虽然简单,只是要重启系统才能生效。
设置Oracle的事件10298,并重启数据库:
$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on 星期二 5月 29 16:06:32 2007
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> alter system set event='10298 trace name context forever, level 32' scope = spfile;