前言
定位
本文定位在那些有了一定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的一些特征与管理方法