发表于: 2006.09.27 15:24
分类: ORACLE
出处: http://yangtingkun.itpub.net/post/468/213674
---------------------------------------------------------------
下面继续介绍Oracle RAC软件的安装和建库的相关步骤。
Redhat AS4 for x86_64上安装Oracle 9204 RAC概述(一):http://yangtingkun.itpub.net/post/468/213417
Redhat AS4上安装64位Oracle9204:http://yangtingkun.itpub.net/post/468/211768
上一篇文章说明了安装的前期准备工作,下面开始正式安装。首先需要安装的是Oracle Cluster Manager软件,PUBLIC NODE 1和2分别填入两个服务器的主机名GPOLNX、GPOLNX2,在PRIVATE NODE 1和2分别填入inter-gpo1、inter-gpo2,在QUORUM DISK的地方填入已经配置好的裸设备:/dev/datavg/quorum。
安装完成以后,需要在每个节点配置hangtimer-check模块:REDHAT AS4 FOR X86_64中已经包含了这个模块,检查hangtimer-check是否被加载,如果没有需要将其加载:
# lsmod
Module Size Used by
hangcheck_timer 5337 0
.
.
.
如果在Module模块中没有看到,需要使用下面的方法将其加载:
# modprobe hangcheck-timer
并修改/etc/rc.local文件添加上述的命令,确保重启后也可以加载该模块
修改每个节点的$ORACLE_HOME/oracm/admin/cmcfg.ora文件,包含内容类似于:
ClusterName=Oracle Cluster Manager, version 9i
MissCount=210
PrivateNodeNames=inter-gpo1 inter-gpo2
PublicNodeNames=GPOLNX GPOLNX2
ServicePort=9998
CmDiskFile=/dev/rac/quorum
HostName=GPOLNX
KernelModuleName=hangcheck-timer
其中大部分内容在ORACM安装的过程中已经配置好了,主要修改的地方包括添加KernelModuleName模块和修改MissCount的值。
然后进入$ORACLE_HOME/oracm/bin目录,并切换为root权限执行:
$ su root
# ./ocmstart.sh
注意,是su root而不是su – root。
启动oracm之后,可以通过ps –ef|grep oracm来检查启动是否成功。注意,多检查几次,很可能oracm启动后几秒中内发现错误并退出。如果发现oracm退出,可以检查$ORACLE_HOME/oracm/log/cm.log文件。里面会有详细的日志。
启动好ORACM后,就可以安装ORACLE RAC软件了,整个安装过程除了比9I的安装多了一个选择CLUSTER NODE的界面,其他几乎完全一致。
安装显示WELCOME界面,点击NEXT,就会出现节点选择界面,如果这个节点选择界面没有出现的话,说明前面的配置出现了问题。这时可以使用lsnodes命令进行检查。
RAC的安装和9i的安装一样,也会出现LD_ASSUME_KERNEL设置过高导致文件拷贝时没有响应,以及isqlplus和rdbms的编译出错问题。其解决方法在Redhat AS4上安装64位Oracle9204这篇文章中,这里不在重复描述了,需要注意的是,对于最后的修改gcc、g++以及重新make失败的对象等操作,必须在两个节点上都执行。
安装完成之后,需要在两个节点上全都启动gsd,命令如下:
% gsdctl start
通过图形化界面的netca配置好监听和服务名,并在两个节点上分别检查,listener是否已经启动,如果没有启动,手工将其启动。然后就开始利用dbca来建立数据库。
如果前面初始化shell中的DBCA_RAW_CONFIG和SRVM_SHARED_CONFIG 设置正确,且mapfile文件的内容也正确,那么dbca建库不会有多大的问题,Oracle会自动为每个相应的文件指定裸设备。
总结一下在安装过程中碰到的几个问题:
第一个碰到的问题是oracm无法启动,在cm.log中发现下列的错误:
>ERROR: OemInit2: Attempting to open the CMDiskFile for a multi-node RAC on a non-NFS, non-OCFS, or non-raw device cluster, tid = main:1120480 file = oem.c, line = 494 {Wed Jul 27 15:59:55 2005 }
>ERROR: OemInit2: If the CMDiskFile is supposed to be an NFS or OCFS file, please make sure that the relevant shared file system is mounted properly, tid = main:1120480 file = oem.c, line = 495 {Wed Jul 27 15:59:55 2005 }
>ERROR: OemInit2: If the CMDiskFile is supposed to be a raw device, please make sure that it has been created properly, tid = main:1120480 file = oem.c, line = 496 {Wed Jul 27 15:59:55 20 05 }
这是由于CMDiskFile参数设置的文件格式有问题。开始的时候,只建立了逻辑卷,没有绑定到裸设备,因此Oracle在检测文件类型时报错。
第二个碰到的问题是hangcheck-timer无法启动的问题:
根据Oracle文档给出的方法:
# /sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
得到下面的错误信息:
insmod: can't read 'hangcheck-timer': No such file or directory
必须通过modprobe hangcheck-timer方式才能加载成功。
第三个问题是在第二个节点上启动gsdctl start时碰到的。
出现的错误信息为:
PRKC-1021 : Problem in the clusterware Failed to get list of active nodes from clusterware
把metalink相关的信息都看了一遍,没有发现和当前现象比较一致的。但是其中有一个文档建议用lsnodes检查节点的状态。
在节点一上执行lsnodes结果如下:
$ lsnodes
GPOLNX
GPOLNX2
而节点二上执行lsnodes则报错:
lsnodes.bin: cannot initialize cluster interface
又在metalink上查询了半天的相关错误,但是发现都不对症,结果最后发现问题居然是oracm没有启动。
这个问题前面也提到了,当时启动了oracm后,还通过ps –ef|grep oracm检查了一下,没想到,oracm的检查状态需要一些时间,在检查的时候进程还存在,随后就退出了。导致我在检查gsd和lsnodes上花费了大量的时间。
从cm.log中发现错误的信息是:
>TRACE: CheckDskInfo(): node(0) mode(3) ALIVE, tid = PollingThread:81926 file = oem.c, line = 1160 {Tue Sep 26 09:39:06 2006 }
>ERROR: DoSyncUpdate(): OEM check signaled shutdown, tid = PollingThread:81926 file = nmmember.c, line = 1559 {Tue Sep 26 09:39:06 2006 }
而现象就比较奇怪了。不管节点是NODE1还是NODE2,只要这个节点先启动oracm进程,那么另一个节点在启动进程的时候就会报错。
在网上搜索了很久,也尝试了里面给出的一些解决方案,比如:关闭iptables服务等,但是并没有什么效果。
最后还是biti帮我指出了问题,在最开始配置的时候,我想取巧,没有为两个节点设置单独的内网地址和名称,在PUBLIC NODE和PRIVATE NODE的地方填入的都是GPOLNX和GPOLNX2。
按照第一篇文章中给出的配置进行修改后,问题解决。
第四个问题是在DBCA时碰到的PRKR-1064 error in a RAC environment错误
Metalink上有一篇文章专门介绍这个错误的解决方法:Doc ID: Note:178435.1。安装里面的步骤一步步的检查,结果发现/var/opt/oracle/srvConfig.loc文件和$ORACLE_HOME/srvm/config/srvConfig.loc文件中srvconfig_loc的设置有问题,应该设置为srvconfig_loc=/dev/rac/srvcfg。
将文件修改正确后,执行gsdctl stop命令,然后使用命令srvconfig -init –f重新初始化SRVM文件。
使用gsdctl start命令启动GSD,然后重新建库,问题解决。
另外在建立数据库之前,如果没有保证节点二上的listener启动的话,Oracle会报错,说明node2上的监听没有启动。并且,一些最后的修改可能无法在instance2上进行,比如修改sys用户的密码的操作。
最后总结一下这次安装的几点心得:
1.Oracle的otn上的官方文档基本上没有多大的作用,尤其是针对LINUX平台的安装。如果想要找参考资料,一定要在metalink上去找对应平台的安装手册。
对于一个没有装过RAC的新手,只参考otn上的安装文档,估计这辈子也安装不上。
2.操作系统的知识很重要。
操作系统相关的知识一直是我的弱项,而安装过程可以说是和操作系统打交道最多的过程,我在安装过程中碰到的很多的棘手问题对于一个操作系统熟悉的人来说并不算是问题。这也是一些对操作系统很熟但对Oracle并不很了解的系统管理员可以轻松的完成Oracle RAC的安装的原因。
3.无论干什么不要轻易放弃,碰到挫折就放弃是不会有提高的。
前面提到了,我有几次都打算放弃,其实我说的放弃是有原因的。目前测试的设备我只能使用两天,两天之后就要拿走挪做它用。而且我手里还有比较重要的事情的工作必须在短期内完成。如果没有在两天之内完成RAC的安装测试,那么这个测试就意义不大了,而且这两天的时间还是从其他工作中挤出来的。所以有几次碰到了一些难以解决的问题时,我不止一次的想要放弃。不过,所幸最终坚持了下来,并且安装测试也成功了。什么事情不到最后关头都不要轻易放弃。
4.资源很重要
无论是网络上的资源,还是你的同行朋友。有时候一个有经验的人的一句话可以解决你困扰已久的问题。
当然,这里的意思并不是说,碰到不会的问题就去问。其实,要不是时间紧迫,我也不会去轻易请教别人,起码不会那么快就去请教别人。有经验的人告诉你的方法固然管用。但是如果你是通过无数次的碰壁,想尽一切办法而最终解决了问题,那么收获可能不仅仅是知道了一个方法而已,而是加深了对这个问题的总的理解。











