在利用srvctl启动ASM的时候碰到了这两个错误。
详细错误为:
[oracle@node1 dbs]$ srvctl start
asm -n node1
PRKS-1009 : Failed to start ASM instance "+ASM1" on node
"node1", [PRKS-1009 : Failed to start ASM instance "+ASM1"
on node "node1", [node1:ora.node1.ASM1.asm:
node1:ora.node1.ASM1.asm:SQL*Plus: Release 10.2.0.4.0 - Production on Mon Jun
13 19:34:00 2011
node1:ora.node1.ASM1.asm:
node1:ora.node1.ASM1.asm:Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
node1:ora.node1.ASM1.asm:
node1:ora.node1.ASM1.asm:Enter user-name: Connected to an idle instance.
node1:ora.node1.ASM1.asm:
node1:ora.node1.ASM1.asm:SQL> ORA-01565: error in identifying file
'/u01/app/oracle/product/10.2.0/db_1/dbs/init+ASM1.ora'
node1:ora.node1.ASM1.asm:ORA-27046: file size is not a multiple of logical
block size
node1:ora.node1.ASM1.asm:Additional information: 1
node1:ora.node1.ASM1.asm:
node1:ora.node1.ASM1.asm:ORA-01078: failure in processing system parameters
node1:ora.node1.ASM1.asm:SQL> Disconnected
node1:ora.node1.ASM1.asm:
CRS-0215: Could not start resource 'ora.node1.ASM1.asm'.]]
[PRKS-1009 : Failed to start ASM instance "+ASM1" on node
"node1", [node1:ora.node1.ASM1.asm:
node1:ora.node1.ASM1.asm:SQL*Plus: Release 10.2.0.4.0 - Production on Mon Jun
13 19:34:00 2011
node1:ora.node1.ASM1.asm:
node1:ora.node1.ASM1.asm:Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
node1:ora.node1.ASM1.asm:
node1:ora.node1.ASM1.asm:Enter user-name: Connected to an idle instance.
node1:ora.node1.ASM1.asm:
node1:ora.node1.ASM1.asm:SQL> ORA-01565: error in identifying file
'/u01/app/oracle/product/10.2.0/db_1/dbs/init+ASM1.ora'
node1:ora.node1.ASM1.asm:ORA-27046: file size is not a multiple of logical
block size
node1:ora.node1.ASM1.asm:Additional information: 1
node1:ora.node1.ASM1.asm:
node1:ora.node1.ASM1.asm:ORA-01078: failure in processing system parameters
node1:ora.node1.ASM1.asm:SQL> Disconnected
node1:ora.node1.ASM1.asm:
CRS-0215: Could not start resource 'ora.node1.ASM1.asm'.]]
可以看到,关键错误包括三个,分别是ORA-1565、ORA-27046和ORA-1078。其中ORA-1565错误指出错误的文件,而ORA-1078指出是在处理系统参数时报错。只有ORA-27046错误比较奇怪,对于一个文本文件而言,Oracle为什么回去检查文件是否满足逻辑块的整数倍呢。
检查对应的初始化文件,并未发现任何的错误,尝试手工启动ASM:
[oracle@node1 dbs]$ export ORACLE_SID=+ASM1
[oracle@node1 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Jun 13 19:22:10 2011
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> startup
ASM instance started
Total System Global Area 130023424 bytes
Fixed Size 2082208 bytes
Variable Size 102775392 bytes
ASM Cache 25165824 bytes
ASM diskgroups mounted
SQL> shutdown immediate
ASM diskgroups dismounted
ASM instance shutdown
SQL> startup pfile=/u01/app/oracle/product/10.2.0/db_1/dbs/init+ASM1.ora
ASM instance started
Total System Global Area 130023424 bytes
Fixed Size 2082208 bytes
Variable Size 102775392 bytes
ASM Cache 25165824 bytes
ASM diskgroups mounted
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 -
64bit Production
With the Partitioning, Real Application Clusters, Oracle Label Security, OLAP,
Data Mining and Real Application Testing options
无论是直接启动,还是指定参数启动,都没有问题。那么说明并非是初始化参数的问题,也不是ASM的问题,而应该是srvctl的配置问题。
于是删除了asm的配置,然后重新添加,问题解决:
[oracle@node1 oracle]$ srvctl remove asm -n node1
[oracle@node1 oracle]$ srvctl add asm -n node1 -i +ASM1 -o
/u01/app/oracle/product/10.2.0/db_1
[oracle@node1 oracle]$ srvctl start asm -n node1
那么是什么原因导致了错误的出现呢,询问了执行asm信息添加的人,发现在添加ASM的时候指定-p参数,并且指定的文件就是刚才的那个pfile文件。
对于srvctl add asm命令,-p指定的是spfile文件,如果这时指定的是一个pfile文件,那么Oracle会安装spfile的格式去检查这个文件文件,那么出现上面的ORA-27046的错误也是再正常不过了。