Linux x86_64中给RAC打补丁

2节点RHEL ES4集群, 安装oracle 10.2.0.1 rac后升级到10.2.0.2, 并打了几个小补丁补丁打完后, 建立ASM和数据库.整个过程非常顺利, 只是最后dbca运行完毕后, 只有在第一个节点(也就是安装数据库, 打补丁的节点), 可以正常启动ASM和数据库实例,另外一个节点可以启动ASM, 但启动数据库实例时报无法找到spfile的错误:

SQL> startup nomount
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+SISTEMA/pge/spfilepgec.ora'
ORA-17503: ksfdopn:2 Failed to open file +SISTEMA/pge/spfilepgec.ora
ORA-03113: end-of-file on communication channel
SQL>  

而此时ASM实例已经正常启动.

在metalink上找到Note 390591.1, 原来是打小补丁的时候opatch偷懒, 没有正确的将libknlopt.a复制到打补丁节点以外的其它节点.

解决方法有2种, 从Metalink Note 390391.1上摘录下来:


1) Manual copy of the "libknlopt.a" library to the offending nodes :

    -  ensure all instances are shut down
    -  manually copy $ORACLE_HOME/rdbms/lib/libknlopt.a from the local node to all remote nodes
    -  relink Oracle on all nodes :
       make -f ins_rdbms.mk ioracle

2) Install the patchset on every node using the "-local" option:

On Unix:
runInstaller -updateNodeList  -local ORACLE_HOME=$ORACLE_HOME CLUSTER_NODES=node1,node2,...

On Windows:
setup.exe -updateNodeList  -local ORACLE_HOME=%ORACLE_HOME% CLUSTER_NODES=node1,node2,...

这次安装过程中还发现了一个比较怪异的事件, 我打了多个不同的小补丁, 在2个ORACLE_HOME中打得顺序不同, libknlopt.a的内容也不同. 有人知道是什么原因么。