RAC物理结构...3
一. 安装前准备及OS安装配置... 4
1、安装并配置新节点的虚拟机...4
2、节点三(dbi)的网络配置...4
3、节点三(dbi)的时间同步配置...5
5、 安装Oracle RAC依赖的操作系统软件包... 6
6、 安装oracleasm ASMlib软件包... 7
7、 修改各节点的/etc/hosts主机名解析文件... 7
8、 建立用户、配置环境变量及建立用户等价性... 8
9、 创建目录结构... 10
10、配置Linux系统参数...10
11、配置hangcheck-timer 模块... 11
12、配置裸设备RAW(OCR和Votedisk使用的裸设备)12
13、配置ASM磁盘...13
二. 添加节点之--安装Clusterware集群件到新节点... 14
1、 检查硬件和操作系统配置... 14
2、 在安装集群之前预检查节点列表中的所有节点... 15
3、 执行addNode.sh脚本安装复制集群件到新节点... 16
三. 添加节点之--安装数据库软件到新节点... 23
1、执行addNode.sh脚本安装复制数据库软件到新节点...23
四. 添加节点之--在新节点上配置监听器... 28
五. 添加节点之--在新节点上创建ASM实例... 32
六. 添加节点之--在新节点上创建数据库实例... 39
现在的RAC环境是二个节点: dbp,dbs, 这个实验就是添加节点dbi。
dbp,dbs和dbi节点的信息规划如下:
服务器主机名 |
dbp |
dbs |
dbi |
公共IP地址(eth0) |
192.168.123.154 |
192.168.123.155 |
192.168.123.156 |
虚拟IP地址(eth0) |
192.168.123.130 |
192.168.123.131 |
192.168.123.132 |
私有IP地址(eth1) |
10.0.0.154 |
10.0.0.155 |
10.0.0.156 |
ORACLE RAC SID |
wxxrdb1 |
wxxrdb2 |
wxxrdb3 |
集群实例名称 |
crs(查看命令$CRS_HOME/bin/cemutlo -n) |
||
OCR(oracle集群注册表) |
/dev/raw/raw1 /dev/sdb1 300M 1、$CRS_HOME/bin/ocrcheck 2、根据上述步骤1查到裸设备后,再执行 raw -q /dev/raw/raw1 查得裸设备的major和minor号后,再根据以下查ASM设备的方法查得对应的块设备和计算大小。 |
||
表决磁盘(voting disk) |
/dev/raw/raw2 /dev/sdb2 300M 查看命令: 1、$CRS_HOME/bin/crsctl query css votedisk 2、根据上述步骤1查到裸设备后,再执行 raw -q /dev/raw/raw2 查得裸设备的major和minor号后,再根据以下查ASM设备的方法查得对应的块设备和计算大小。 |
||
ASM |
ASM_diskname:VOL1 For_DG:+DATA Blockdev_name:/dev/sdc1 容量:6G ASM_diskname:VOL2 For_DG:+RECOVERY Blockdev_name:/dev/sdd1 容量:6G ASM_diskname: ARCH_DISK1 For_DG:+ARCH Blockdev_name:/dev/sdd2 容量:5G ASM_diskname: ARCH_DISK2 For_DG:+ARCH Blockdev_name:/dev/sdd3 容量:5G
检查方法: 1、 oracleasm listdisks 查到所有的ASM diskname 2、 ls -ltr /dev/oracleasm/disks/VOL1 brw-rw---- 1 oracle dba 8, 33 02-12 00:16 /dev/oracleasm/disks/VOL1 查到VOL1的major是8,minor 是33 3、[root@dbp dev]# ls -ltr /dev | grep "8,.*33" brw-r----- 1 root disk 8, 33 2016-02-12 sdc1 根据VOL1的major和minor号查到的块设备是/dev/sdc1 3、 查看 /dev/sdc1 的大小: fdisk -l /dev/sdc1 或 blockdev --getsize /dev/sdc1 查得块数,再乘以512(OS块大小)/1024/1024/1024 上述两个命令计算的大小有差异,fdisk -l命令计算的大小比 blockdev命令计算的大,但blockdev命令计算的大小和v$asm_disk.total_mb 一样差不多。 4、 查看 ASM disk所属的DG(Disk Group): select asmdg.name,asmd.group_number,asmd.path,asmd.total_mb,asmd.free_mb from v$asm_disk asmd,v$asm_diskgroup asmdg where asmd.group_number=asmdg.group_number; |
||
数据库备份 |
无 |
同2个节点的类似,装好虚拟操作系统,配置好硬盘,网关,IP地址,建立用户等效性,建立用户并创建相关目录,修改linux参数等。
1.1、复制之前节点刚创建未配置RAC时的虚拟机或新创建一个虚拟机。
1.2、将之前节点创建虚拟机的.vmx配置文件中的以下部分复制到新节点虚拟机的.vmx配置文件中:
disk.locking= "FALSE" ##创建ASM共享磁盘必须要配置此项
scsi1:0.deviceType = "disk" ##如果scsi1:0对应的磁盘为共享磁盘,必须要配置此项
scsi1:2.deviceType= "disk" ##如果scsi1:2对应的磁盘为共享磁盘,必须要配置此项
scsi1:0.fileName = "E:\VirtualMachines\ShareDisk\OCR_VOTEDISK.vmdk"
scsi1:0.mode= "independent-persistent"
scsi1:0.present= "TRUE"
scsi1:0.redo= ""
scsi1:0.writeThrough= "TRUE"
scsi1:1.deviceType= "disk"
scsi1:1.fileName= "E:\Virtual Machines\ShareDisk\ASM_DISK_ARCH_1.vmdk"
scsi1:1.mode= "independent-persistent"
scsi1:1.present= "TRUE"
scsi1:1.redo= ""
scsi1:1.writeThrough= "TRUE"
scsi1:2.deviceType= "disk"
scsi1:2.fileName= "E:\Virtual Machines\ShareDisk\ASM_DISK_ARCH_2.vmdk"
scsi1:2.mode= "independent-persistent"
scsi1:2.present= "TRUE"
scsi1:2.redo= ""
scsi1:2.writeThrough ="TRUE"
如果是复制之前节点创建的虚拟机,侧displayName 等参数也要改为新节点名字的参数。
配置节点三dbi的两个网卡(PublicNIC 和 Private NIC)的固定IP,Hostname, Gateway,配置情况见本文档最上的节点规划信息表,对应的配置文件是:
/etc/sysconfig/network-scripts/ifcfg-eth0 ## Public NIC 的IP和网关配置
/etc/sysconfig/network-scripts/ifcfg-eth1 ## Private NIC 的IP和网关配置
/etc/sysconfig/network ## 主机名配置
配置情况如下:
[root@dbi network-scripts]# cat ifcfg-eth0
# Intel Corporation 82545EM Gigabit Ethernet Controller(Copper)
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:0c:29:ce:22:50
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=192.168.123.156
USERCTL=no
IPV6INIT=no
PEERDNS=yes
[root@dbi network-scripts]# cat ifcfg-eth1
# Intel Corporation 82545EM Gigabit Ethernet Controller(Copper)
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:0c:29:ce:22:5a
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=10.0.0.156
USERCTL=no
IPV6INIT=no
PEERDNS=yes
[root@dbi sysconfig]# cat network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=dbi
##上面这个在文件修改主机名的方法需要重启才能生效,而且是永久生效,要立即生效,还要再执行一下命令:hostname dbi
也可以用root用户登录图形界面配置或在安装系统时配置。
修改完IP,网关等网络配置之后,需要重启网络服务生效:
/etc/init.d/network restart
有多种方法可以实现时间同步,其中:
3.1、最简单的方法是使用ntpdate命令进行时间同步,但使用ntpdate命令同步时间时,ntpd服务必须要关闭。通过在各节点主机的crontab 中加入以下每分钟向节点一同步时间的定时任务:
* * * * * /usr/sbin/ntpdate 192.168.123.154
3.2、本例中,由于节点一dbp(192.168.123.154)已经配置为NTP时间服务器,所以需要在节点三(dbi)中做如下配置:
3.2.1、在dbi节点的/etc/ntp.conf文件中配置后的内容如下:
server192.168.123.154 prefer
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
keys /etc/ntp/keys
3.2.2、在dbi节点及各节点的/etc/sysconfig/ntpd 文件中加入-x参数,配置后的内容如下:
[root@dbi tmp]#cat /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 aftersuccessful ntpdate
SYNC_HWCLOCK=no
# Additional options for ntpdate
NTPDATE_OPTIONS=""
RAC 对节点间时间较敏感,如果不同步在安装clusterware 时后会报错,而且在安装vipca的时候也会报错。
3.3、然后,重启 NTP 服务:
[root@dbi tmp]# /etc/init.d/ntpd restart
[root@dbi tmp]# chkconfig --level 35 ntpd on ##配置开机自动启动ntpd服务,必须执行这个。
5.1、执行以下命令检查系统所需的软件包是否已经安装:
rpm -q --qf'%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' \
binutils \
compat-db \
compat-libstdc++\
control-center \
gcc \
gcc-c++ \
glibc \
glibc-common \
gnome-libs \
libstdc++ \
libstdc++-devel\
make \
pdksh \
sysstat \
xscreensaver \
setarch \
glibc-devel \
libaio | sort
5.2、检查发现如下软件包没有安装:
packagecompat-db is not installed
packagecompat-libstdc++ is not installed ##发现这个包安装了,还是提示没安装,安装后,不用理会这个提示
packagegnome-libs is not installed
package pdksh isnot installed
package sysstatis not installed
packagexscreensaver is not installed
mount挂载系统安装盘的ISO镜像文件,进入光盘的/Server目录下查看相关包进行安装。
[root@dbi tmp]# ls -ltr
总计 252
-rw-r--r-- 1 root root 90225 02-13 02:21 oracleasm-support-2.1.8-1.el5.x86_64.rpm
-rw-r--r-- 1 root root 14176 02-13 02:21oracleasmlib-2.0.4-1.el5.x86_64.rpm
-rw-r--r-- 1 root root 137396 02-13 02:21oracleasm-2.6.18-238.el5-2.0.5-1.el5.x86_64.rpm
[root@dbi tmp]# rpm -Uvh oracleasm*
warning: oracleasm-2.6.18-238.el5-2.0.5-1.el5.x86_64.rpm:Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
1:oracleasm-support ########################################### [ 33%]
2:oracleasm-2.6.18-238.el########################################### [67%]
3:oracleasmlib ########################################### [100%]
在各节点的/etc/hosts文件中加入节点三dbi主机的解析条目,修改后各节点主机的/etc/hosts内容如下:
127.0.0.1 localhost.localdomain localhost
#::1 localhost6.localdomain6 localhost6
##Configure for Public NIC(eth0)
192.168.123.154dbp
192.168.123.155dbs
192.168.123.155dbi
##Configure for Private NIC(eth1)
10.0.0.154 dbp-priv
10.0.0.155 dbs-priv
10.0.0.156 dbi-priv
##Configure for VIP(eth0:1)
192.168.123.130 dbp-vip
192.168.123.131 dbs-vip
192.168.123.132 dbi-vip
[root@dbitmp]# groupadd -g 700 dba
##创建dba用户组,组ID必须要其它节点一样,如700。这里由于其它节点的oracle用户只存在一个用户组dba,所以,只创建dba用户组,不创建oinstall用户组。一般来说,oracle用户的主用户组是oinstall,附属组是dba的。
[root@dbitmp]# useradd -m -d /home/oracle -u 600 -g dba oracle
##创建oracle用户,uid和用户组必须要用其它节点一样,如果oracle存在于是oinstall主组和dba附属组,侧创建oracle用户的命令应该是:[root@dbi tmp]# useradd -m -d /home/oracle -u 600 -g oinstall -G dbaoracle
[root@dbitmp]# passwd oracle ##默认新创建的用户密码为空,需要修改密码
将以下内容添加到 /home/oracle/.bash_profile 文件中:
######## Configurefor Oracle environment variables ########
exportORACLE_BASE=/oracle
exportCRS_HOME=/oracle/product/crs
exportORACLE_HOME=/oracle/product/database
exportORACLE_SID=wxxrdb3
exportORACLE_UNQNAME=wxxrdb
#exportORACLE_TERM=xterm
exportTNS_ADMIN=$ORACLE_HOME/network/admin
exportORA_NLS10=$ORACLE_HOME/nls/data
exportPATH=$PATH:$CRS_HOME/bin:$ORACLE_HOME/bin
exportLANG=en_US.UTF-8
exportNLS_LANG=AMERICAN_AMERICA.ZHS16GBK
###########################End ###########################
[root@dbi tmp]# su - oracle
[oracle@dbi tmp]$ mkdir -m 700 ~/.ssh ##-m参数表示权限位,相同于是 chmod700
[oracle@dbi tmp]$ ls -ld ~/.ssh
drwx------ 2 oracle dba 4096 02-13 02:41/home/oracle/.ssh
[oracle@dbi tmp]$ cd ~/.ssh
[oracle@dbi .ssh]$ ssh-keygen -t rsa
[oracle@dbi .ssh]$ ssh-keygen -t dsa
将dbp上将authorized_keys 文件copy到dbi:
[oracle@dbi .ssh]$ scpdbp:/home/oracle/.ssh/authorized_keys ./
[oracle@dbi .ssh]$ ls -ltr
total 24
-rw-r--r-- 1 oracle dba 392 Feb 13 03:03 id_rsa.pub
-rw------- 1 oracle dba 1675 Feb 13 03:03id_rsa
-rw-r--r-- 1 oracle dba 600 Feb 13 03:04 id_dsa.pub
-rw------- 1 oracle dba 672 Feb 13 03:04 id_dsa
-rw-r--r-- 1 oracle dba 401 Feb 13 03:09 known_hosts
-rw-r--r-- 1 oracle dba 1984 Feb 13 03:09authorized_keys
将dbi的id_rsa.pub 和id_dsa.pub 写入authorized_keys:
[oracle@dbi .ssh]$ cat *.pub >>authorized_keys
将dbi上最新的authorized_keys 文件copy到dbp和dbs上:
[oracle@dbi .ssh]$ scp authorized_keysdbp:/home/oracle/.ssh/
[oracle@dbi .ssh]$ scp authorized_keys dbs:/home/oracle/.ssh/
在三个节点上用Oracle用户分别ssh所有节点(必须和个节点都要执行一次):
ssh dbp date
ssh dbp-priv date
ssh dbs date
ssh dbs-priv date
ssh dbi date
ssh dbi-priv date
mkdir -p /oracle/product/database
mkdir -p /oracle/product/crs
chown -R oracle:dba /oracle
chmod -R 755 /oracle
10.1、配置Linux内核参数
vi /etc/sysctl.conf 加入以下参数内容:
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
######## Configure for Oracle ########
kernel.shmall=2097152
kernel.shmmax=2147483648
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.wmem_default=262144
net.core.rmem_max=1048576
net.core.wmem_max=1048576
################ End #################
执行 sysctl -p 立即生效上述内核参数:
[root@dbi tmp]# sysctl –p
10.2、修改limits.conf 资源限制参数
vi /etc/security/limits.conf 加入以下内容:
##如果使用 HugePage内存技术,添加下面2行:
#Oracle soft memlock 5242880
#Oracle hard memlock 5242880
######## Configure for Oracle ########
##文件句柄数
oracle soft nofile 1024
oracle hard nofile 65536
##进程句柄数
oracle soft nproc 2047
oracle hard nproc 16384
################ End #################
查看oracle用户的资源限制:
ulimit -a
10.3、修改/etc/pam.d/login 登录模块文件
vi/etc/pam.d/login加入以下内容:
session required/lib/security/pam_limits.so
查找hangcheck-timer模块位置:
[root@dbi tmp]# find /lib/modules -name"hangcheck-timer.ko"
/lib/modules/2.6.18-238.el5/kernel/drivers/char/hangcheck-timer.ko
配置系统启动时自动加载模块,在/etc/rc.d/rc.local 中添加如下内容:
/sbin/modprobehangcheck-timer
并执行一次:
[root@dbi tmp]# /sbin/modprobe hangcheck-timer
配置hangcheck-timer参数, 在/etc/modprobe.conf 中添加如下内容:
options hangcheck-timer hangcheck_tick=10hangcheck_margin=30
确认模块加载成功:
[root@dbi tmp]# grep -i hangcheck /var/log/messages | tail-2
Feb 14 01:48:43 dbikernel: Hangcheck: starting hangcheck timer 0.9.0 (tick is 180 seconds, marginis 60 seconds).
Feb 14 01:48:43 dbikernel: Hangcheck: Using monotonic_clock().
注意:以上检查显示tick 180秒,margin 60秒,必须要重启系统才能生效hangcheck_tick和hangcheck_margin新参数值的配置。
说明:hangcheck-timer模块是用于是将故障的RAC节点进行IO分离,即在hangcheck_tick配置的时间(单位秒)内检查到本机节点无响应或已宕机,就会将节点机器重启,oracle会将该故障节点踢出集群。hangcheck_margin参数表示有时系统负载较高,无法及时响应,该参数表示最大延迟响应时间,即hangcheck_tick是下限值,hangcheck_margin是上限值。hangcheck_tick默认值是30秒,hangcheck_margin默认值是180秒。
hangcheck-timer模块两次检查的时间间隔要小于 hangcheck_tick + hangcheck_margin,而 CRS的misscount参数的值必须要大于hangcheck_tick + hangcheck_margin,因为CRS的misscount参数表示超过该参数时间(单位秒),没收到故障节点的心跳消息,就会将故障节点踢出集群,进行集群重构(包括在正常节点的Crash Recovery)如果misscount的值小于hangcheck_tick +hangcheck_margin,就可能会导致故障节点还没重启,就将其踢出集群,但该故障节点还会向集群进行操作,就会损坏数据库,所以misscount参数的值必须要大于hangcheck_tick + hangcheck_margin,等节点重启后,再进行集群重构。CRS的misscount参数值可以通过crsctl get css misscount命令获得,通过 crsctl set css misscount n秒命令设置。
10g RAC的OCR磁盘和Votedisk表决磁盘都必须放在裸设备上,11g RAC侧不用。
12.1、vi /etc/udev/rules.d/60-raw.rules 文件,添加如下内容:
###############Configure for OCR and Votedisk of Oracle ###############
ACTION=="add",KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add",ENV{MAJOR}=="8", ENV{MINOR}=="17", RUN+="/bin/raw/dev/raw/raw1 %M %m"
ACTION=="add",KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add",ENV{MAJOR}=="8", ENV{MINOR}=="18", RUN+="/bin/raw/dev/raw/raw2 %M %m"
ACTION=="add",KERNEL=="raw[1-2]", OWNER="oracle", GROUP="dba",MODE="660"
#################################End ##################################
12.2、重启udev服务进行梆定raw设备:
[root@dbi tmp]# start_udev
启动 udev: [确定]
12.3、查看梆定的raw设备,已经梆定成功:
[root@dbi tmp]# ls -ltr /dev/raw
总计 0
crw-rw---- 1 oracledba 162, 1 02-14 13:21 raw1
crw-rw---- 1 oracledba 162, 2 02-14 13:21 raw2
查看裸设备梆定的块设备的major和minor号:
[root@dbi tmp]# raw -qa
/dev/raw/raw1: bound to major 8, minor 17
/dev/raw/raw2: bound to major 8, minor 18
根据major和minor号查找梆定的块设备:
[root@dbi tmp]# ls -ltr /dev | grep "8,[[:space:]]*1[7,8]"
brw-r----- 1 rootdisk 8, 18 2016-02-14 sdb2
brw-r----- 1 rootdisk 8, 17 2016-02-14 sdb1
检查裸设备和梆定的块设备的大小(块数)是一致的:
[root@dbi tmp]# blockdev --getsize /dev/raw/raw1
594342
[root@dbi tmp]# blockdev --getsize /dev/sdb1
594342
[root@dbi tmp]# blockdev --getsize /dev/raw/raw2
594405
[root@dbi tmp]# blockdev --getsize /dev/sdb2
594405
13.1、配置ASM:
[root@dbi tmp]# /etc/init.d/oracleasm configure
分别回答oracle、dba、y、y:
Default user to ownthe driver interface []: oracle ## 允许使用ASM驱动接口的用户
Default group to ownthe driver interface []: dba ## 允许使用ASM驱动接口的用户组
Start Oracle ASMlibrary driver on boot (y/n) [n]: y ## 开机启动ASM驱动
Scan for Oracle ASMdisks on boot (y/n) [y]: y ## 开机扫描ASM磁盘
Writing Oracle ASMlibrary driver configuration: done
Initializing theOracle ASMLib driver: [ OK ]
Scanning the systemfor Oracle ASMLib disks: [ OK ]
13.2、显示ASM配置情况:
[root@dbi tmp]# oracleasm configure
ORACLEASM_ENABLED=true
ORACLEASM_UID=oracle
ORACLEASM_GID=dba
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"
注意:/etc/init.d/oracleasmconfigure和 oracleasm configure的区别:
/etc/init.d/oracleasmconfigure 用于是启动ASM配置向导进行配置ASM;
oracleasm configure 用于显示当前ASM的配置情况。
13.3、查看ASM磁盘:
[root@dbi tmp]# oracleasm listdisks
ARCH_DISK1
ARCH_DISK2
VOL1
VOL2
Oracle 集群件已经安装在集群上;这里的任务是将新节点添加到集群配置中。要执行该任务,需要执行 Oracle 提供的名为 addnode 的实用程序,该工具位于 Clusterware 的主 oui/bin 目录中。Oracle 集群件有两个文件(Oracle 集群信息库 (OCR) 和 Oracle 集群同步服务 (CSS) 表决磁盘),它们包含有关该集群以及由 Oracle 集群件管理的应用程序的信息。这些文件需要使用关于新节点的信息进行更新。集群件安装过程的第一步是验证新节点是否准备好进行安装。
先看一下当前集群成员:
[oracle@dbp tmp]$olsnodes -n
dbp 1
dbs 2
检查硬件和系统配置,在其它任何一个正常节点上执行(如节点一dbp或节点二dbs):
[oracle@dbp tmp]$ echo $CRS_HOME
/oracle/product/crs
[oracle@dbptmp]$ cd /oracle/product/crs/bin
[oracle@dbpbin]$ ./cluvfy stage -post hwos -ndbp,dbs,dbi -verbose ##只需在一个正常节点上执行
ERROR:
Could not find a suitable set of interfaces for VIPs. ##这个报错暂时不用理会,继续下面的操作
Node connectivity check failed.
Checking shared storage accessibility...
WARNING:
Package cvuqdisk not installed.
dbp,dbi,dbs
Shared storage check failed on nodes "dbp,dbi,dbs". ##这个报错暂时不用理会,继续下面的操作
Post-check forhardware and operating system setup was unsuccessful on all the nodes.
以上报错:1)、不能连通VIP,因为节点三dbi还没有安装集群件,所以vip是不通的,这个暂时不用理会。
2)、cvuqdisk这个支持共享存储的软件包在dbp,dbs,dbi三个节点都没有安装,这个软件包在Oracle集群件的安装包可以找到。
解决方法:
1)、设置环境变量CVUQDISK_GRP,使其指向作为 cvuqdisk的所有者所在的组(本例为 dba,因为没有oinstall用户组):
[root@dbp tmp]#export CVUQDISK_GRP=dba ## root用户执行
2)、在dbp,dbs,dbi三个节点安装 cvuqdisk软件包:
[root@dbp tmp]# rpm -ivh cvuqdisk-1.0.9-1.rpm
3)、重新执行检查:
[oracle@dbp bin]$ ./cluvfy stage -post hwos -n dbp,dbs,dbi –verbose
不会报 cvuqdisk 软件包没有安装了,但是还会报:
Could not find a suitable set ofinterfaces for VIPs.
Shared storage check failed on nodes"dbp,dbi,dbs".
这两个错误,先不用理会,继续以下的操作。
[oracle@dbpbin]$ ./cluvfy stage -pre crsinst -ndbp,dbs,dbi -verbose ##只需在一个正常节点上执行,这个会检查所有节点的软件包安装情况等信息
报以下错误:
Check: Existence of group "oinstall"
Node Name Status Group ID
------------ ------------------------ ------------------------
dbp does not exist N/A
dbi does not exist N/A
dbs does not exist N/A
Result: Group existence check failed for"oinstall". ##不用理会,因为本RAC环境只创建有dba用户组,没有oinstall用户组,oinstall用户组不是必须的。
Administrativeprivileges check failed.
ERROR:
Could not find a suitable set of interfaces for VIPs.
Result: Nodeconnectivity check failed. ##这个报错暂时不用理会,继续下面的操作
[oracle@dbp bin]$ export DISPLAY=192.168.123.1:0.0
[oracle@dbp bin]$ cd $CRS_HOME/oui/bin
[oracle@dbp bin]$ ./addNode.sh
直接点击”Next”
输入新节点的对应/etc/hosts的Public/Private/Vip 节点名,然后点击“Next”
显示添加集群新节点的概要信息,点击”Install”
显示添加集群件到新节点进度
按提示,登录root用户,按顺序依次在dbi(新节点),dbp(第一个节点,执行addNode.sh的节点)执行以上三个脚本文件:
步骤1:
[root@dbi tmp]# cd /oracle/oraInventory
[root@dbioraInventory]# ./orainstRoot.sh
Changing permissions of/oracle/oraInventory to 770.
Changing groupname of/oracle/oraInventory to dba.
The execution of thescript is complete
步骤2:
[root@dbp tmp]# cd /oracle/product/crs/install
[root@dbp install]# ./rootaddnode.sh
clscfg: EXISTINGconfiguration version 3 detected.
clscfg: version 3 is10G Release 2.
Attempting to add 1new nodes to the configuration
Using ports:CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.
node
node 3: dbi dbi-privdbi
Creating OCR keys foruser 'root', privgrp 'root'..
Operation successful.
/oracle/product/crs/bin/srvctladd nodeapps -n dbi -A dbi-vip/255.255.255.0/eth0 -o /oracle/product/crs
步骤3:
[root@dbi ~]# cd /oracle/product/crs
[root@dbi crs]# ./root.sh
WARNING: directory'/oracle/product' is not owned by root
WARNING: directory'/oracle' is not owned by root
Checking to see ifOracle CRS stack is already configured
/etc/oracle does notexist. Creating it now.
OCR LOCATIONS = /dev/raw/raw1
OCR backup directory'/oracle/product/crs/cdata/crs' does not exist. Creating now
Setting thepermissions on OCR backup directory
Setting up NSdirectories
Oracle ClusterRegistry configuration upgraded successfully
WARNING: directory'/oracle/product' is not owned by root
WARNING: directory'/oracle' is not owned by root
clscfg: EXISTINGconfiguration version 3 detected.
clscfg: version 3 is10G Release 2.
Successfullyaccumulated necessary OCR keys.
Using ports:CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.
node
node 1: dbp dbp-privdbp
node 2: dbs dbs-privdbs
clscfg: Argumentscheck out successfully.
NO KEYS WERE WRITTEN.Supply -force parameter to override.
-force is destructiveand will destroy any previous cluster
configuration.
Oracle ClusterRegistry for cluster has already been initialized
Startup will bequeued to init within 90 seconds.
Adding daemons toinittab
Expecting the CRSdaemons to be up within 600 seconds.
CSS is active onthese nodes.
dbp
dbs
dbi
CSS is active on allnodes.
Waiting for theOracle CRSD and EVMD to start
Waiting for theOracle CRSD and EVMD to start
Waiting for theOracle CRSD and EVMD to start
Waiting for theOracle CRSD and EVMD to start
Oracle CRS stack installedand running under init(1M)
Running vipca(silent)for configuring nodeapps
IP address "dbp-vip"has already been used. Enter an unused IP address.
提示:IP 地址 "dbp-vip"已被使用。请输入一个未使用的 IP 地址。
解决方法:因为 VIP已经在所有节点(而非新节点dbi)上进行了配置。我们手动执行 VIPCA(虚拟 IP配置助手)即可。点击以上图界面的”OK”按钮完成安装,然后用Xmanager工具连到新节点,在root用户下执行vipca:
[root@dbi crs]# export DISPLAY=192.168.123.1:0.0
[root@dbi crs]# cd /oracle/product/crs/bin
[root@dbi bin]# ./vipca
Exception in thread"main"
执行 vipca 后,提示异常,查看日志文件$CRS_HOME/cfgtoollogs/vipca/vipca.log显示缺少libXp的rpm包:
java.lang.UnsatisfiedLinkError:/oracle/product/crs/jdk/jre/lib/i386/libawt.so: libXp.so.6: cannot open sharedobject file: No such file or directory
解决方法:
1、 安装 libXp的rpm软件包
[root@dbi tmp]# rpm -ivh libXp-1.0.0-8.i386.rpm
2、 vi $CRS_HOME/bin/vipca文件,在 export LD_ASSUME_KERNEL后加入unset LD_ASSUME_KERNEL
在新节点完成集群件的安装后,将在新节点产生如下动作:
1)、/etc/init.d/目录中创建下列文件:
[oracle@dbi tmp]$ ls -ltr /etc/init.d/init.*
-r-xr-xr-x 1 rootroot 3182 Feb 14 18:46/etc/init.d/init.evmd
-r-xr-xr-x 1 rootroot 36794 Feb 14 18:46 /etc/init.d/init.cssd
-r-xr-xr-x 1 rootroot 4706 Feb 14 18:46/etc/init.d/init.crsd
-r-xr-xr-x 1 rootroot 1951 Feb 14 18:46/etc/init.d/init.crs
2)、新节点dbi中生成/etc/oraInst.loc文件,记录oracleInventory的目录位置:
[oracle@dbi bin]$ cat /etc/oraInst.loc
inventory_loc=/oracle/oraInventory
inst_group=dba
3)、/etc/inittab 文件加入了如下条目:
h1:35:respawn:/etc/init.d/init.evmdrun >/dev/null 2>&1
h2:35:respawn:/etc/init.d/init.cssdfatal >/dev/null 2>&1
h3:35:respawn:/etc/init.d/init.crsdrun >/dev/null 2>&1
4)、在所有节点执行olsnodes 命令检查集群件是否已经注册了所有节点:
[oracle@dbi tmp]$ olsnodes -n
dbp 1
dbs 2
dbi 3
[oracle@dbp tmp]$ olsnodes -n
dbp 1
dbs 2
dbi 3
[oracle@dbs tmp]$ olsnodes -n
dbp 1
dbs 2
dbi 3
5)、生成 /etc/oratab文件,并加入以下条目:
[oracle@dbp wxxrdb]$ cat /etc/oratab
+ASM3:/oracle/product/database:N
wxxrdb:/oracle/product/database:N
6)、使用 crs_stat 命令在各节点检查是否启动了集群服务:
[oracle@dbi tmp]$crs_stat -t -v
Name Type R/RA F/FT Target State Host
----------------------------------------------------------------------
ora.dbi.gsd application 0/5 0/0 ONLINE ONLINE dbi
ora.dbi.ons application 0/3 0/0 ONLINE ONLINE dbi
ora.dbi.vip application 0/0 0/0 ONLINE ONLINE dbi
ora....SM1.asmapplication 0/5 0/0 ONLINE ONLINE dbp
ora....BP.lsnrapplication 0/5 0/0 ONLINE ONLINE dbp
ora.dbp.gsd application 0/5 0/0 ONLINE ONLINE dbp
ora.dbp.ons application 0/3 0/0 ONLINE ONLINE dbp
ora.dbp.vip application 0/0 0/0 ONLINE ONLINE dbp
ora....SM2.asmapplication 0/5 0/0 ONLINE ONLINE dbs
ora....BS.lsnrapplication 0/5 0/0 ONLINE ONLINE dbs
ora.dbs.gsd application 0/5 0/0 ONLINE ONLINE dbs
ora.dbs.ons application 0/3 0/0 ONLINE ONLINE dbs
ora.dbs.vip application 0/0 0/0 ONLINE ONLINE dbs
ora.wxxrdb.db application 0/1 0/1 ONLINE ONLINE dbs
ora....b1.instapplication 0/5 0/0 ONLINE ONLINE dbp
ora....b2.instapplication 0/5 0/0 ONLINE ONLINE dbs
可以看到,dbi节点的gsd、ons、vip集群服务已经成功启动,查dbi节点的其它集群服务,如asm、listener、instance服务需要在安装和配置数据库软件后才会出现。
Oracle 已经提供了一个新的称为addNode.sh 的可执行文件,它位于 $ORACLE_HOME/oui/bin 目录。用Oracle 用户执行该脚本即可以将数据库软件复制安装到新节点。
在节点一上执行:
[oracle@dbp tmp]$ export DISPLAY=192.168.123.1:0.0
[oracle@dbp tmp]$ cd $ORACLE_HOME/oui/bin
[oracle@dbp bin]$ ./addNode.sh
指定新节点,然后点击“Next”
显示添加集群新节点的数据库软件概要信息,点击”Install”
显示添加数据库软件到新节点进度
该错误可忽略,点击”Yes”,查看日志文件:
[root@dbi racg]# cd /oracle/product/database/log/dbp/racg
[root@dbi racg]# tail-5 imon_wxxrdb.log
- OCIAQDeqArray
2016-02-1420:39:54.390: [ RACG][1210632512][8059][1210632512][ora.wxxrdb.wxxrdb1.inst]: clsrrlbgthr: Error 25228ORA-25228: timeout or end-of-fetch during message dequeue fromSYS.SYS$SERVICE_METRICS
- OCIAQDeqArray
在dbi节点,使用root用户登录,执行以上脚本文件:
[root@dbi racg]# cd /oracle/product/database
[root@dbi database]# ./root.sh
Running Oracle10root.sh script...
The followingenvironment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /oracle/product/database
Enter the fullpathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratabfile...
Entries will be addedto the /etc/oratab file as needed by
DatabaseConfiguration Assistant when a database is created
Finished runninggeneric part of root.sh script.
Now product-specificroot actions will be performed.
最后在安装向导界面中点击“Exit->Yes”完成新节点的数据库软件安装。
在新节点oracle用户上运行 netca:
[oracle@dbi tmp]$ export DISPLAY=192.168.123.1:0.0
[oracle@dbi tmp]$ netca
选择 “Cluster configuration”,点击”Next”
只选择新节点dbi,点击”Next”
选择”Listener configuration”,点击”Next”
默认选择”Add”,点击”Next”
保留默认监听名:LISTENER,点击”Next”
选择TCP协议,点击“Next”
如果没有端口号冲突,就选择默认端口号1521,点击”Next”
选择”No”,不再配置另一个监听器,点击”Next”,最后点击”Finished”完成。
配置完监听器后,会自动将监听服务注册到CRS中,执行crs_stat -t -v检查:
在节点一dbp上执行dbca为dbi节点创建ASM实例:
[oracle@dbp tmp]$ export DISPLAY=192.168.123.1:0.0
[oracle@dbp tmp]$ dbca
选择”Oracle Real Application Clusters database”,点击”Next”
选择”Configure Automatic Storage Management”,点击”Next”
选择dbp和dbi节点,这里dbp节点是必选的,作为父节点,然后向dbi节点进行extend。在dbi上安装ASM实例,点击”Next”
点击”Yes”
点击”ASM Parameters”,可以查看一下下面的”ASM Parameters”ASM参数列表。
创建ASM实例的相关目录:
[oracle@dbi +ASM]$ cd $ORACLE_BASE/admin/+ASM
[oracle@dbi +ASM]$ mkdir bdump cdump hdump pfile udump
输入之前ASM实例的SYS用户密码,和选择创建pfile文件,如果选择spfile文件会报错,点击”Next”
点击”OK”,开始创建ASM实例。
检查 $ORACLE_HOME/dbs 目录下 $ORACLE_BASE/admin/+ASM/pfile 目录下已经生成了pfile文件:
[oracle@dbi dbs]$ ls-ltr init*ASM*
lrwxrwxrwx 1 oracledba 33 Feb 14 21:56 init+ASM3.ora -> /oracle/admin/+ASM/pfile/init.ora
所有节点的ASM实例配置的ASM Diskgroup(ASM磁盘组)都必须显示出来,然后点击”Finish”
点击”No”完成新节点的ASM实例的创建
执行 crs_stat -t -v 检查dbi节点的ASM实例已经正常online,如下:
[oracle@dbi tmp]$ crs_stat -t -v
Name Type R/RA F/FT Target State Host
----------------------------------------------------------------------
ora....SM3.asm application 0/5 0/0 ONLINE ONLINE dbi
ora....BI.lsnrapplication 0/5 0/0 ONLINE ONLINE dbi
ora.dbi.gsd application 0/5 0/0 ONLINE ONLINE dbi
ora.dbi.ons application 0/3 0/0 ONLINE ONLINE dbi
ora.dbi.vip application 0/0 0/0 ONLINE ONLINE dbi
ora....SM1.asmapplication 0/5 0/0 ONLINE ONLINE dbp
ora....BP.lsnrapplication 0/5 0/0 ONLINE ONLINE dbp
ora.dbp.gsd application 0/5 0/0 ONLINE ONLINE dbp
ora.dbp.ons application 0/3 0/0 ONLINE ONLINE dbp
ora.dbp.vip application 0/0 0/0 ONLINE ONLINE dbp
ora....SM2.asmapplication 0/5 0/0 ONLINE ONLINE dbs
ora....BS.lsnrapplication 0/5 0/0 ONLINE ONLINE dbs
ora.dbs.gsd application 0/5 0/0 ONLINE ONLINE dbs
ora.dbs.ons application 0/3 0/0 ONLINE ONLINE dbs
ora.dbs.vip application 0/0 0/0 ONLINE ONLINE dbs
ora.wxxrdb.db application 0/1 0/1 ONLINE ONLINE dbs
ora....b1.instapplication 0/5 0/0 ONLINE ONLINE dbp
ora....b2.instapplication 0/5 0/0 ONLINE ONLINE dbs
在新节点dbi上登录ASM实例检查状态正常:
[oracle@dbi tmp]$ export ORACLE_SID=+ASM3
[oracle@dbi tmp]$ asmcmd -p
ASMCMD [+] >ls
ARCH/
DATA/
RECOVERY/
SQL> selectinst_id,instance_number,instance_name,host_name,status from gv$instance;
INST_ID INSTANCE_NUMBER INSTANCE_NAME HOST_NAME STATUS
------- --------------- --------------- --------------------
3 3 +ASM3 dbi STARTED
2 2 +ASM2 dbs STARTED
1 1 +ASM1 dbp STARTED
在节点一dbp上执行dbca为dbi节点创建数据库实例:
[oracle@dbp tmp]$ export DISPLAY=192.168.123.1:0.0
[oracle@dbp tmp]$ dbca
选择”Oracle Real Application Clusters database”,点击”Next”
选择”Instance Management”,点击”Next”
选择”Add an instance”,点击”Next”
输入数据库的sys用户和密码,点击”Next”
显示目前存在活动的数据库实例,点击”Next”
选择要添加实例的节点,这里必须要选择新节点dbi,点击”Next”
这里点击下一步后,会提示 The local node instance wxxrdb1 is not running。检查wxxrdb1实例是已经正常运行在dbp节点上的,重启集群所有的服务后,再重新dbca到这一步,还是提示The local node instance wxxrdb1 is not running。不知道是什么原因,不知道是否是10.2.0.1.0版本的bug。可以尝试以下两种方法重试:
1)、在第一个节点中的登录sqlplus /as sysdba,重新启动实例:
SQL> shutdownimmediate;
SQL> startup;
然后再执行 dbca
2)、可以尝试在其它正常的节点(非新增节点),如第二节点dbs中执行dbca
本次操作是选择了上面第一种方法在sqlplus中重启实例,再执行dbca重试就可以了,使用集群管理命令重启实例,如:
srvctl stop instance -d wxxrdb -i wxxrdb1
srvctl start instance -d wxxrdb -i wxxrdb1
或使用重启数据库和实例命令,如:
srvctl stop database -d wxxrdb -o immediate
srvctl start database -d wxxrdb -o open
都是不可以的,执行dbca创建新节点实例时会报如上The local node instance wxxrdb1 is not running的错误。
点击”File Location Variables”显示如上图的窗口,显示的SID是 wxxrdb1,这个不用理会,这个是指执行dbca的实例ID,不是指新节点的实例ID,新节点的实例ID是wxxrdb3。
点击”Fnish”后,如下所示:
显示新节点实例wxxrdb3的概要信息,点击”OK”,如果出现如下错误提示:
表示每个节点使用的归档目录不是ASM共享磁盘目录,而是本地目录,因为是在dbp节点上使用dbca命令创建新节点dbi的数据库实例,可能是从dbp节点的数据库实例wxxrdb1上读取了参数值(log_archive_dest_1='location=/wxxrdb1_arch'),而dbi节点还没有创建/wxxrdb1_arch这个目录,所以会报错,在dbi节点用root用户创建该目录并修改为oracle属主权限:
[root@dbi tmp]# mkdir -m 755 /wxxrdb1_arch
[root@dbi tmp]# chown oracle:dba /wxxrdb1_arch
然后再重试即可。
开始创建新节点的数据库实例
新节点的数据库实例创建完成,点击”No”退出向导界面。
最后,在各节点执行 crs_stat -t -v 命令检查新节点dbi的数据库实例wxxrdb3是否已经注册到了CRS,并且是否已经成功online:
在sqlplus中检查各实例都已经成功open:
SQL> selectinst_id,instance_name,host_name,thread#,status from gv$instance;
INST_ID INSTANCE_NAME HOST_NAME THREAD# STATUS
---------- ---------------- -------------------- --------
3 wxxrdb3 dbi 3 OPEN
2 wxxrdb2 dbs 2 OPEN
1 wxxrdb1 dbp 1 OPEN
OK,本次添加RAC节点的操作成功圆满完成!!!