RedHat AS上安装Oracle RAC

RedHat AS上安装Oracle RAC

前言:在RedHat Advance Server上安装Oracle 9204 RAC
定位
本文定位在那些有了一定Linux与oracle基础的,而且对RAC也要有相关了解热人员作为参考手册,而不是所谓的安装向导。所以本文没有详细的安装过程之类的步骤,却有详细的安装错误的解决办法。

覆盖范围
适合在Redhet AS 2.1与AS 3.0系统上

包括单节点、多节点安装

包括9201升级到9204和直接安装9204

包括文件系统(单机),OCFS文件系统,RAW设备与NFS网络文件系统的安装异同

第一章. RAC的机制
RAC起源于版本8的OPS(Oracle parallel Server),OPS/RAC 最原始的设计初衷就是系统与应用的高可用性。OPS/RAC通过不同的节点使用一个(一般是一个)或多个oracle instances 与一个database 连接。RAC对早期的OPS做了众多的改进,特别是在节点的通信与管理上。RAC在工作期间,每个节点可以单独的被使用并且被应用程序负载均衡。如果发生意外,如一个节点的失败,可以实现节点的失败切换(failover),保证数据库24*7的高可用性。

RAC的数据库要求建立在共享磁盘设备上,对于OPS,只支持RAW设备,RAC已经可以支持文件系统(单机模拟)、OCFS、RAW、与NFS等文件系统或者设备。因为RAC是多个实例对应一个数据库,每个节点都有自己的日志,因此在备份与恢复方面,将需要一些特殊的处理。

但是,RAC并不提供容灾的功能,如共享磁盘设备的损坏,自然灾害等不可避免的损失,将导致RAC的不可使用,所以,RAC一般与其它的容灾组件配合使用,如RAC+DATA GUARD。

取代以前版本的分布式锁管理(DLM),全局缓冲服务(GCS)与全局锁服务(GES)将负责RAC的管理工作。GCS的同步层允许每个实例单独的访问数据库,通过数据库的核心层管理实例级别的一致性与锁资源。所有的以上任务将被一组特殊的后台进程来完成:

LMON (Lock Monitor Process),锁监控进程

责监控整个RAC的全局资源,管理实例与进程的过期以及全局缓冲服务与全局锁服务的恢复工作,LMON提供一个众所周知的聚族组服务(CGS)。

LMSn(The Global Cache Service Processes),全局缓冲服务进程

LMSn可以处理远程节点的全局缓冲服务的信息,LMSn也负责控制到远程节点的信息流,RAC可以提供10个这样的服务进程LMS0-LMS9,其进程的多少取决于实例之间的通信量。LMSn负责处理远程节点的全局缓冲服务获得的中断请求,保证多个实例的读一致性请求。LMSn创建块的一致性的读信息并送到远程节点的实例。

LMD(The Global Enqueue Service Daemon),全局资源服务

LMD资源代理进程,负责管理全局缓冲服务资源的管理,可以负责远程节点资源的请求与死锁的检测。

第二章. Linux上安装RAC的系统要求
2.1 内核需求
如果是如果是AS2.1,内核2.4.9 e16以上,如

[oracle@dbrac oracle]$ uname -a

Linux dbrac 2.4.9-e.37enterprise #1 SMP Mon Jan 26 11:20:59 EST 2004 i686 unknown

如果是3.0版本,则没有内核要求,内核信息一般如下

[root@ dbrac oracle]$ uname -a

Linux dbrac 2.4.21-4.ELsmp #1 SMP Fri Oct 3 17:52:56 EDT 2003 i686 i686 i386 GNU/Linux

2.2 binutils需求
binutils 要求binutils-2.11.90.0.8-12以上,如

如:2.1版本

[oracle@dbrac oracle]$ rpm -qa | grep -i binutils

binutils-2.11.90.0.8-12

3.0版本

[root@ dbrac oracle]$ rpm -qa | grep -i binutils

binutils-2.14.90.0.4-26

2.3 共享磁盘需求
如果是单节点安装,可以是本地硬盘,文件系统即可

如果是多节点安装,需要共享磁盘系统,可以是Raw设备,Ocfs文件系统,Nfs网络文件系统等。

第三章.安装前的准备工作
3.1调整Linux核心参数
在/etc/sysctl.conf中增加

net.core.rmem_default = 262144

net.core.rmem_max = 262144

net.core.wmem_default = 262144

net.core.rmem_max = 262144

net.ipv4.tcp_sack=0

net.ipv4.tcp_timestamps=0

fs.file-max = 65535

kernel.sem = 500 64000 100 128

kernel.shmmax = 2147483648

以上值根据不同的环境可能有变化,不再描述每个值的具体意义

3.2加载系统状态检查模块
这个模块在AS2.1-E16以上的核心或者是3.0的核心中是自带的,不需要安装,它取代了数据库9201版本的watchdog,所以,我们可以不需要配置watchdog,如果OS核心不够,可以升级核心。

可以通过如下方法检测是否存在该模块

$ find /lib/modules -name "hangcheck-timer.o"

/lib/modules/2.4.9-e.37enterprise/kernel/drivers/char/hangcheck-timer.o

你可以运行该模块并检查日志信息

# su - root

# /sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

# grep Hangcheck /var/log/messages |tail -1

在/etc/rc.local下增加

#!/bin/sh

touch /var/lock/subsys/local

/sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

或者

# su - root

# echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modules.conf

这样的话,在系统重新启动后,该模块可以自动加载

3.3确定与配置节点
如果确定在单个节点上模拟RAC,那么/etc/hosts文件内容可以类似如下

[root@dbrac root]# more /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1 localhost

10.0.29.162 dbrac

其中dbrac是该机器的机器名称,与hostname或/etc/sysconfig/network的内容一致

如果是在多节点上安装RAC,那么/etc/hosts文件内容可以类似如下

[oracle@db205 oracle]$ more /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1 localhost

192.168.168.205 dbrac1

192.168.168.206 dbrac2

192.168.0.205 dbrac1-eth1

192.168.0.206 dbrac1-eth1

其中分别代表公用节点名称与私有节点名称,公用节点是网卡1配置的IP地址,表示对外应用程序连接通道;私有节点是网卡2配置的IP地址,用于多个节点之间的通信专用。

3.4创建oracle用户与组
#groupadd dba

#useradd oracle -g dba

#passwd oracle

3.5设置节点环境变量
如果是AS 3.0,注意设置如下参数

export LD_ASSUME_KERNEL=2.4.1

以下参数在两个平台下公用

export ORACLE_BASE=/u01/oracle

export ORACLE_HOME=/u01/oracle/ora920

export ORACLE_TERM=xterm

export NLS_LANG=AMERICAN_AMERICA.zhs16gbk

export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib

PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

export PATH

3.6准备目录结构
su - oracle

$cd $ORACLE_BASE

$ mkdir -p admin/rac/ ---存放配置文件

$ cd admin/rac/

$ mkdir bdump cdump udump createdblog

$cd $ORACLE_BASE

$ mkdir -p oradata/rac ----存放数据文件

注意:以上操作,如果是多个节点,需要在多个节点上完成 ,单个节点只需要在单节点上完成即可。
第四章. 确定共享磁盘设备
4.1 单机文件系统上安装RAC
文件系统如ext2,ext3等,可以在单机上模拟RAC。

假定我们划分/u01分区为ext3文件系统,首先,我们创建新的分区

#fdisk /dev/sda

假定化出的新分区是/dev/sda6,那我们格式化该分区,如果是As 2.1

#mkfs.ext2 -j /dev/sda6

其中的-j参数是以ext3格式化文件系统,如果是3.0系统,则直接可以调用mkfs.ext3命令。

#mkfs.ext3 /dev/sda6

然后我们创建一个挂装点

#mkdir /u01;chmod 777 /u01

授予用户权限

#chown oracle:dba /u01

可以用mount挂装上

#mount -t ext3 /dev/sda6 /u01

如果想在启动的时候自动挂装,修改/etc/fstab

/dev/sda6 /u01 ext3 defaults 1 1

那么我们用df就可以发现类似如下的信息

/dev/sda6 17820972 2860164 14055548 17% /u01

4.2 Ocfs文件系统上单机模拟与多节点共享安装
OCFS是Oracle cluster file system,适合单节点与多节点的RAC安装。在安装前,我们需要从http://oss.oracle.com

下载最新的安装包,并注意安装包与当前核心是否匹配。如果是AS 2.1 enterprise核心下载的版本为。

ocfs-2.4.9-e-enterprise-1.0.10-1.i686.rpm

ocfs-support-1.0.10-1.i386.rpm

ocfs-tools-1.0.10-1.i386.rpm

所要求的核心版本为2.4.9-e.12或者以上

如果是AS3.0 smp核心下载的版本为

ocfs-2.4.21-EL-smp-1.0.10-1.i686.rpm

ocfs-support-1.0.10-1.i386.rpm

ocfs-tools-1.0.10-1.i386.rpm

我们可以用rpm来安装软件,如

#rpm -ivh ocfs*

可以用如下的命令查看安装是否成功

# rpm -qa | grep -i ocfs

检查服务是否安装成功

# chkconfig --list |grep ocfs

ocfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off

配置/etc/ocfs.conf文件,结果大致如下

# Ensure this file exists in /etc directory #

node_name = dbrac

ip_address = 10.0.29.162

ip_port = 7000

comm_voting = 1

然后运行ocfs_uid_gen -c获得gid,之后,文件变得如下所示

[root@dbrac root]# more /etc/ocfs.conf

node_name = dbrac

ip_address = 10.0.29.162

ip_port = 7000

comm_voting = 1

guid = 7F2311E5DABE42FBCD86000D56BAC410

如果换过网卡之后,需要重新运行ocfs_uid_gen -c获得gid

最后,加载ocfs启动Oracle Cluster Manager,这个命令在一个节点上,安装后只需要运行一次,在以后系统启动的时候,将由ocfs服务自动从/etc/fstab中加载。

su - root

# /sbin/load_ocfs

注意:所有以上步骤,需要在所有节点上进行,如果是单节点,就在一个节点上运行即可。以下的操作,在一个节点上进行即可。

为了利用ocfs文件系统,我们先划分两个分区来,一个用于CM的检查文件(quorum file),一个用于存放共享的数据库包括控制文件,数据文件,日志文件,归档文件,服务器配置文件(srvm configuration file)等。

# fdisk /dev/sdb

划分一个/dev/sdb1与/dev/sdb5

然后创建一个挂装点

mkdir /shared;chmod 777 /shared

mkdir /ocfs01;chmod 777 /ocfs01

现在,我们格式化该分区。

# mkfs.ocfs -b 128 -C -g 500 -u 500 -L ocfs01 -m /ocfs01 -p 0775 /dev/sdb5

其中的-g -u分别是组与用户编号

各个参数意义如下

-F强制格式化现有的ocfs分区

-b 块的大小(KB),必须是多个ORACLE块大小,Oracle建议128K

-L 卷的标签

-m 挂装点 (本文 "/ocfs01")

-u根路径的所有者的UID (本文是"oracle")

-g 根路径所有者组的GID (本文是 "dba")

-p 根路径的权限许可

现在,我们可以挂装该分区

#services ocfs start #如果已经启动,就不必了

#mount -t ocfs /dev/sdb1 /shared

#mount -t ocfs /dev/sdb5 /ocfs01

也可以在/etc/fstab中增加如下条目,在系统启动的时候,会自动加载

/dev/sda1 /shared ocfs _netdev 0 0

/dev/sda5 /cfs01 ocfs _netdev 0 0

我们用df就可以看到类似如下的信息

/dev/sdb1 1026144 24288 1001856 3% /shared

/dev/sdb5 34529760 1153120 33376640 4% /ocfs01

以上所有步骤做完,建议重新启动一次,让多个节点确认到共享设备。

4.3 Raw裸设备
首先需要划分一系列的分区,需要注意的是,每个设备不能多于15个分区,Linux总共不能超过255个裸设备。

裸设备一般用于共享磁盘系统。可以用如下的方法挂装

#su - root

raw /dev/raw/raw1 /dev/sda2 # Used for the Cluster Manager Quorum File

raw /dev/raw/raw2 /dev/sda3 # Used for the Shared Configuration file for srvctl

# /dev/sda4: Used for creating the Extended Partition which starts as /dev/sda5.

raw /dev/raw/raw3 /dev/sda5 # spfileorcl.ora

raw /dev/raw/raw4 /dev/sda6 # control01.ctl

raw /dev/raw/raw5 /dev/sda7 # control02.ctl

raw /dev/raw/raw6 /dev/sda8 # indx01.dbf

raw /dev/raw/raw7 /dev/sda9 # system01.dbf

raw /dev/raw/raw8 /dev/sda10 # temp01.dbf

raw /dev/raw/raw9 /dev/sda11 # tools01.dbf

raw /dev/raw/raw10 /dev/sda12 # undotbs01.dbf

raw /dev/raw/raw11 /dev/sda13 # undotbs02.dbf

raw /dev/raw/raw12 /dev/sda14 # undotbs03.dbf

raw /dev/raw/raw13 /dev/sda15 # users01.dbf

raw /dev/raw/raw14 /dev/sdb5 # redo01.log (Group# 1 Thread# 1)

raw /dev/raw/raw15 /dev/sdb6 # redo02.log (Group# 2 Thread# 1)

raw /dev/raw/raw16 /dev/sdb7 # redo03.log (Group# 3 Thread# 2)

raw /dev/raw/raw17 /dev/sdb8 # orcl_redo2_2.log (Group# 4 Thread# 2)

raw /dev/raw/raw18 /dev/sdb9 # orcl_redo3_1.log (Group# 5 Thread# 3)

raw /dev/raw/raw19 /dev/sdb10 # orcl_redo3_2.log (Group# 6 Thread# 3)

如果检查连接,用如下命令

su - root

raw -qa

或者

more /dev/raw/raw1类似的方法检查。

如果想在启动的时候,自动挂载,请把以上的命令写到/etc/rc.local中,或者编写/etc/sysconfig下的rawdevices文件,如

# more rawdevices

/dev/raw/raw1 /dev/sda2

/dev/raw/raw2 /dev/sda3

……

如果需要对裸设备授权,可以运行如下脚本,其中n表示裸设备分区数目

su - root

for i in `seq 1 n`

do

chmod 660 /dev/raw/raw$i

chown oracle.dba /dev/raw/raw$i

done

再用如下的方法建立软联结,那么就可以和文件系统一样使用裸设备了。

su - oracle

ln -s /dev/raw/raw1 /var/opt/oracle/oradata/orcl/CMQuorumFile

ln -s /dev/raw/raw2 /var/opt/oracle/oradata/orcl/SharedSrvctlConfigFile

ln -s /dev/raw/raw3 /var/opt/oracle/oradata/orcl/spfileorcl.ora

……

注意:以上操作除了分区外,需要在每个节点完成

4.4 其它,如nfs文件系统
注意启动nfs,nfslock服务

Mount该文件系统的方法如下

mount 10.0.29.152:/vol/vol1/fas250 /netapp nfs

rw,hard,nointr,tcp,noac,vers=3,timeo=600,rsize=32768,wsize=32768

也可以放到fstab中,与以上类似

其它的地方与ocfs类似,不再额外描述

第五章. 安装OCM(Oracle Cluster Manager)
5.1生成一个CM管理文件
如果是单节点文件系统,可以用如下命令模拟

su - oracle

$dd if=/dev/zero of=/u01/oracle/oradata/rac/RacQuorumDisk bs=1024 count=1024

如果是多节点ocfs或raw设备,可以同样用dd生成相应的文件,放到准备好的共享磁盘设备上,大小1M即可。

5.2 安装OCM管理软件
1、如果是9201 for linux,先安装9201 OCM,安装选项的最后一项,然后升级到9204

2、如果是9204 for linux,直接选中9204 OCM安装即可

3、如果在AS 3.0上安装,请在安装前进行如下操作


先链接gcc

su - root

mv /usr/bin/gcc /usr/bin/gcc323

ln -s /usr/bin/gcc296 /usr/bin/gcc

mv /usr/bin/g++ /usr/bin/g++323 # if g++ doesn t exist, then gcc-c++ was not installed

ln -s /usr/bin/g++296 /usr/bin/g++


然后打补丁3006854,可以去http://metalink.oracle.com.下载补丁并参考补丁更多的信息

su - root

# unzip p3006854_9204_LINUX.zip

Archive: p3006854_9204_LINUX.zip

creating: 3006854/

inflating: 3006854/rhel3_pre_install.sh

inflating: 3006854/README.txt

# cd 3006854

# sh rhel3_pre_install.sh

Applying patch...

Patch successfully applied



如果在本地X Win拒绝图形界面,注意设置

$xhost +本机名或IP



在公共节点与私有节点输入机器名称,与/etc/hosts的内容一致,如果不添写也可以,这个可以再配置

在需要我们输入这个磁盘分区的时候, 我们输入我们生成的文件名称,如果不输入也可以再配置

/u01/oracle/oradata/rac/RacQuorumDisk

5.3配置OCM文件
1、cmcfg.ora配置文件
[oracle@appc2 admin]$ cp cmcfg.ora.tmp cmcfg.ora

查看配置文件的内容,可以发现有如下内容

[oracle@appc2 admin]$ more cmcfg.ora

HeartBeat=15000

ClusterName=Oracle Cluster Manager, version 9i

PollInterval=1000

MissCount=210

PrivateNodeNames=dbrac

PublicNodeNames=dbrac

ServicePort=9998

#WatchdogSafetyMargin=5000

#WatchdogTimerMargin=60000

HostName=dbrac

CmDiskFile=/home/oracle/oradata/rac/RacQuorumDisk

因为我们不再用watchdog去检测系统,而是用hangcheck-timer,所以,我们需要注释Watchdog的两行,增加如下一行

KernelModuleName=hangcheck-timer

以上的单节点RAC的一个例子,可以看到,在安装界面要求输入的节点名称,文件名称,都有对应的项目,这个因为是单节点,所有公用节点与私有节点都只有一个。

如果是多节点的RAC,公用节点与私有节点应当类似如下

PrivateNodeNames=dbrac1-eth1 dbrac2-eth1

PublicNodeNames=dbrac1 dbrac2

其中,私有节点是网卡2配置的地址,用于两台节点直接的通信

公用节点是网卡1配置的地址,用于外部访问数据库。

2、ocmargs.ora配置文件
注释$ORACLE_HOME/oracm/admin/ocmargs.ora中包含watchdogd的行

more $ORACLE_HOME/oracm/admin/ocmargs.ora

# Sample configuration file $ORACLE_HOME/oracm/admin/ocmargs.ora

#watchdogd

oracm

norestart 1800

3、ocmstart.sh启动文件
注释$ORACLE_HOME/oracm/bin/ocmstart.sh中的以下行

# watchdogd s default log file

# WATCHDOGD_LOG_FILE=$ORACLE_HOME/oracm/log/wdd.log

# watchdogd s default backup file

# WATCHDOGD_BAK_FILE=$ORACLE_HOME/oracm/log/wdd.log.bak

# Get arguments

# watchdogd_args=`grep ^watchdogd $OCMARGS_FILE |\

# sed -e s+^watchdogd *++ `

# Check watchdogd s existance

# if watchdogd status | grep Watchdog daemon active >/dev/null

# then

# echo ocmstart.sh: Error: watchdogd is already running

# exit 1

# fi

# Backup the old watchdogd log

# if test -r $WATCHDOGD_LOG_FILE

# then

# mv $WATCHDOGD_LOG_FILE $WATCHDOGD_BAK_FILE

# fi

# Startup watchdogd

# echo watchdogd $watchdogd_args

# watchdogd $watchdogd_args

5.4启动ocm
$ cd $ORACLE_HOME/oracm/bin

$ su

# ./ocmstart.sh

启动完用ps -ef|grep oracm看一下有没进程,如果没有到$ORACLE_HOME/oracm/log目录下查出错信息
第六章. 安装Oracle软件
6.1开启RSH
在多节点上需要,如果在单节点就无所谓了,用于节点之间的通信,只需要在一个节点上安装Oracle软件即可,开启RSH之后还要注意iptables防火墙是否打开,最好关闭该防火墙。

su - root

chkconfig rsh on

chkconfig rlogin on

service xinetd reload



配置远程权限

$ more /etc/hosts.equiv

+dbrac1 oracle

+dbrac2 oracle

+dbrac1-eth1 oracle

+dbrac2-eth2 oracle



测试RSH是否能正常工作,在节点1上查看远程节点的文件内容

[oracle@dbrac1 admin]$ rsh dbrac2 cat /etc/hosts.equiv

dbrac1 oracle

dbrac2 oracle

dbrac1-eth1 oracle

dbrac2-eth1 oracle



如果有结果,证明正常,同样,在节点2上查看节点1的文件内容,可以检测节点2

6.2安装软件
如果rsh设置的没有问题,只安装一个节点即可,或者也可以安装后拷贝的第二个节点。

软件安装过程不再多叙,有几点需要注意



1、在安装开始,注意选择节点,并注意cluster组件是否被安装,可以去掉多余的组件,如OEM与HTTP SERVER



2、在AS2.1上的安装应当没有任何问题,在AS 3.0上安装9201,如果在编译阶段有ins_oemagent.mk(补丁3119415固定),ins_ctx.mk(在9204的补丁中固定),都忽略,将在补丁中固定。



3、如果是先安装9201并升级到9204,注意在升级的时候,先升级OUI,并再运行$ORACLE_HOME/bin下的runInstaller,如果是直接安装9204的安装程序,只要安装即可。

运行9204升级程序之前,注意进行如下操作(这个是RAC升级特有的)。

su - oracle

cd $ORACLE_BASE/oui/bin/linux

ln -s libclntsh.so.9.0 libclntsh.so



4、在AS3.0上从9201升级到9204,如果遇到ins_oemagent.mk,也忽略,将在以下的补丁中固定。

补丁3119415与2617419补丁,固定以上的ins_oemagent.mk错误

su - oracle

$ cp p2617419_220_GENERIC.zip /tmp

$ cd /tmp

$ unzip p2617419_220_GENERIC.zip

在打3119415之前,需要确保fuser是可以用的,现在开始打该补丁

su - oracle

$ unzip p3119415_9204_LINUX.zip

$ cd 3119415

$ export PATH=$PATH:/tmp/OPatch

$ export PATH=$PATH:/sbin # 因为fuser在/sbin下

$ which opatch

/tmp/OPatch/opatch

$ opatch apply



5、最后注意只安装,不创建数据库

6.3初试化共享文件
安装完毕后创建配置文件

su - root

# mkdir -p /var/opt/oracle

# touch /var/opt/oracle/srvConfig.loc

# chown oracle:dba /var/opt/oracle/srvConfig.loc

# chmod 755 /var/opt/oracle/srvConfig.loc



在srvConfig.loc中间添加srvconfig_loc参数如下:

srvconfig_loc=/u01/oracle/oradata/rac/srvConfig.dbf



创建srvConfig.dbf文件。如果是共享设备,需要创建到共享设备上,如ocfs文件系统或者是raw分区上,那么上面的文件名将有一些差异。

su - oracle

$ touch srvConfig.dbf



初始化配置文件

$ srvconfig -init

第七章. 创建数据库
7.1准备参数如下
*.log_buffer=626688

*.compatible= 9.2.0.0.0

*.control_files= /u01/oracle/oradata/rac/control01.ctl , /u01/oracle/oradata/rac/control02.ctl , /u01/oracle/oradata/rac/control03.ctl

*.core_dump_dest= /u01/oracle/admin/rac/cdump

*.user_dump_dest= /u01/oracle/admin/rac/udump

*.background_dump_dest= /u01/oracle/admin/rac/bdump

*.db_block_size=8192

*.db_cache_size=250549376

*.db_file_multiblock_read_count=16

*.db_name= rac

*.fast_start_mttr_target=300

*.hash_join_enabled=TRUE

*.job_queue_processes=2

*.large_pool_size=3145728

*.pga_aggregate_target=51200000

*.processes=100

*.remote_login_passwordfile= exclusive

*.sga_max_size=600000000

*.shared_pool_size=31457280

*.timed_statistics=TRUE

*.undo_management= AUTO

*.undo_retention=10800

*.session_cached_cursors=200

#注意以下的参数,是Cluster需要的参数

*.cluster_database = TRUE

*.cluster_database_instances = 2

raca.instance_name= raca

racb.instance_name= racb

raca.instance_number=1

racb.instance_number=2

*.service_names= rac

raca.thread=1

racb.thread=2

raca.local_listener= (address=(protocol=tcp)(host=dbrac)(port=1521))

raca.remote_listener= (address=(protocol=tcp)(host=dbrac)(port=1522))

racb.local_listener= (address=(protocol=tcp)(host=dbrac)(port=1522))

racb.remote_listener= (address=(protocol=tcp)(host=dbrac)(port=1521))

raca.undo_tablespace=UNDOTBS1

racb.undo_tablespace=UNDOTBS2



注意这里的local_listener与remote_listener,因为这里是单节点模拟RAC的参数,如果是多节点,将配置远程的名称与端口,主要用于load_balance与failover。如果是多节点,可能的形式如下。

raca.local_listener= (address=(protocol=tcp)(host=dbrac1)(port=1521))

raca.remote_listener= (address=(protocol=tcp)(host=dbrac2)(port=1521))

racb.local_listener= (address=(protocol=tcp)(host=dbrac2)(port=1521))

racb.remote_listener= (address=(protocol=tcp)(host=dbrac1)(port=1521))



以上参数文件可以放在共享设备上让多个节点实例共享,也可以在自己的节点的默认参数文件中加入指向该共巷参数文件的指针,如

ifile=/u01/oracle/ora920/dbs/init.ora

7.2 创建密码文件
如果不是单节点,每个节点都完成

$export ORACLE_SID=rac1

$ orapwd file=orapwrac1 password=piner entries=5

7.3创建数据库
在一个节点上完成即可

运行root.sh。

启动数据库到nomount下

Sqlplus /nolog

SQL>connect / as sysdba

SQL>startup nomount pfile=file name

SQL>CREATE DATABASE rac

MAXINSTANCES 3

MAXLOGHISTORY 1

MAXLOGFILES 10

MAXLOGMEMBERS 3

MAXDATAFILES 100

DATAFILE /u01/oracle/oradata/rac/system01.dbf SIZE 250M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED

EXTENT MANAGEMENT LOCAL

DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE /u01/oracle/oradata/rac/temp01.dbf SIZE 100M REUSE AUTOEXTEND ON NEXT 1024K MAXSIZE UNLIMITED

UNDO TABLESPACE "UNDOTBS1" DATAFILE /u01/oracle/oradata/rac/undotbs1_01.dbf SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED

CHARACTER SET ZHS16GBK

NATIONAL CHARACTER SET AL16UTF16

LOGFILE GROUP 1 ( /u01/oracle/oradata/rac/redo01.log ) SIZE 102400K,

GROUP 2 ( /u01/oracle/oradata/rac/redo02.log ) SIZE 102400K,

GROUP 3 ( /u01/oracle/oradata/rac/redo03.log ) SIZE 102400K;

注意以上的文件路径,可能因为不同的共享设备将有不同的路径。如果是Raw设备,请指定好文件大小,不要设置AUTOEXTEND。

7.4 创建相应的数据字典
SQL>@?/rdbms/admin/catalog

SQL>@?/rdbms/admin/catproc

创建Cluster特有的视图

SQL> @?/rdbms/admin/catclust.sql

以上操作,都在一个节点上完成。

可选如下组件

@?/rdbms/admin/catexp7.sql;

@?/rdbms/admin/catblock.sql;

@?/rdbms/admin/catoctk.sql;

@?/rdbms/admin/owminst.plb;
第八章. 启动第二个节点实例
8.1 准备第二个节点的日志与重做
在第一个节点上

SQL>shutdown immediate

SQL>startup mount pfile=file name

SQL> alter database add logfile thread 2

2 group 4 ( /u01/oracle/oradata/rac/redo04.log ) size 10240K,

3 group 5 ( /u01/oracle/oradata/rac/redo05.log ) size 10240K,

4 group 6 ( /u01/oracle/oradata/rac/redo06.log ) size 10240k;

SQL>alter database open;

SQL> alter database enable public thread 2;

SQL> create undo tablespace undotbs2 datafile

2 /u01/oracle/oradata/rac/undotbs2_01.dbf size 200m;

Tablespace created.

8.2 启动第二个实例
如果是单节点,再开启一个连接终端

su - oracle

$export ORACLE_SID=rac2

$ sqlplus "/ as sysdba"

SQL>startup pfile=file name

这里的pfile就是共享的那个pfile

如果是多节点,到另外一个节点,执行以上同样的操作

8.3 验证RAC
SQL> select THREAD#,STATUS,ENABLED from gv$thread;

THREAD# STATUS ENABLED

----------   ------   --------

1     OPEN PUBLIC

2     OPEN PUBLIC

1       OPEN   PUBLIC

2       OPEN   PUBLIC

SQL> select INSTANCE_NUMBER,INSTANCE_NUMBER,STATUS,HOST_NAME from gv$instance;

INSTANCE_NUMBER INSTANCE_NUMBER STATUS   HOST_NAME

---------------   ---------------   ------------ ------------------

1             1           OPEN       dbrac1

2             2           OPEN       dbrac2

第九章. 测试、使用RAC
9.1监听的配置
LISTENER1 =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = dbrac)(PORT = 1521))

)

)

)

LISTENER2 =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = dbrac)(PORT = 1522))

)

)

)

以上是单节点模拟RAC的配置,两个实例采用不同的端口来模拟,如果是多节点的RAC,每个节点只要配置自己相应的监听即可。

启动监听,当看到状态类似如下时,表示正确,否则,需要检查每个实例的local_listener与remote_listener参数。

$ lsnrctl status

LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 29-MAY-2004 10:38:08

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.168.205)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias LISTENER

Version TNSLSNR for Linux: Version 9.2.0.4.0 - Production

Start Date 25-MAY-2004 01:27:14

Uptime 4 days 9 hr. 10 min. 54 sec

Trace Level off

Security OFF

SNMP OFF

Listener Parameter File /u01/oracle//ora920/network/admin/listener.ora

Listener Log File /u01/oracle//ora920/network/log/listener.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.168.205)(PORT=1521)))

Services Summary...

Service "rac" has 2 instance(s).

Instance "rac1", status READY, has 1 handler(s) for this service...

Instance "rac2", status READY, has 1 handler(s) for this service...

The command completed successfully

9.2本地名称的配置
rac=

(description=

(load_balance=on)

(failover=on)

(address_list=

(address=(protocol=tcp)(host=dbrac)(port=1521))

(address=(protocol=tcp)(host=dbrac)(port=1522)))

(connect_data=

(service_name=rac)))

rac1=

(description=

(address=(protocol=tcp)(host=dbrac)(port=1521))

(connect_data=

(service_name=rac)

(instance_name=rac1)))

rac2=

(description=

(address=(protocol=tcp)(host=dbrac)(port=1522))

(connect_data=

(service_name=rac)

(instance_name=rac2)))

以上是对一个节点的RAC的配置,如果是多个节点,只需要修改主机名与端口即可

9.3 负载均衡测试
[oracle@dbtest admin]$ more test.sh

#!/bin/sh

sqlplus "test/test@rac" <
select instance_name from v\$instance;

exit

EOF

[oracle@dbtest admin]$ ./test.sh

SQL*Plus: Release 9.2.0.4.0 - Production on Sat May 29 10:50:08 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production

With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options

JServer Release 9.2.0.4.0 - Production

SQL>

INSTANCE_NAME

----------------

rac2

[oracle@dbtest admin]$ ./test.sh

SQL*Plus: Release 9.2.0.4.0 - Production on Sat May 29 10:50:08 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production

With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options

JServer Release 9.2.0.4.0 - Production

SQL>

INSTANCE_NAME

----------------

rac1

9.4失败切换(failover)测试
需要修改tnsnames.ora为如下形式

rac=

(description=

# (enable=broken)

(load_balance=on)

(failover=on)

(address_list=

(address=(protocol=tcp)(host=dbtest)(port=1521))

(address=(protocol=tcp)(host=dbtest)(port=1522)))

(connect_data=

(service_name=rac)

(failover_mode=(type=select)(method=basic)

)

)

)

注意其中的failover_mode

SQL> connect test/test@rac

SQL> select INSTANCE_NUMBER,INSTANCE_NAME from v$instance;

INSTANCE_NUMBER INSTANCE_NAME

--------------- ----------------

2 rac2

如果现在关闭实例rac2,再执行如上语句,可以发现

SQL> select INSTANCE_NUMBER,INSTANCE_NAME from v$instance;

INSTANCE_NUMBER INSTANCE_NAME

--------------- ----------------

1 rac1

已经变为rac1

9.5 rac环境下修改为归档模式
1.停止所有node

2.修改init文件*.cluster_database=false

3.在一个node做修改

startup mount;

alter database archivelog ;

SQL> archive log list;

SQL>alter database open;

4.还原 *.cluster_database=true

5.启动所有node





第十章.从单节点数据库变为RAC
首先假定数据库软件的Cluster已经安装,OCM已经安装配置。

10.1修改参数文件
增加如类似如下的内容

*.cluster_database = TRUE

*.cluster_database_instances = 2

*.undo_management=AUTO

.undo_tablespace=undotbs

.instance_name=RAC1

.instance_number=1

.thread=1

.local_listener=LISTENER_RAC1

.remote_listener=LISTENER_RAC2

10.2创建cluster视图
利用$ORACLE_HOME/rdbms/admin/catclust.sql

10.3重新创建控制文件
把maxinstances 从1变为定义的节点数目

$ sqlplus /nolog

SQL> connect / as sysdba

SQL> startup mount

SQL> alter database backup controlfile to trace;

10.4创建第二个实例的redo与undo
启动第一个实例

SQL>alter database

add logfile thread 2

group 3 ( /dev/RAC/redo2_01_100.dbf ) size 100M,

group 4 ( /dev/RAC/redo2_02_100.dbf ) size 100M;

alter database enable public thread 2;

SQL>CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE

/dev/RAC/undotbs_02_210.dbf SIZE 200M ;

最后,在第二个节点上安装软件、设置环境变量、启动实例

小结
1、 描述了RAC的运行原理与运行机制

2、 描述了RAC for Linux的必要条件,如内核要求如软件要求

3、 描述各种存储设备的与多种文件系统,如Raw,ocfs等

4、 描述了Cluster管理软件在不同平台上的安装方法

5、 描述了数据库软件在不同平台上的安装方法

6、 描述了手工创建RAC数据库并启动多个数据库的方法

7、 介绍了RAC的一些特征与管理方法