ITPub博客

首页 > 数据库 > Oracle > Redhat AS4 for x86_64上安装Oracle 9204 RAC概述

Redhat AS4 for x86_64上安装Oracle 9204 RAC概述

原创 Oracle 作者:okzhixiang 时间:2007-10-18 15:52:21 0 删除 编辑

转自:http://yangtingkun.itpub.net

Oracle的官方文档Oracle9i Real Application Clusters Setup and Configuration很早前就看过了,但是从来没有亲手安装过RAC环境。这次安装过程中,碰到了无数的问题,曾经几次都想要放弃,不过还是坚持了下来,最后侥幸成功了。

感谢biti_rainy帮我指出了两个重大的问题,没有他的帮助,可能我已经放弃了。

[@more@]

由于时间等多种因素,这里不会给出所有步骤的具体脚本。对于大部分步骤,可能仅仅通过“口述”的方式进行。

如果以后有机会的话,希望能将脚本补全,不过目前只能给出一个大致执行步骤:

首先是检查操作系统和硬件是否满足安装ORACLE RAC的需求,安装ORACLE 9204 RAC的需求和安装ORACLE 9204的要求基本一致,这里就不重复了,在这篇文章里面有详细的描述:http://yangtingkun.itpub.net/post/468/211768

下一步使用ROOT帐号对系统进行一些设置,对于安装ORACLE本身也需要的设置,这里就不重复了,在上面给出的链接中也可以找到:

在两台服务器的/etc/hosts文件中添加下列内容:

172.25.198.245 GPOLNX2

172.25.198.244 GPOLNX

10.1.1.1 inter-gpo1

10.1.1.2 inter-gpo2

其中GPOLNXGPOLNX2分别是两台服务器的名称的外网IP地址。而inter-gpo1inter-gpo2是两个节点内部连接使用的IP和名称。这个内网使用的名称可以任取。

在两个节点的/etc/sysctl.conf文件中添加:

kernel.shmall = 2097152

kernel.shmmax = 8589934592

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default = 262144

net.core.rmem_max= 262144

net.core.wmem_default = 262144

net.core.wmem_max= 262144

前面6行是安装9i必须的参数,后面4行是安装RAC所必须的参数。

下面建立oracle用户和oinstalldba组,和建立Oracle9i的差别在于,最后在根目录下,建立一个需要oracle用户的目录,并把ORACLE_BASEORACLE_HOME等都建立在这个目录上。

# mkdir -p /u1/oracle/product/9.2

# chown -R oracle.dba /u1

# chmod -R ug=rwx,o=rx /u1

检查两个服务器上安装的包是否完成,除了9i所必须的包之外,还需要rsh-server包。另外,检查/etc/xinetd.d目录下的telnetftpshellloginrsh等服务处于enable的状态:检查文件中disable = no的设置。

在每个节点的/etc/hosts.equiv文件或oracle用户目录的.rhosts文件中添加节点名称:

GPOLNX2

GPOLNX

inter-gpo1

inter-gpo2

分别在两个节点测试rcp命令,是否可以在不输入密码的情况下拷贝成功:

[oracle@GPOLNX ~]$ rcp ./test.txt GPOLNX2:/home/oracle/connect to address 172.25.198.245: Connection refused
Trying krb4 rcp...
connect to address 172.25.198.245: Connection refused
trying normal rcp (/usr/bin/rcp)

下面设置oracle用户的环境变量,在两个节点的初始化shell文件上添加下列内容:

if [ $USER = "oracle" ]; then
ulimit -u 16384 -n 65536
fi

export ORACLE_BASE=/u1/oracle
export ORACLE_HOME=/u1/oracle/product/9.2
export ORACLE_SID=rac1
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
export PATH=$ORACLE_HOME/bin:$PATH
export DISPLAY=172.25.6.201:0

export LD_ASSUME_KERNEL=2.4.1

export DBCA_RAW_CONFIG=/home/oracle/mapfile
export SRVM_SHARED_CONFIG=/dev/rac/srvcfg

对于节点1可以设置ORACLE_SID=rac1,节点2设置ORACLE_SID=rac2。其他参数可以完全一致。其中DISPLAYDBCA_RAW_CONFIGSRVM_SHARED_CONFIG只需要在Oracle的安装节点上设置,对于非安装节点不是必须的。

下面需要建立裸设备或配置CFS,这个测试采用的是裸设备安装。首先是配置共享存储,建立physical volumn,然后建立logic volumn

利用pvcreatevgcreate命令建立所需的逻辑卷组datavg,然后利用lvcreate命令为每个数据文件、日志文件、控制文件和SPFILE文件建立逻辑卷,对于默认情况,需要建立类似下列的逻辑卷:

lvcreate -n /dev/datavg/testrac_raw_system_4g -L 4g datavg

lvcreate -n /dev/datavg/testrac_raw_undotbs1_4g -L 4g datavg

lvcreate -n /dev/datavg/testrac_raw_undotbs2_4g -L 4g datavg

lvcreate -n /dev/datavg/testrac_raw_temp_4g -L 4g datavg

lvcreate -n /dev/datavg/testrac_raw_xdb_1g -L 1g datavg

lvcreate -n /dev/datavg/testrac_raw_example_1g -L 1g datavg

lvcreate -n /dev/datavg/testrac_raw_cwmlite_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_drsys_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_odm_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_1_1_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_1_2_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_1_3_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_2_1_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_2_2_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_2_3_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_indx_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_tools_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_users_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_control1_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_control2_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_control3_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_spfile_100m -L 100m datavg

lvcreate -n /dev/datavg/srvcfg -L 100m datavg

lvcreate -n /dev/datavg/quorum -L 100m datavg

上述操作只需要在一个节点上完成。

由于Oracle不能直接使用这种逻辑卷,必须将逻辑卷绑定到裸设备上。

在两个节点上对上面所有的逻辑卷执行裸设备的绑定工作,类似语法如下:

/usr/bin/raw /dev/raw/raw2 /dev/datavg/quorum

/usr/bin/raw /dev/raw/raw3 /dev/datavg/testrac_raw_system_4g

/usr/bin/raw /dev/raw/raw4 /dev/datavg/testrac_raw_undotbs1_4g

.

.

.

并将裸设备属主修改为oracle

chown oracle.dba /dev/raw/raw2

chown oracle.dba /dev/raw/raw3

chown oracle.dba /dev/raw/raw4

.

.

.

由于raw2之类的名称很难记忆,可以使用下列命令建立有意义的链接:

ln -s -f /dev/raw/raw2 /dev/rac/quorum

ln -s -f /dev/raw/raw3 /dev/rac/testrac_raw_system_4g

ln -s -f /dev/raw/raw4 /dev/rac/testrac_raw_undotbs1_4g

.

.

.

上面的/dev/raw目录或/dev/rac目录如果不存在可以通过mkdir自己建立。

为了保证裸设备在重启后仍然生效,将下列内容添加到每个节点的/etc/sysconfig/rawdevices文件中:

/dev/raw/raw2 /dev/datavg/quorum

/dev/raw/raw3 /dev/datavg/testrac_raw_system_4g

/dev/raw/raw4 /dev/datavg/testrac_raw_undotbs1_4g

.

.

.

另外编辑/home/oracle/mapfile文件,内容如下:

system=/dev/rac/testrac_raw_system_4g

undotbs1=/dev/rac/testrac_raw_undotbs1_4g

undotbs2=/dev/rac/testrac_raw_undotbs2_4g

temp=/dev/rac/testrac_raw_temp_4g

xdb=/dev/rac/testrac_raw_xdb_1g

example=/dev/rac/testrac_raw_example_1g

cwmlite=/dev/rac/testrac_raw_cwmlite_500m

drsys=/dev/rac/testrac_raw_drsys_500m

odm=/dev/rac/testrac_raw_odm_500m

redo1_1=/dev/rac/testrac_raw_redo_1_1_500m

redo1_2=/dev/rac/testrac_raw_redo_1_2_500m

redo1_3=/dev/rac/testrac_raw_redo_1_3_500m

redo2_1=/dev/rac/testrac_raw_redo_2_1_500m

redo2_2=/dev/rac/testrac_raw_redo_2_2_500m

redo2_3=/dev/rac/testrac_raw_redo_2_3_500m

indx=/dev/rac/testrac_raw_indx_100m

tools=/dev/rac/testrac_raw_tools_100m

users=/dev/rac/testrac_raw_users_100m

control1=/dev/rac/testrac_raw_control1_100m

control2=/dev/rac/testrac_raw_control2_100m

control3=/dev/rac/testrac_raw_control3_100m

spfile=/dev/rac/testrac_raw_spfile_100m

这里面的配置是为了DBCA可以为对应的数据文件设置相应的裸设备。这个文件可以只存在于安装Oracle的节点上。

至此,准备工作基本完成,准备开始安装。

前面说明了安装的前期准备工作,下面开始正式安装。首先需要安装的是Oracle Cluster Manager软件,PUBLIC NODE 12分别填入两个服务器的主机名GPOLNXGPOLNX2,在PRIVATE NODE 12分别填入inter-gpo1inter-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设置过高导致文件拷贝时没有响应,以及isqlplusrdbms的编译出错问题。其解决方法在Redhat AS4上安装64Oracle9204这篇文章中,这里不在重复描述了,需要注意的是,对于最后的修改gccg++以及重新make失败的对象等操作,必须在两个节点上都执行。

安装完成之后,需要在两个节点上全都启动gsd,命令如下:

% gsdctl start

通过图形化界面的netca配置好监听和服务名,并在两个节点上分别检查,listener是否已经启动,如果没有启动,手工将其启动。然后就开始利用dbca来建立数据库。

如果前面初始化shell中的DBCA_RAW_CONFIGSRVM_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的检查状态需要一些时间,在检查的时候进程还存在,随后就退出了。导致我在检查gsdlsnodes上花费了大量的时间。

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 NODEPRIVATE NODE的地方填入的都是GPOLNXGPOLNX2

按照第一篇文章中给出的配置进行修改后,问题解决。

第四个问题是在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.Oracleotn上的官方文档基本上没有多大的作用,尤其是针对LINUX平台的安装。如果想要找参考资料,一定要在metalink上去找对应平台的安装手册。

对于一个没有装过RAC的新手,只参考otn上的安装文档,估计这辈子也安装不上。

2.操作系统的知识很重要。

操作系统相关的知识一直是我的弱项,而安装过程可以说是和操作系统打交道最多的过程,我在安装过程中碰到的很多的棘手问题对于一个操作系统熟悉的人来说并不算是问题。这也是一些对操作系统很熟但对Oracle并不很了解的系统管理员可以轻松的完成Oracle RAC的安装的原因。

3.无论干什么不要轻易放弃,碰到挫折就放弃是不会有提高的。

前面提到了,我有几次都打算放弃,其实我说的放弃是有原因的。目前测试的设备我只能使用两天,两天之后就要拿走挪做它用。而且我手里还有比较重要的事情的工作必须在短期内完成。如果没有在两天之内完成RAC的安装测试,那么这个测试就意义不大了,而且这两天的时间还是从其他工作中挤出来的。所以有几次碰到了一些难以解决的问题时,我不止一次的想要放弃。不过,所幸最终坚持了下来,并且安装测试也成功了。什么事情不到最后关头都不要轻易放弃。

4.资源很重要

无论是网络上的资源,还是你的同行朋友。有时候一个有经验的人的一句话可以解决你困扰已久的问题。

当然,这里的意思并不是说,碰到不会的问题就去问。其实,要不是时间紧迫,我也不会去轻易请教别人,起码不会那么快就去请教别人。有经验的人告诉你的方法固然管用。但是如果你是通过无数次的碰壁,想尽一切办法而最终解决了问题,那么收获可能不仅仅是知道了一个方法而已,而是加深了对这个问题的总的理解。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7185924/viewspace-977449/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    15
  • 访问量
    81617