通过VirtualBox实现CentOS上Oracle数据库11g第2版RAC安装

参考文档:《Oracle Database 11g Release 2 RAC On Linux Using VirtualBox》
如对Oracle RAC需要更多了解请参考:《Oracle RAC集群体系结构》
本文描述在没有共享磁盘设备的情况下,同过使用虚拟机VirtualBox实现Centos上Oracle 11g R2数据库集群(RAC)安装。

一、准备
1、目标系统包括了主机系统、两个虚拟系统、两套Oracle网格基础架构(Clusterware + ASM)和一台服务器上运行的两个数据库实例。
2、主机系统32GB内存,64GB交换空间,虚拟机内存在8GB以上,交换分区为16GB。

二、安装虚拟机
使用VirtualBox-4.1版本(4.2版本发稿为止客户的增强工具还有Bug),详细参考:《CentOS安装VirtrualBox》

三、安装虚拟机操作系统

3.1 系统配置

内存:8GB
交换分区:16GB
磁盘分区(100GB):
1)挂载点:/boot,文件系统:ext3,分区大小:100M;
2)交换分区(swap):16348M
3)挂载点:/,文件系统:ext3,分区大小:剩余空间。
网络配置(2网卡)
1)eth0:Oracle RAC使用;
2)eth1:Oracle RAC使用;

3.2 客户端增强插件

3.2.1 内核配置(可选)

以root用户登录虚拟机,打开引导配置文件"/etc/grub.conf",添加”divider=10“选项到内核启动选项中,以减少闲置的CPU负载。
# vi /etc/grub.conf
# 修改/etc/grub.conf文件,添加一下红色部分内容
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-308.24.1.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-308.24.1.el5 ro root=LABEL=/ rhgb quiet divider=10
        initrd /initrd-2.6.18-308.24.1.el5.img
title CentOS (2.6.18-308.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-308.el5 ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.18-308.el5.img

3.2.2 安装客户端增强插件

1、然后安装关联包
# yum install kernel-headers kernel-devel gcc

2、安装X Window System
# yum groupinstall 'X Window System' -y

3、回到主机将/usr/share/virtualbox/VboxGuestAdditions.iso放入虚拟机光驱
# mount -t iso9660 /dev/cdrom /mnt
# 进入加载安装光盘执行安装
# cd /mnt
# ./VBoxLinuxAdditions.run

4、加载vboxvfs模块
# 先在VBox中添加数据空间,然后转到CentOS里,在终端中输入
# lsmod | grep vboxsf
# 查看vboxvfs是否被加载,如果不提示任何信息,就说明已经加载,如果没有加载,则执行
# modprobe vboxsf
# 进行加载,如果加载失败,请检查VBox的增强功能是否成功安装。

5、重启虚拟机

详细参考:《CentOS安装VirtrualBox》

四、虚拟操作系统设置
4.1 网络设置

请根据网络实际情况进行网络设置,以下网络设置仅作参考。

4.1.1 网络规划

主机名:rac1.localdomain
eth0的IP设置:    192.168.0.201(公网地址)
eth0的网关设置:192.168.0.1(公网地址)
eth1的IP设置:    192.168.1.201(私有地址)
eth1的网关设置:(不设置)

主机名:rac2.localdomain
eth0的IP设置:    192.168.0.202(公网地址)
eth0的网关设置:192.168.0.1(公网地址)
eth1的IP设置:    192.168.1.202(私有地址)
eth1的网关设置:(不设置)

主机名:rac3.localdomain
eth0的IP设置:    192.168.0.203(公网地址)
eth0的网关设置:192.168.0.1(公网地址)
eth1的IP设置:    192.168.1.203(私有地址)
eth1的网关设置:(不设置)

4.1.1 网络设置

Oracle RAC环境下每个节点都会有多个IP地址,分别为公共IP(Public IP)、私有IP(Private IP)和虚拟IP(Virtual IP):

私有IP(Public IP
Private IP address is used only for internal clustering processing(Cache Fusion).
专用(私有)IP地址只用于内部群集处理,如心跳侦测,服务器间的同步数据用。

虚拟IP(Virtual IP
Virtual IP is used by database applications to enable fail over when one cluster node fails.
当一个群集节点出现故障时,数据库应用程序通过虚拟IP地址进行故障切换。
当一个群集节点出现故障时,数据库应用程序(包括数据库客户端)通过虚拟IP地址切换到另一个无故障节点,另一个功能是均衡负载。

公共IP(Public IP
Public IP adress is the normal IP address typically used by DBA and SA to manage storage, system and database.
公共IP地址是正常的(真实的)IP地址,通常DBA和SA使用公共IP地址在来管理存储、系统和数据库。

监听IPSCAN IP
从Oracle 11g R2开始,Oracle RAC网络对IP地址有特殊要求,新增了加监听IP地址(SCAN IP),所以从Oracle 11g R2开始Oracle RAC网络至少需要4种IP地址(前面介绍三种IP地址)。

在Oracle 11g R2之前,如果数据库采用了RAC架构,在客户端的tnsnames中,需要配置多个节点的连接信息,从而实现诸如负载均衡、Failover等RAC的特性。因此,当数据库RAC集群需要添加或删除节点时,需要及时对客户端机器的tns进行更新,以免出现安全隐患。

在Oracle 11g R2中,为了简化该项配置工作,引入了SCAN(Single Client Access Name)的特性。该特性的好处在于,在数据库与客户端之间,添加了一层虚拟的服务层,就是所谓的SCAN IP以及SCAN IP Listener,在客户端仅需要配置SCAN IP的tns信息,通过SCAN IP Listener,连接后台集群数据库。这样,不论集群数据库是否有添加或者删除节点的操作,均不会对Client产生影响。

关于监听IP(SCAN)请参考:
《Single Client Access Name (SCAN) for Oracle RAC 11g Release 2》
《Oracle 11gR2 SCAN 详解》

1、修改主机名
修改主机名为rac1:
# vi /etc/sysconfig/network

修改etc/sysconfig/network文件内容,将绿色内容变为红色内容
NETWORKING=
NETWORKING_IPV6
# HOSTNAME=localhost.localdomain
HOSTNAME=rac1.localdomain


2、设置IP

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改/etc/sysconfig/network-scripts/ifcfg-eth0文件内容,将该设置项设置为红色内容
# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth0
BOOTPROTO=none
HWADDR=08:00:27:A7:22:CF
ONBOOT=
yes
NETMASK=
255.255.255.0
IPADDR=192.168.0.201
GATEWAY=192.168.0.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes


# vi /etc/sysconfig/network-scripts/ifcfg-eth1
修改/etc/sysconfig/network-scripts/ifcfg-eth1文件内容,将该设置项设置为红色内容
# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth1
BOOTPROTO=none
HWADDR=08:00:27:02:BD:71
ONBOOT=
yes
TYPE=Ethernet
IPADDR=
192.168.1.201
USERCTL=no
IPV6INIT=no
PEERDNS=yes


3、
设置hosts映射
# vi /etc/hosts
修改/etc/hosts文件内容为以下蓝色内容
# Do not remove the following line, or various programs
# that require network functionality will fail.
# 127.0.0.1             localhost.localdomain localhost
# ::1           localhost6.localdomain6 localhost6

127.0.0.1          localhost.localdomain  localhost
# Public
192.168.0.201   rac1.localdomain         rac1
192.168.0.202   rac2.localdomain         rac2
192.168.0.203   rac3.localdomain         rac3
# Private
192.168.1.201   rac1-priv.localdomain   rac1-priv
192.168.1.202   rac2-priv.localdomain   rac2-priv
192.168.1.203   rac3-priv.localdomain   rac3-priv
# Virtual
192.168.0.211   rac1-vip.localdomain    rac1-vip
192.168.0.212   rac2-vip.localdomain    rac2-vip
192.168.0.213   rac3-vip.localdomain    rac3-vip
# SCAN
192.168.0.251   rac-scan.localdomain  rac-scan
192.168.0.252   rac-scan.localdomain  rac-scan
192.168.0.253   rac-scan.localdomain  rac-scan

4.2 安装设置Oracle依赖组件

4.2.1 自动安装(建议手动安装)
通过oracle-validated程序自动安装依赖包和配置安装参数。
oracle-validated非标准库中软件,先定义Oracle安装库(参考:http://public-yum.oracle.com):
# cd /etc/yum.repos.d
# wget http://public-yum.oracle.com/public-yum-el5.repo

# 安装依赖包:
# yum install oracle-validated

4.2.2 手动安装

1、依赖包安装
除了基本的操作系统安装,必须以root用户身份登录安装下列软件包虽然。这包括一些软件包的 64 位和 32 位版本。

1)从安装光盘安装
# mount -t iso9660 /dev/cdrom /mnt
# cd /media/cdrom/Server
# rpm -Uvh binutils-2.*
# rpm -Uvh compat-libstdc++-33*
# rpm -Uvh elfutils-libelf-0.*
# rpm -Uvh elfutils-libelf-devel-*
# rpm -Uvh gcc-4.*
# rpm -Uvh gcc-c++-4.*
# rpm -Uvh glibc-2.*
# rpm -Uvh glibc-common-2.*
# rpm -Uvh glibc-devel-2.*
# rpm -Uvh glibc-headers-2.*
# rpm -Uvh ksh-2*
# rpm -Uvh libaio-0.*
# rpm -Uvh libaio-devel-0.*
# rpm -Uvh libgcc-4.*
# rpm -Uvh libstdc++-4.*
# rpm -Uvh libstdc++-devel-4.*
# rpm -Uvh make-3.*
# rpm -Uvh sysstat-7.*
# rpm -Uvh unixODBC-2.*
# rpm -Uvh unixODBC-devel-2.*
# rpm -Uvh pdksh-5.2.14*
# cd /
# eject

2)yum 安装
#yum install binutils-2.*compat-libstdc++-33* elfutils-libelf-0.* elfutils-libelf-devel-* gcc-4.* gcc-c++-4.* glibc-2.* glibc-common-2.* glibc-devel-2.* glibc-headers-2.* ksh-2* libaio-0.* libaio-devel-0.* libgcc-4.* libstdc++-4.* libstdc++-devel-4.* make-3.* sysstat-7.* unixODBC-2.* unixODBC-devel-2.* pdksh-5.2.14*

2、
内核参数配置
修改内核参数配置文件,添加蓝色内容到文件末尾, 文件内容(8GB:kernel.shmall = 2097152):
# vi  /etc/sysctl.conf
# /etc/sysctl.conf文件中添加以下内容,如果该设置项已经存在则修改该设置项的值为如下内容的设置值。
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = kernel.shmall * 1024
kernel.shmmax = 2147483648
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586

使内核参数生效
# sysctl -p

3、建立用户和用户组

Oracle安装单实例,创建一个oracle用户就可以了,但是安装RAC,则需要在创建一个集群的用户安装grid。如果将grid和oracle用同一个用户来安装,那么必须切换ORACLE_HOME变量的值。
详细内容请参考: 《Oracle 11g R2 RAC安装时用户和用户组说明》

1)规划与准备
Oracle Grid Infrastructure 安装规划
ORACLE_BASE=/u01/app/grid
ORACLE_HOME=$ORACLE_BASE/11.2.0/grid

Oracle Database 安装规划
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

集群用户要求配置用户等效性,所有相关用户和用户组必须采用相同的用户id和用户组id。

1)相关用户组
# groupadd -g 1000 oinstall
# groupadd -g 1200 asmadmin
# groupadd -g 1201 asmdba
# groupadd -g 1202 asmoper
# groupadd -g 1300 dba
# groupadd -g 1301 oper

2)创建grid用户
# useradd -m -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,dba grid
# id grid
# passwd grid

配置用户环境变量
# 登录grid用户
# su grid
# vi ~/.bash_profile
# 修改~/.bash_profile文件添加如下蓝色内容
Oracle Grid Infrastructure Settings
export ORACLE_HOSTNAME=rac1.localdomain
export ORACLE_UNQNAME=rac
export ORACLE_BASE= /u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export ORACLE_SID=+ASM1
export ORACLE_TERM=xterm
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export   CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export TMP=/tmp
export TMPDIR=$TMP
# 退出grid用户
# exit

3)创建oracle用户
# useradd -m -u 1101 -g oinstall -G dba,oper,asmdba oracle
# id oracle
# passwd oracle

配置oracle用户环境变量
# 登录oracle用户
# su oracle
# vi ~/.bash_profile
# 修改~/.bash_profile文件添加如下蓝色内容
# Oracle Database Settings
export ORACLE_HOSTNAME=rac1.localdomain
export ORACLE_UNQNAME=rac
export ORACLE_BASE= /u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=rac1
export ORACLE_TERM=xterm
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export   CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export TMP=/tmp
export TMPDIR=$TMP
# 退出oracle用户
# exit

3)验证nobody用户
# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
# 如果用户 nobody 不存在,则输入以下命令进行创建:
# useradd nobody

4)创建目录
# rm    -rf /u01
# mkdir -p  /u01/app/oraInventory
# mkdir -p  /u01/app/grid
# mkdir -p  /u01/app/11.2.0/grid
# chown -R  grid:oinstall /u01
# mkdir -p  /u01/app/oracle
# chown -R  oracle:oinstall /u01/app/oracle
# chmod -R  775 /u01/

4、修改资源限制
# vi /etc/security/limits.conf
# 修改/etc/security/limits.conf文件,添加蓝色内容到文件末尾
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

5、修改登录限制
# vi /etc/pam.d/login
修改/etc/pam.d/login文件如果不存在蓝色内容则添加到文件末尾
session required pam_limits.so

6、修改grid用户和oracle用户进程限制
# vi /etc/profile
# 在/etc/profile文件中添加一下内容
if [ $USER = "grid" ] || [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi

4.3 其他设置

1、安装cvuqdisk包
如果没有安装cvuqdisk程序包,集群验证实用程序(Cluster Verification Utility)就无法发现共享磁盘,当运行集群验证实用程序时,您会收到这样的错误消息:
Package cvuqdisk not installed

cvuqdisk的RPM包含在Oracle Grid Infrastructure安装介质上的rpm目录中。linux.x64_11gR2_grid.zip是Grid Infrastructure的安装包,下载并解压linux.x64_11gR2_grid.zip。
# rpm -Uvh cvuqdisk*

2、安装ASMLib包(必须正确安装否则找不到磁盘)

确定内核版本
# uname -r
2.6.18-308.24.1.el5

安装ASMLib包
如果使用UDEV可以跳过此小节,这里有一个 UDEV 安装示例

OTN下载相应的ASMLib的RPM包,RHEL需要所有以下三个包,本例(Oracle Linux)已安装过最后两个包,所以只需要第一个包。
oracleasm-support-2.1.7-1.el5.x86_64.rpm
oracleasm-2.6.18-308.24.1.el5-2.0.5-1.el5.x86_64.rpm
oracleasmlib-2.0.4-1.el5.x86_64.rpm

使用如下命令安装:
# rpm -Uvh oracleasm-support-2.1.7-1.el5.x86_64.rpm
# rpm -Uvh oracleasm-2.6.18-308.24.1.el5-2.0.5-1.el5.x86_64.rpm
# rpm -Uvh oracleasmlib-2.0.4-1.el5.x86_64.rpm
或者
# cd /etc/yum.repos.d
# wget http://public-yum.oracle.com/public-yum-el5.repo
# yum install oracleasm-2.6.18-308.24.1.el5
# yum源中没有oracleasmlib包
# rpm -Uvh oracleasm*.rpm

使用如下命令配置ASMLib
# oracleasm configure -i

Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver.  The following questions will determine whether the driver is
loaded on boot and what permissions it will have.  The current values
will be shown in brackets ('[]').  Hitting <ENTER> without typing an
answer will keep that current value.  Ctrl-C will abort.

Default user to own the driver interface []:grid
Default group to own the driver interface []:asmadmin
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: 
Writing Oracle ASM library driver configuration: done
#

将ASM驱动加载到内核
# /usr/sbin/oracleasm init
Loading module "oracleasm": oracleasm
Mounting ASMlib driver filesystem: /dev/oracleasm

错误处理
安装和配置过程中出现问题,运行以下命令确保当前驱动版本正确
# /usr/sbin/oracleasm update-driver

3、调整tmpfs
详细参考:《Oracle SVG自动管理 修改/dev/shm大小》
本例机器内存8GB,tmpfs容量大小为内存的3/4为6144M。
# umount tmpfs
# mount -t tmpfs shmfs -o size=6144M /dev/shm

或者
修改/etc/fstab,修改为蓝色内容,size为tmpsf大小
# vi /etc/fstab

LABEL=/            /           ext3    defaults            1 1
LABEL=/boot        /boot        ext3    defaults            1 2
tmpfs              /dev/shm     tmpfs   defaults ,size=6144M   0 0
devpts             /dev/pts      devpts  gid=5,mode=620       0 0
sysfs              /sys          sysfs  defaults            0 0
proc               /proc         proc   defaults            0 0
LABEL=SWAP-sda2    swap          swap   defaults           0 0

重新加载
umount /dev/shm 
mount /dev/shm
查看信息
df -h /dev/shm

4、关闭SELinux和防火墙


关闭SELinux

修改配置文件:
# vi /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
# SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted

关闭防火墙

# chkconfig ntpd iptables

或者通过setuptools工具:
# setup
System > Administration > Security Level and Firewall 设置SELinux为disabled

5、设置网络时钟NTP

配置NTP,或者取消NTP配置,使得Oracle集群时间同步服务 (Oracle Cluster Time Synchronization Service,ctssd) 可以同步RAC节点的时间。

不使用ntp时间同步:
# service ntpd stop
Shutting down ntpd:                                        [  OK  ]
# chkconfig ntpd off
# mv /etc/ntp.conf /etc/ntp.conf.orig
# rm /var/run/ntpd.pid


使用ntp时间同步:
安装NTP
# yum install ntp
为了使NTP服务可以在系统引导的时候自动启动,执行:
# chkconfig ntpd on
启动ntpd:
service ntpd restart
如果使用NTP则添加“-x”选项到“/etc/sysconfig/ntpd”文件:
# vi /etc/sysconfig/ntpd

# Drop root to id 'ntp:ntp' by default.
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"

# Set to 'yes' to sync hw clock after successful ntpdate
SYNC_HWCLOCK=no

# Additional options for ntpdate
NTPDATE_OPTIONS=""

重启NTP:
# service ntpd restart

设置本地NTP请参考: 《Centos安装NTP服务器 》

六、创建共享磁盘

6.1 关闭虚拟机
# shutdown -h now

6.2 创建5个共享磁盘并设置

6.2.1 创建5个共享磁盘

rac1:虚拟机名称
SATA:虚拟机的磁盘控制器
102400:硬盘大小100G

1、创建磁盘
$ mkdir -p ~/VirtualBox\ VMs/harddisks
$ cd ~/VirtualBox VMs/harddisks
$ # Create the disks and associate them with VirtualBox as virtual media.
$ VBoxManage createhd --filename asm1.vdi --size 102400 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm2.vdi --size 102400 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm3.vdi --size 102400 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm4.vdi --size 102400 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm5.vdi --size 102400 --format VDI --variant Fixed

2、将磁盘添加到虚拟机
$ # Connect them to the VM.
$ VBoxManage storageattach rac1 --storagectl "SATA" --port 1 --device 0 --type hdd --medium asm1.vdi --mtype shareable
$ VBoxManage storageattach rac1 --storagectl "SATA" --port 2 --device 0 --type hdd --medium asm2.vdi --mtype shareable
$ VBoxManage storageattach rac1 --storagectl "SATA" --port 3 --device 0 --type hdd --medium asm3.vdi --mtype shareable
$ VBoxManage storageattach rac1 --storagectl "SATA" --port 4 --device 0 --type hdd --medium asm4.vdi --mtype shareable
$ VBoxManage storageattach rac1 --storagectl "SATA" --port 5 --device 0 --type hdd --medium asm5.vdi --mtype shareable

3、将磁盘标记为可共享(添加到虚拟机时候已经标记,此步骤省略)
$ # Make shareable.
$ VBoxManage modifyhd asm1.vdi --type shareable
$ VBoxManage modifyhd asm2.vdi --type shareable
$ VBoxManage modifyhd asm3.vdi --type shareable
$ VBoxManage modifyhd asm4.vdi --type shareable
$ VBoxManage modifyhd asm5.vdi --type shareable

6.2.2 设置共享磁盘

启动虚拟机,以root用户登录,设置共享磁盘。

1、查看磁盘
# cd /dev
# ls sd*
sda  sda1  sda2  sdb  sdc  sdd  sde  sdf

2、使用“fdisk”命令对磁盘sdb、sdc、sdd、sde 、sdf 建立分区,sdb为例:
# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help):n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):1
First cylinder (1-1305, default 1): Enter
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305):Enter
Using default value 1305

Command (m for help):p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1305    10482381   83  Linux

Command (m for help):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
#

注意:本例中,每次fdisk命令交互回答的顺序:"n","p","1","Enter","Enter","p" ,"w"。

3、所有的磁盘建立分区后,通过“ls”命令查看结果:
# cd /dev
# ls sd*
sda  sda1  sda2  sdb  sdb1  sdc  sdc1  sdd  sdd1  sde  sde1  sdf  sdf1

4、标记共享磁盘
# /usr/sbin/oracleasm createdisk DISK1 /dev/sdb1
Writing disk header: done
Instantiating disk: done
# /usr/sbin/oracleasm createdisk DISK2 /dev/sdc1
Writing disk header: done
Instantiating disk: done
# /usr/sbin/oracleasm createdisk DISK3 /dev/sdd1
Writing disk header: done
Instantiating disk: done
# /usr/sbin/oracleasm createdisk DISK4 /dev/sde1
Writing disk header: done
Instantiating disk: done
# /usr/sbin/oracleasm createdisk DISK5 /dev/sdf1
Writing disk header: done
Instantiating disk: done

5、通过“scandisks”命令刷新ASM磁盘配置(这不是必须步骤)
# /usr/sbin/oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
#

6、通过“listdisks”命令查看ASM可见磁盘
# /usr/sbin/oracleasm listdisks
DISK1
DISK2
DISK3
DISK4
DISK5
#

七、克隆虚拟机
1、克隆磁盘
新版本的VirtualBox允许克隆虚拟机,但是也会克隆共享磁盘,因此需要手动创建虚拟机。也可以删除共享磁盘再复制虚拟机,这样就不用执行以下操作,速度更快,克隆完成在给虚拟机添加共享磁盘。

关闭"rac1"虚拟机
# shutdown -h now
在主机使用命令上克隆虚拟机系统磁盘
$ mkdir -p ~/VirtualBox\ VMs/rac2
$ VBoxManage clonehd ~/VirtualBox\ VMs/rac1/rac1.vdi ~/VirtualBox\ VMs/rac2/rac2.vdi


$ mkdir -p ~/VirtualBox\ VMs/rac3
$ VBoxManage clonehd ~/VirtualBox\ VMs/rac1/rac1.vdi ~/VirtualBox\ VMs/rac3/rac3.vdi


2、创建虚拟机

创建“rac2”和“rac3”虚拟机,设置与“rac1”一样,但是用已经存在的虚拟磁盘“rac2.vdi ”
$ virtualbox
使用GUI程序建立虚拟机,修改磁盘控制器名称为“SATA”。

3、将共享磁盘连接到虚拟机
记得添加第二个网卡适配器就如“rac1”虚拟机,当虚拟机创建后,链接共享磁盘到“rac2 ”虚拟机
$ # Following line for VirtualBox 4.0.0 upwards
$ cd ~/VirtualBox\ VMs/harddisks
$
$ # All versions (can omit "--mtype shareable" for versions below 4.0.0)
$ VBoxManage storageattach rac2 --storagectl "SATA" --port 1 --device 0 --type hdd --medium asm1.vdi --mtype shareable
$ VBoxManage storageattach rac2 --storagectl "SATA" --port 2 --device 0 --type hdd --medium asm2.vdi --mtype shareable
$ VBoxManage storageattach rac2 --storagectl "SATA" --port 3 --device 0 --type hdd --medium asm3.vdi --mtype shareable
$ VBoxManage storageattach rac2 --storagectl "SATA" --port 4 --device 0 --type hdd --medium asm4.vdi --mtype shareable
$ VBoxManage storageattach rac2 --storagectl "SATA" --port 5 --device 0 --type hdd --medium asm5.vdi --mtype shareable


$ VBoxManage storageattach rac3 --storagectl "SATA" --port 1 --device 0 --type hdd --medium asm1.vdi --mtype shareable
$ VBoxManage storageattach rac3 --storagectl "SATA" --port 2 --device 0 --type hdd --medium asm2.vdi --mtype shareable
$ VBoxManage storageattach rac3 --storagectl "SATA" --port 3 --device 0 --type hdd --medium asm3.vdi --mtype shareable
$ VBoxManage storageattach rac3 --storagectl "SATA" --port 4 --device 0 --type hdd --medium asm4.vdi --mtype shareable
$ VBoxManage storageattach rac3 --storagectl "SATA" --port 5 --device 0 --type hdd --medium asm5.vdi --mtype shareable



4、依据网络规划设置虚拟机网络环境
启动虚拟机忽略其网络错误,以root用户登录虚拟机“rac2”并设置网络。删除昵称.bak结尾的设备,先停止设备才能删除设备,只保留eth0和eth1两个设备。

图形界面如下操作:
System > Administration > Network

编辑eth0设置网卡IP地址为"192.168.0.202",子网掩码为“255.255.255.0”,网关为“192.168.0.1”。点击“硬件设备”选项卡,然后单击“探测”按钮。然后点击“OK”按钮,接受更改。

同样方法设置“eth1”,IP地址为:192.168.1.202,子网掩码为“255.255.255.0”,默认网关确保为空(不设置)。

点击“DNS”选项卡,设置主机名为“rac2.localdomain”。

保存设置(File > Save),点击"Activate"激活所有设备。

对虚拟机“rac3”同步骤操作。

4、修改配置文件
以grid用户登录修改grid用户环境变量,编辑“~/.bash_profile”文件,将ORACLE_SID改为“+ASM2”,将ORACLE_HOSTNAME中的“rac1”改为"rac2"。
# vi ~/.bash_profile
export ORACLE_SID=+ASM2
export ORACLE_HOSTNAME=rac2.localdomain

同样需要修改oracle用户的环境变量。
# vi ~/.bash_profile
export ORACLE_SID=rac2
export ORACLE_HOSTNAME=rac2.localdomain


对虚拟机“rac3”同步骤操作。

5、检查设置

启动“rac1”和重启“rac2”和“rac3”虚拟机,互ping公共IP和私有IP检查网络设置。
# ping -c 3 rac1
# ping -c 3 rac1-priv
# ping -c 3 rac2
# ping -c 3 rac2-priv

# ping -c 3 rac3
# ping -c 3 rac3-priv

虚拟IP地址定义在“/etc/hosts”不工作,无需测试。

八、配置用户等效性
建立grid用户和oracle用户等效性, 详细参考: 《SSH用户等效性配置》

九、安装Grid Infrastructure

安装Oracle 11gR2前,可以使用“runcluvfy.sh”实用工具验证Oracle集群环境是否满足先决条件。

# ./runcluvfy.sh stage -pre crsinst -n rac1,rac2,rac3 -verbose

如果验证失败,必须更正失败才能继续执行后续操作。
确保"rac1"和"rac2"已经启动,然后以oracle用户登录开始Oracle Grid Infrastructure安装。
# ./runInstaller

第一步 选择默认选项安装

选择“Install and Configure Grid Infrastructure for a Cluster”选项,点击“Next”按钮选。

第二步 选择默认选项安装
择“Typical Installation”选项,然后点击“Next”按钮。

第三步 手动设置

1)修改SCAN Name为"/etc/hosts"文件中设置的SCAN服务器主机名“rac-scan”;
2)点击“Add”按钮添加节点,如添加“rac2”节点:主机名(Hostname)为rac2.localdomain,虚拟IP名(Virtual IP Name)为“rac2-vip.localdomain”;
3)点击“Specify Cluster Configuration”按钮设置节点SSH通信(必须设置SSH用户等效性),输入grid用户登录密码,再点击设置等待SSH通信设置成功;
4)完成节点添加后点击“Identify network interfaces...”查看每个节点的公共IP和专用IP是否正确,然后进入下一步。

第四步 检查设置安装选项
1)检查安装参数,默认为grid用户环境变量中设置的值
Oracle base:/u01/app/grid
Software Location:/u01/app/11.2.0/grid
Cluster Registry Storage Type:Automatic Storage Manager
2)输入“SYSASM”密码,点击“Next”按钮进入下一步。

第五步 建立ASM磁盘组
1)检查安装参数,默认为grid用户环境变量中设置的值
Disk Group Name:DATA
Software Location:/u01/app/11.2.0/grid
Cluster Registry Storage Type:Automatic Storage Manager
2)勾选所以磁盘,进入下一步

第六步 确认Oracle产品清单目录,选择默认选项安装
确认目录正确进入下一步

第七步 前置条件检查

检查前置条件,如果存在错误,修复(每个节点)或者忽略安装。

第八步 确认安装
显示安装脚步,确认安装。

第九步 完成安装
1)安装完成后弹出“Execute Configeration scripts”提示框窗口,要求在每个节点上运行提示框中的两个脚本“oraInventory/orainstRoot.sh”和“grid/root.sh”。

注意:如果是CentOS系统需要执行以下步骤再执行root.sh脚本,否则在执行root.sh脚步时会报如下错误:
ADVM/ACFS is not supported on centos-release-5-5.el5.centos

解决这一错误的方法:
修改$ORACLE_HOME/lib/osds_acfslib.pm文件,这里$ORACLE_HOME是 /u01/app/ 11.2.0/grid
# vi $ORACLE_HOME/lib/osds_acfslib.pm
找到如下内容:
  # OK, now check to see if we support this release
  $supported = 0;
  if (($release =~ /enterprise-release-5/) ||
         ($release =~ /redhat-release-5/))
  {
    # Redhat 5
    $supported = 1;
    # EL5 is a sub-dirictory in the install path
    $vers = "EL5";
  }
修改为如下内容增加对CentOS支持:
  # OK, now check to see if we support this release
  $supported = 0;
  if (($release =~ /enterprise-release-5/) ||
         ($release =~ /redhat-release-5/)  ||
         ($release =~ /centos-release/))
  {
    # Redhat 5
    $supported = 1;
    # EL5 is a sub-dirictory in the install path
    $vers = "EL5";
  }


运行“orainstRoot.sh”及运行输出如下:
#  /u01/app/oraInventory/./orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.
Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.

/u01/app/11.2.0/grid/./root.sh

不同节点上运行“root.sh”输出有一些不同。
脚本执行完后,回到“rac1”节点上“Execute Configuration Scripts”窗口点击“OK”按钮。

第十步 完成安装配置
未使用DNS所以在SCAN(Checking Single Client Access Name)验证阶段错误

INFO: Checking Single Client Access Name (SCAN)...
INFO: Checking name resolution setup for "rac-scan.localdomain"...
INFO: ERROR:
INFO: PRVF-4664 : Found inconsistent name resolution entries for SCAN name "rac-scan.localdomain"
INFO: ERROR:
INFO: PRVF-4657 : Name resolution setup check for "rac-scan.localdomain" (IP address: 192.168.2.201) failed
INFO: ERROR:
INFO: PRVF-4664 : Found inconsistent name resolution entries for SCAN name "rac-scan.localdomain"
INFO: Verification of SCAN VIP and Listener setup failed

安全地忽略这个错误,并通过单击“下一步”按钮继续。单击“Close”按钮退出安装程序。

Oracle Grid Infrastructure安装完成。

十、安装Oracle 数据库


确保“rac1”和“rac2”已经启动,以oracle用户登录“rac1”运行Oracle安装程序。
./runInstaller

1、取消选中安全更新复选框(I wish to……),然后单击“Next”按钮。

2、选择“Create and configure a database”选项,点击“Next”按钮。

3、选择“Server Class”选项,点击“Next”按钮。

4、确保所有节点选中,然后点击“Next”按钮。

5、选择“Typical install”选项,点击“Next”按钮。

6、确认安装参数输入秘密,点击“Next”按钮。
Oracle base:/u01/app/oracle
software location:/u01/app/oracle/product/11.2.0/dbhome_1
storage type :Automatic Storage Manager
Database file location:DATA
ASMSNMP Password:xxxxxxxx
Database edtion:
Global database name:rac.localdomain
Administrative password:
xxxxxxxx
Confirm Password: xxxxxxxx

7、检查安装先决条件,如果有问题,修复或者“Ignore All”,点击“Next”按钮。

8、确认安装信息无误,点击“Finish”按钮,等待安装……

9、Oracle软件安装完成后将自动启动数据库配置助手 (DBCA),数据库配置助手 (DBCA) 运行完毕后,单击“OK”按钮。

10、DBCA配置完成后弹出“Execute Configeration scripts”提示框,在每个节点上以root用户登录运行提示框中的root.sh脚本:
# /u01/app/oracle/product/11.2.0/dbhome_1/./root.sh

11、脚本执行完后,回到“Execute Configuration Scripts”窗口点击“OK”按钮。进入下一窗口点击“Close”窗口,完成安装。

RAC数据库安装完成。

十一、验证RAC运行状态

有多种方法来检查RAC的状态。Srvctl实用程序显示rac数据库当前配置和的状态。

$ srvctl config database -d rac
Database unique name: RAC
Database name: RAC
Oracle home: /u01/app/oracle/product/11.2.0/db_1
Oracle user: oracle
Spfile: +DATA/RAC/spfileRAC.ora
Domain: localdomain
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: RAC
Database instances: RAC1,RAC2
Disk Groups: DATA
Services: 
Database is administrator managed
$

$ srvctl status database -d rac
Instance RAC1 is running on node rac1
Instance RAC2 is running on node rac2
$

V$ ACTIVE_INSTANCES视图也可以显示实例的当前状态。

$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Sat Sep 26 19:04:19 2009

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> SELECT inst_name FROM v$active_instances;

INST_NAME
--------------------------------------------------------------------------------
rac1.localdomain:RAC1
rac2.localdomain:RAC2

SQL>

如果已配置企业管理器(EM),可以通过访问EM(https://rac1.localdomain:1158/em)查看数据库的配置和当前状态

查看更多相关信息

Grid Infrastructure Installation Guide for Linux

Real Application Clusters Installation Guide for Linux and UNIX

你可能感兴趣的:(通过VirtualBox实现CentOS上Oracle数据库11g第2版RAC安装)