Oracle 11gR2 RAC安装

1.操作系统前期配置

BUG:安装grid时,检测互信会报以下错误可能与BUG有关

[INS-06006] Passwordless SSH connectivity not set up between the following node(s)

解决办法:主机名配置为小写

细节说明:

1. 安装Oracle Linux时,注意分配两个网卡,一个网卡为Host Only方式,用于两台虚拟机节点的通讯,另一个网卡为Nat方式,用于连接外网,后面再手动分配静态IP。每台主机的内存和swap规划为至少2.5G。硬盘规划为:boot 500M,其他空间分配为LVM方式管理,LVM划分2.5G为swap,其他为/。

两台Oracle Linux主机名为oracle1、oracle2

注意这里安装的两个操作系统最好在不同的硬盘中,否则I/O会很吃力。

2. 由于采用的是共享存储ASM,而且搭建集群需要共享空间作注册盘(OCR)和投票盘(votingdisk)。VMware创建共享存储方式:

进入VMware安装目录,cmd命令下:

1.VMware创建共享存储方式:进入VMware安装目录,cmd命令下:

"D:\Program Files\VMware\VMware Workstation

vmware-vdiskmanager.exe -c -s 1024MB -a lsilogic -t 2 "D:\Program Files\VMware\VMware Space\RAC1\SHARE\ocr.vmdk"

vmware-vdiskmanager.exe -c -s 1024MB -a lsilogic -t 2 "D:\Program Files\VMware\VMware Space\RAC1\SHARE\ocr2.vmdk"

vmware-vdiskmanager.exe -c -s 1024MB -a lsilogic -t 2 "D:\Program Files\VMware\VMware Space\RAC1\SHARE\votingdisk.vmdk"

vmware-vdiskmanager.exe -c -s 20480MB -a lsilogic -t 2 "D:\Program Files\VMware\VMware Space\RAC1\SHARE\data.vmdk"

vmware-vdiskmanager.exe -c -s 10240MB -a lsilogic -t 2 "D:\Program Files\VMware\VMware Space\RAC1\SHARE\backup.vmdk"

这里创建了两个1G的ocr盘,一个1G的投票盘,一个20G的数据盘,一个10G的备份盘。



2.修改oracle1虚拟机目录下的vmx配置文件:

scsi1.sharedBus = "virtual"

disk.locking = "false"

3.在oracle2的虚拟机设置中手动添加创建好的五个虚拟硬盘。

4.修改oracle2的vmx配置文件:

scsi1.sharedBus = "virtual"

disk.locking = "false"

5.IP规划:

Identity Home Node Host Node Given Name Type Address

oracle1 Public oracle1 oracle1 oracle1 Public 192.168.10.120

oracle1 VIP oracle1 oracle1 oracle1-vip Public 192.168.10.220

oracle1 Private oracle1 oracle1 oracle1-priv Private 10.10.10.120

oracle2 oracle2 oracle2 oracle2 Public 192.168.10.121

oracle2 VIP oracle2 oracle2 oracle2-vip Public 192.168.10.221

oracle2 Private oracle2 oracle2 oracle2-priv Private 10.10.10.121

SCAN IP none Selected by Oracle Clusterware scan-ip virtual 192.168.10.200

6.关闭防火墙

命令临时生效:

setenforce 0 (临时生效可以直接用setenforce 0 )

            1 启用

            0 告警,不启用

永久生效:

cat /etc/selinux/config

sed -i 's/SELINUX=enforcing/\SELINUX=permissive/' /etc/selinux/config

# SELINUX参数enforcing代表打开,disabled代表关闭

# 查看selinux状态:

[root@oracle1 ~]# getenforce

Permissive

linux 6

[root@oracle1 ~]# service iptables stop

[root@oracle1 ~]# service iptables status

[root@oracle1 ~]# chkconfig --list iptables

[root@oracle1 ~]# chkconfig iptables off

linux 7

[root@oracle1 ~]# systemctl stop firewalld.service

[root@oracle1 ~]# systemctl status firewalld.service

[root@oracle1 ~]# systemctl disable firewalld.service

7.创建必要的用户、组和目录,并授权

groupadd -g 1001 oinstall

groupadd -g 1020 asmadmin

groupadd -g 1021 asmdba

groupadd -g 1022 asmoper

groupadd -g 1031 dba

groupadd -g 1032 oper

useradd -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,oper,dba grid

useradd -u 1101 -g oinstall -G dba,asmdba,oper oracle

mkdir -p /u01/app/11.2.0/grid

mkdir -p /u01/app/grid

mkdir -p /u01/app/oracle

chown -R grid:oinstall /u01

chown oracle:oinstall /u01/app/oracle

chmod -R 775 /u01/

8.节点配置检查

内存大小:至少2.5GB

Swap大小:

当内存为2.5GB-16GB时,Swap需要大于等于系统内存。

当内存大于16GB时,Swap等于16GB即可。

查看内存和swap大小:

[root@oracle1 ~]# grep MemTotal /proc/meminfo

MemTotal:        2552560 kB

[root@oracle1 ~]# grep SwapTotal /proc/meminfo

SwapTotal:       2621436 kB

如果swap太小,swap调整方法:

通过此种方式进行swap 的扩展,首先要计算出block的数目。具体为根据需要扩展的swapfile的大小,以M为单位。block=swap分区大小*1024, 例如,需要扩展64M的swapfile,则:block=64*1024=65536.

然后做如下步骤:

[root@oracle2 ~]# dd if=/dev/zero of=/swapfile bs=1024 count=65536

[root@oracle2 ~]# mkswap /swapfile

[root@oracle2 ~]# swapon /swapfile

[root@oracle2 ~]# vi /etc/fstab

增加  /swapfile swap swap defaults 0 0

[root@oracle2 ~]# cat /proc/swaps 或者# free –m //查看swap分区大小

[root@oracle2 ~]# swapoff /swapfile //关闭扩展的swap分区

9.系统文件设置

(1)内核参数设置:

[root@oracle1 ~]# vi /etc/sysctl.conf

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 2071721984

kernel.shmall = 2064287744

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmmni = 4096

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

net.ipv4.tcp_wmem = 262144 262144 262144

net.ipv4.tcp_rmem = 4194304 4194304 4194304

这里后面检测可能要改

kernel.shmmax = 需求的值

确认修改内核

[root@oracle1 ~]# sysctl -p

(2)配置oracle、grid用户的shell限制

[root@oracle1 ~]# vi /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

配置本地YUM源

[root@localhost ~]#cd /soft/os/Packages

[root@oracle1 Packages]# rpm -ivh deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm

[root@oracle1 Packages]# rpm -ivh python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm

[root@oracle1 Packages]# rpm -ivh createrepo-0.9.9-24.el6.noarch.rpm

[root@localhost Packages]# cd /etc/yum.repos.d/

[root@localhost yum.repos.d]# ls

[root@localhost yum.repos.d]# vi local.repo

[HighAvailability]

name=HighAvailability

baseurl=file:///soft/os/HighAvailability

enabled=1

gpgcheck=0

[LoadBalancer]

name=LoadBalancer

baseurl=file:///soft/os/LoadBalancer

enabled=1

gpgcheck=0

[Server]

name=Server

baseurl=file:///soft/os/Server

enabled=1

gpgcheck=0

[root@localhost yum.repos.d]# mv public-yum-ol6.repo public-yum-ol6.repo.bak

[root@localhost yum.repos.d]# vi /etc/yum.repos.d/public-yum-ol6.repo

[oel6_local]

name = oracle Enterprise Linux 6

baseurl=file:///soft/os/Server

gpgcheck=0

enabled=1

[root@localhost yum.repos.d]# vi rhel-media.repo

[media]

name=Red Hat Enterprise Linux 6.8

baseurl=file:///soft/os

enabled=1

gpgcheck=1

gpgkey=file:///soft/os/RPM-GPG-KEY-oracle

清除原有缓存

[root@localhost ~]# yum clean all

获取yum列表

[root@localhost ~]# yum makecache

[root@localhost ~]# yum list

[root@localhost ~]# yum grouplist

[root@localhost ~]# yum -y install binutils compat-libcap1 compat-libstdc++* gcc gcc-c++ glibc* glibc-devel* ksh libgcc* libstdc++* libstdc++-devel* libaio libaio-devel make sysstat

10.配置hosts

[root@oracle1 ~]# vi /etc/hosts

192.168.10.120 oracle1

192.168.10.220 oracle1-vip

10.10.10.120 oracle1-priv

192.168.10.121 oracle2

192.168.10.221 oracle2-vip

10.10.10.121 oracle2-priv

192.168.10.200 scan-ip

11.配置grid和oracle用户环境变量

需要注意的是ORACLE_UNQNAME是数据库名,创建数据库时指定多个节点是会创建多个实例,ORACLE_SID指的是数据库实例名

Oracle_sid需要根据节点不同进行修改

[root@oracle1 ~]# su - grid

[grid@oracle1 ~]$ vi .bash_profile

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_SID=+ASM1  # oracle1

export ORACLE_SID=+ASM2  # oracle2

export ORACLE_BASE=/u01/app/grid

export ORACLE_HOME=/u01/app/11.2.0/grid

export PATH=/usr/sbin:$PATH

export PATH=$ORACLE_HOME/bin:$PATH

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

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

umask 022

[root@oracle1 ~]# su - oracle

[oracle@oracle1 ~]$ vi .bash_profile

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_SID=orcl1  # oracle1

export ORACLE_SID=orcl2  # oracle2

export ORACLE_UNQNAME=orcl

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export TNS_ADMIN=$ORACLE_HOME/network/admin

export PATH=/usr/sbin:$PATH

export PATH=$ORACLE_HOME/bin:$PATH

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

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

source .bash_profile使配置文件生效

12.配置oracle用户ssh互信

使用Oracle用户:

[oracle@oracle1 ~]$ ssh-keygen -t rsa

[oracle@oracle1 ~]$ ssh-keygen -t dsa

[oracle@oracle2 ~]$ ssh-keygen -t rsa

[oracle@oracle2 ~]$ ssh-keygen -t dsa

[oracle@oracle1 ~]$ cd .ssh

[oracle@oracle2 ~]$ cd .ssh

[oracle@oracle1 .ssh]$ cat *.pub > authorized_keys

[oracle@oracle2 .ssh]$ cat *.pub > authorized_keys

[oracle@oracle1 .ssh]$ scp authorized_keys oracle2:/home/oracle/.ssh/keys_dbs

[oracle@oracle2 .ssh]$ cat keys_dbs >> authorized_keys

[oracle@oracle2 .ssh]$ scp authorized_keys oracle1:/home/oracle/.ssh/

ssh oracle1 date

ssh oracle2 date

ssh oracle1-priv date

ssh oracle2-priv date

需要注意的是生成密钥时不设置密码,同时需要两个节点互相ssh通过一次。

13.配置裸盘

在配置裸盘之前需要先格式化硬盘

[root@oracle1 ~]# vi /etc/udev/rules.d/60-raw.rules

ACTION=="add",KERNEL=="/dev/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=="/dev/sdc1",RUN+="/bin/raw /dev/raw/raw2 %N"

ACTION=="add",ENV{MAJOR}=="8",ENV{MINOR}=="33",RUN+="/bin/raw/dev/raw/raw2 %M %m"

ACTION=="add",KERNEL=="/dev/sdd1",RUN+="/bin/raw /dev/raw/raw3 %N"

ACTION=="add",ENV{MAJOR}=="8",ENV{MINOR}=="49",RUN+="/bin/raw/dev/raw/raw3 %M %m"

ACTION=="add",KERNEL=="/dev/sde1",RUN+="/bin/raw /dev/raw/raw4 %N"

ACTION=="add",ENV{MAJOR}=="8",ENV{MINOR}=="65",RUN+="/bin/raw/dev/raw/raw4 %M %m"

ACTION=="add",KERNEL=="/dev/sdf1",RUN+="/bin/raw /dev/raw/raw5 %N"

ACTION=="add",ENV{MAJOR}=="8",ENV{MINOR}=="81",RUN+="/bin/raw/dev/raw/raw5 %M %m"

KERNEL=="raw[1-5]",OWNER="grid",GROUP="asmadmin",MODE="660"

[root@oracle1 ~]# partprobe /dev/sdb

[root@oracle1 ~]# partprobe /dev/sdc

[root@oracle1 ~]# partprobe /dev/sdd

[root@oracle1 ~]# partprobe /dev/sde

[root@oracle1 ~]# partprobe /dev/sdf

启动udev

linux 6

[root@oracle1 ~]# start_udev

linux 7

[root@oracle1 ~]# /usr/sbin/udevadm control --reload-rules

[root@oracle1 ~]# systemctl status systemd-udevd.service

[root@oracle1 ~]# systemctl enable systemd-udevd.service

[root@oracle1 ~]# systemctl restart systemd-udev-trigger.service

[root@oracle1 ~]# udevadm trigger --type=devices --action=change

[root@oracle1 ~]# systemctl restart systemd-udev-trigger.service

[root@oracle1 ~]# ll /dev/raw/

这里需要注意的是配置的,前后都不能有空格,否则会报错。最后看到的raw盘权限必须是grid:asmadmin用户。

14.配置grid用户ssh互信

使用grid用户

[grid@oracle1 ~]$ ssh-keygen -t rsa

[grid@oracle1 ~]$ ssh-keygen -t dsa

[grid@oracle2 ~]$ ssh-keygen -t rsa

[grid@oracle2 ~]$ ssh-keygen -t dsa

[grid@oracle1 ~]$ cd .ssh

[grid@oracle2 ~]$ cd .ssh

[grid@oracle1 .ssh]$ cat *.pub > authorized_keys

[grid@oracle2 .ssh]$ cat *.pub > authorized_keys

[grid@oracle1 .ssh]$ scp authorized_keys oracle2:/home/grid/.ssh/keys_dbs

[grid@oracle2 .ssh]$ cat keys_dbs >> authorized_keys

[grid@oracle2 .ssh]$ scp authorized_keys oracle1:/home/grid/.ssh/

ssh oracle1 date

ssh oracle2 date

ssh oracle1-priv date

ssh oracle2-priv date

15.挂载安装软件文件夹

mkdir -p /soft/grid

mkdir -p /soft/oracle

mount -o loop grid_11_2_0_4.iso /mnt

mount -o loop oracle_11_2_0_4.iso /mnt

16.安装用于Linux的cvuqdisk

在Oracle RAC两个节点上安装cvuqdisk,否则,集群验证使用程序就无法发现共享磁盘,当运行(手动运行或在Oracle Grid Infrastructure安装结束时自动运行)集群验证使用程序,会报错“Package cvuqdisk not installed”

注意使用适用于硬件体系结构(x86_64或i386)的cvuqdisk RPM。

cvuqdisk RPM在grid的安装介质上的rpm目录中。

cd /soft/grid/rpm

rpm -ivh cvuqdisk-1.0.9-1.rpm

17.手动运行cvu使用验证程序验证Oracle集群件要求(所有节点都执行)

到grid软件目录下执行runcluvfy.sh命令

[root@oracle1 ~]# cp -R /mnt/grid /soft

[root@oracle1 ~]# su - grid

[grid@oracle1 grid]$ cd /soft/grid

[grid@oracle1 grid]$ ./runcluvfy.sh stage -pre crsinst -n oracle1,oracle2 -fixup -verbose

查看cvu报告,修正错误

这里CVU执行的所有其他检查的结果为”passed”,只出现了如下错误:

检查无法访问节点的 DNS 响应时间

  节点名                                   状态                      

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

  oracle2                               失败                      

  oracle1                               失败                      

PRVF-5636 : 在以下节点上, 无法访问的节点的 DNS 响应时间超过 "15000" 毫秒: oracle2,oracle1

文件 "/etc/resolv.conf" 在各节点间不一致

这个错误是因为没有配置DNS,但不影响安装,后面也会提示resolv.conf错误,我们用静态的scan-ip,所以可以忽略。

2.安装Grid Infrastructure

(1)安装流程

只需要在一个节点上安装即可,会自动复制到其他节点中,这里在rac1中安装。

进入图形化界面,在grid用户下进行安装

[root@oracle1 ~]# su - grid

[grid@oracle1 ~]$ cd /soft/grid

[grid@oracle1 grid]$ export DISPLAY=192.168.10.1:0.0

[grid@oracle1 grid]$ export LANG=en_US

[grid@oracle1 grid]$ xhost +

[grid@oracle1 grid]$ ./runInstaller

跳过更新

选择安装集群

 选择自定义安装

选择语言为English和简体中文

定义集群名字,SCAN Name 为hosts中定义的scan-ip,取消GNS

界面只有第一个节点oracle1,点击“Add”把第二个节点oracle2加上

选择网卡

配置ASM,这里选择前面配置的裸盘raw1,raw2,raw3,冗余方式为External即不冗余。因为是不冗余,所以也可以只选一个设备。这里的设备是用来做OCR注册盘和votingdisk投票盘的。

配置ASM实例需要为具有sysasm权限的sys用户,具有sysdba权限的asmsnmp用户设置密码,这里设置统一密码为oracle,会提示密码不符合标准,点击OK即可 

不选择智能管理

检查ASM实例权限分组情况 

选择grid软件安装路径和base目录

选择grid安装清单目录

环境检测出现resolv.conf错误,是因为没有配置DNS,可以忽略 

如果报NTP的错,类似于:Clock synchronization check using Network Time Protocol(NTP) failed

解决办法;

service ntpd stop

chkconfig ntpd off

mv /etc/ntp.conf /etc/ntp.conf.bak

安装grid概要

开始安装

复制安装到其他节点 

安装grid完成,提示需要root用户依次执行脚本orainstRoot.sh和root.sh (一定要先在oracle1执行完脚本后,才能在其他节点执行)

/u01/app/oraInventory/orainstRoot.sh 

 

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

RH7执行脚本时会报错,报错如下:

解决办法:

1. 以root用户创建服务文件

#touch /usr/lib/systemd/system/ohas.service

#chmod 777 /usr/lib/systemd/system/ohas.service

2. 将以下内容添加到新创建的ohas.service文件中

[root@rac1 init.d]# cat /usr/lib/systemd/system/ohas.service

[Unit]

Description=Oracle High Availability Services

After=syslog.target

[Service]

ExecStart=/etc/init.d/init.ohasd run >/dev/null 2>&1 Type=simple

Restart=always

[Install]

WantedBy=multi-user.target

3. 以root用户运行下面的命令

systemctl daemon-reload

systemctl enable ohas.service

systemctl start ohas.service

4. 查看运行状态

[root@rac1 init.d]# systemctl status ohas.service

ohas.service - Oracle High Availability Services

   Loaded: loaded (/usr/lib/systemd/system/ohas.service; enabled)

   Active: failed (Result: start-limit) since Fri 2015-09-11 16:07:32 CST; 1s ago

  Process: 5734 ExecStart=/etc/init.d/init.ohasd run >/dev/null 2>&1 Type=simple (code=exited, status=203/EXEC)

 Main PID: 5734 (code=exited, status=203/EXEC)

Sep 11 16:07:32 rac1 systemd[1]: Starting Oracle High Availability Services...

Sep 11 16:07:32 rac1 systemd[1]: Started Oracle High Availability Services.

Sep 11 16:07:32 rac1 systemd[1]: ohas.service: main process exited, code=exited, status=203/EXEC

Sep 11 16:07:32 rac1 systemd[1]: Unit ohas.service entered failed state.

Sep 11 16:07:32 rac1 systemd[1]: ohas.service holdoff time over, scheduling restart.

Sep 11 16:07:32 rac1 systemd[1]: Stopping Oracle High Availability Services...

Sep 11 16:07:32 rac1 systemd[1]: Starting Oracle High Availability Services...

Sep 11 16:07:32 rac1 systemd[1]: ohas.service start request repeated too quickly, refusing to start.

Sep 11 16:07:32 rac1 systemd[1]: Failed to start Oracle High Availability Services.

Sep 11 16:07:32 rac1 systemd[1]: Unit ohas.service entered failed state.

此时状态为失败,原因是现在还没有/etc/init.d/init.ohasd文件。

下面可以运行脚本root.sh 不会再报ohasd failed to start错误了。

如果还是报ohasd failed to start错误,可能是root.sh脚本创建了init.ohasd之后,ohas.service没有马上启动,解决方法参考以下:

当运行root.sh时,一直刷新/etc/init.d ,直到出现 init.ohasd 文件,马上手动启动ohas.service服务 命令:systemctl start ohas.service 

[root@rac1 init.d]# systemctl status ohas.service

ohas.service - Oracle High Availability Services

   Loaded: loaded (/usr/lib/systemd/system/ohas.service; enabled)

   Active: active (running) since Fri 2015-09-11 16:09:05 CST; 3s ago

 Main PID: 6000 (init.ohasd)

   CGroup: /system.slice/ohas.service

           6000 /bin/sh /etc/init.d/init.ohasd run >/dev/null 2>&1 Type=simple

           6026 /bin/sleep 10

Sep 11 16:09:05 rac1 systemd[1]: Starting Oracle High Availability Services...

Sep 11 16:09:05 rac1 systemd[1]: Started Oracle High Availability Services.

Sep 11 16:09:05 rac1 su[6020]: (to grid) root on none

完成脚本后,点击OK,Next,下一步 

 这里出现了一个错误 

重新配置并启动监听即可

如果报错如下

 根据提示查看日志

由错误日志可知,是因为没有配置resolve.conf,可以忽略 

安装完成

(2)安装grid后的资源检查

以grid用户执行以下命令。 
[root@oracle1 ~]# su - grid

检查crs状态

[grid@oracle1 ~]$ crsctl check crs

CRS-4638: Oracle High Availability Services is online

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

检查Clusterware资源

[grid@oracle1 ~]$  crs_stat -t -v

检查集群节点

[grid@oracle1 ~]$ olsnodes -n

oracle1 1

oracle2 2

检查两个节点上的Oracle TNS监听器进程

[grid@oracle1 ~]$ ps -ef|grep lsnr|grep -v 'grep'|grep -v 'ocfs'|awk '{print$9}'

LISTENER_SCAN1

LISTENER

[grid@oracle2 ~]$ ps -ef|grep lsnr|grep -v 'grep'|grep -v 'ocfs'|awk '{print$9}'

LISTENER

确认针对Oracle Clusterware文件的Oracle ASM功能:

如果在 Oracle ASM 上安装过了OCR和表决磁盘文件,则以Grid Infrastructure 安装所有者的身份,使用给下面的命令语法来确认当前正在运行已安装的Oracle ASM:

[grid@oracle2 ~]$ srvctl status asm -a

ASM 正在 oracle1,oracle2 上运行

ASM 已启用。

(3)为数据和快速恢复区创建ASM磁盘组

只在节点rac1执行即可 
进入grid用户下 

[root@rac1 ~]# su - grid 
利用asmca 
[grid@rac1 ~]$ asmca

这里看到安装grid时配置的OCR盘已存在 

添加DATA盘,点击create,使用裸盘raw4 

 同样创建FRA盘,使用裸盘raw5 

ASM磁盘组情况

ASM实例

3.安装Oracle database软件(RAC)

1.安装流程

只需要在节点oracle1上执行即可 
[root@oracle1 ~]# su - oracle
[oracle@oracle1 ~]$ cd /soft/database

[oracle@oracle1 database]$ export DISPLAY=192.168.10.1:0.0

[oracle@oracle1 database]$ export LANG=en_US

[oracle@oracle1 database]$ xhost +
[oracle@oracle1 database]$ ./runInstaller

进入图形化界面,跳过更新 

选择只安装数据库软件  

选择Oracel Real Application Clusters database installation按钮(默认),确保勾选所有的节点  

图上的SSH Connectivity是配置每个节点之间的oracle用户互信,前面已手动配置过,可以不配

选择语言English和简体中文

 

选择安装企业版软件 

选择安装Oracle软件路径,其中ORACLE_BASE,ORACLE_HOME均选择之前配置好的

 oracle权限授予用户组

安装前的预检查 

这两个错误前面有说明,忽略

错误提示:

如果有

1. Node Application Existence

PRVF-4557:Node application "ora.rac1.vip" is offline on node "rac1"

说明是rac1 出异常,vip飘到rac2,正常rac1恢复会自动飘回,可以手动

crsctl relocate resource ora.cnsz001.vip

2. Node Connectivity

检查

[grid@cnsz002 grid]$ ./runcluvfy.sh stage -post hwos -n cnsz001,cnsz002 -verbose  

3. 在RHEL7或者OL7上安装11.2.0.4时遇到错误 “undefined reference to symbol ‘B_DestroyKeyObject’”

来源于:

Installation of Oracle 11.2.0.4 on OL7 fails with “undefined reference to symbol ‘B_DestroyKeyObject’” error (文档 ID 1965691.1)

适用于:

Oracle Database - Enterprise Edition - Version 11.2.0.4 to 11.2.0.4 [Release 11.2]

Oracle Database - Standard Edition - Version 11.2.0.4 to 11.2.0.4 [Release 11.2]

Linux x86-64

usr/bin/ld: /u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib//libnmectl.a(nmectlt.o): undefined reference to symbol ‘B_DestroyKeyObject’

/usr/bin/ld: note: ‘B_DestroyKeyObject’ is defined in DSO /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnnz11.so so try adding it to the linker command line

 /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnnz11.so: could not read symbols: Invalid operation

 collect2: error: ld returne

 INFO: d 1 exit status

原因:

未公开的bug 19692824

解决方法:

01) 忽略 Oracle 11.2.0.4安装过程中的 undefined symbol error 错误并继续安装,软件安装过程将会在没有错误的情况下成功结束

02) 下载并安装patch 19692824

03) 为11.2.0.4的HOME设置诸如ORACLE_HOME, PATH等等的环境变量,并使用下面的命令来重新编译失败的target

$ make -f $ORACLE_HOME/sysman/lib/ins_emagent.mk agent nmhs

安装RAC的概要信息 

开始安装,会自动复制到其他节点

 进度条安装到 %86时出现报错   Error in invoking target 'agent nmhs' of makefile

解决方法:

在makefile中添加链接libnnz11库的参数
修改$ORACLE_HOME/sysman/lib/ins_emagent.mk,将
$(MK_EMAGENT_NMECTL)修改为:$(MK_EMAGENT_NMECTL) -lnnz11
建议修改前备份原始文件
[oracle@oracle1 ~]$ cd $ORACLE_HOME/sysman/lib
[oracle@oracle1 lib]$ cp ins_emagent.mk ins_emagent.mk.bak
[oracle@oracle1 lib]$ vi ins_emagent.mk

进入vi编辑器后  命令模式输入/NMECTL 进行查找,快速定位要修改的行
在后面追加参数-lnnz11      第一个是字母l   后面两个是数字1

保存退出后Retry

安装完,在每个节点用root用户执行脚本  

 

 /u01/app/oracle/product/11.2.0/db_1/root.sh

 安装完成,close 

至此在RAC双节点上完成oracle软件安装,安装日志在 

4.创建集群数据库 

在节点oracle1上用oracle用户执行dbca创建RAC数据库

[root@oracle1 ~]# su - oracle
[oracle@oracle1 ~]$ dbca

选择创建数据库 

 选择自定义数据库(也可以是通用)

 配置类型选择Admin-Managed,输入全局数据库名orcl,每个节点实例SID前缀为orcl,选择双节点

选择默认,配置OEM,启用数据库自动维护任务  

统一设置sys,system,dbsnmp,sysman用户的密码为oracle

 使用ASM存储,使用OMF(oracle的自动管理文件),数据区选择之前创建的DATA磁盘组  

设置ASM密码为oracle 

 指定数据闪回区,选择之前创建好的FRA磁盘组,不开归档 

 组件选择

 选择字符集AL32UTF8

选择默认的数据存储信息

 开始创建数据库,勾选生成数据库的脚本

 数据库的概要信息

 生成脚本

 开始安装组件

 完成数据库安装

给grid用户相关权限:

[root@oracle1 ~]# chown -R grid:oinstall /u01/app/11.2.0/grid/bin

[root@oracle1 ~]# chmod 755 /u01/app/11.2.0/grid/bin/*

[root@oracle2 ~]# chown -R grid:oinstall /u01/app/11.2.0/grid/bin

[root@oracle2 ~]# chmod 755 /u01/app/11.2.0/grid/bin/*

5.RAC维护

1.查看服务状态

忽略gsd问题

[root@oracle1 ~]# su - grid

[grid@oracle1 ~]$ crs_stat -t

检查集群运行状态

[grid@oracle2 ~]$ srvctl status database -d orcl

实例 orcl1 正在节点 oracle1 上运行

实例 orcl2 正在节点 oracle2 上运行

2.检查CRS状态

检查本地节点的CRS状态

[grid@oracle1 ~]$ crsctl check crs

CRS-4638: Oracle High Availability Services is online

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

[grid@oracle1 ~]$

检查集群的CRS状态

[grid@oracle1 ~]$ crsctl check cluster

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

3.查看集群中节点配置信息

[grid@oracle1 ~]$ olsnodes

oracle1

oracle2

[grid@oracle1 ~]$ olsnodes -n

oracle1 1

oracle2 2

[grid@oracle1 ~]$ olsnodes -n -i -s -t

oracle1 1 oracle1-vip Active Unpinned

oracle2 2 oracle2-vip Active Unpinned

4.查看集群件的表决磁盘信息

[grid@oracle1 ~]$ crsctl query css votedisk

##  STATE    File Universal Id                File Name Disk group

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

 1. ONLINE   19da16b11b444f43bfc5ce4e306f75fa (/dev/raw/raw1) [OCR]

Located 1 voting disk(s).

5.查看集群SCAN VIP信息

[grid@oracle2 ~]$ srvctl config scan

SCAN 名称: scan-ip, 网络: 1/192.168.10.0/255.255.255.0/eth0

SCAN VIP 名称: scan1, IP: /scan-ip/192.168.10.200

查看集群SCAN Listener信息

[grid@oracle1 ~]$ srvctl config scan_listener

SCAN 监听程序 LISTENER_SCAN1 已存在。端口: TCP:1521

6.启、停集群数据库

------关闭RAC数据库-----

1.关闭监听(grid用户),阻止新的程序在连接进来

srvctl stop listener

2.写脏块

alter system checkpoint;(多执行几次)

3.关闭数据库(grid用户下) orcl指的是数据库全局唯一名。执行时间会较长,不要终止

srvctl stop database -d orcl -o immediate

4.关闭集群件(root用户)

/u01/app/11.2.0/grid/bin/crsctl stop cluster -all

/u01/app/11.2.0/grid/bin/crsctl stop crs

注意:

(1)crsctl start/stop crs是对当前节点的相关资源进行操作的,是可以停止ohas的

(2)crsctl start/stop cluster可对集群的所有节点的相关资源进行操作的,前提是目标节点ohas必需是OK的,无法停止ohas

可以通过 crsctl enable/disable has 来控制has的是否随OS的启动而启动。类似crs 也有 crsctl enable/disable crs

检查本地节点的CRS状态

crsctl check crs

检查集群的CRS状态

crsctl check cluster

5.查看资源状态

crsctl status resource -t

6.关闭操作系统(root)

 shutdown -h now

7.停止RAC日志收集和分析工具TFA

/u01/app/11.2.0/grid/tfa/oracle1/tfa_home/bin/tfactl stop

/u01/app/11.2.0/grid/tfa/oracle2/tfa_home/bin/tfactl stop

-----------启动RAC数据库-----

1.默认情况下,集群软件会随着操作系统的启动而启动(grid)。

检查集群资源:crsctl status resource -t   --所有都需要是online状态

启动集群资源:crsctl start cluster -all

2.启动数据库(grid)

srvctl start database -d orcl

3.查看监听状态。默认情况下监听会随着集群软件启动(grid)。

srvctl status listener   --查看监听状态

srvctl start listener    --启动监听

4.登录plsql进行连接测试。

6.EM管理

oracle用户下执行

[oracle@oracle1 ~]$ emctl status dbconsole

[oracle@oracle1 ~]$ emctl start dbconsole

[oracle@oracle1 ~]$ emctl stop dbconsole

关闭OEM自启动(所有启动的节点都执行即可)

[root@oracle1 ~]# vi /etc/init.d/gcstartup

# chkconfig: 2345 95 20
# description: Some description
# What your script does (not sure if this is necessary though)
# processname: gcstartup

[root@oracle1 ~]# chmod 755 /etc/init.d/gcstartup

[root@oracle1 ~]# chkconfig --add gcstartup

[root@oracle1 ~]# chkconfig gcstartup --list

gcstartup       0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭[root@oracle1 ~]# chkconfig gcstartup off

[root@oracle1 ~]# chkconfig gcstartup --list

gcstartup       0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭

7.本地sqlplus连接

windows中安装oracle客户端版 
修改tsnames.ora 
D:\develop\app\orcl\product\11.2.0\client_1\network\admin\tsnames.ora 
添加

RAC_ORCL =

    (DESCRIPTION =

      (ADDRESS_LIST =

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

      )

      (CONNECT_DATA =

        (SERVER = DEDICATED)

        (SERVICE_NAME = orcl)

      )

)

这里的HOST写的是scan-ip

C:\Users\sxtcx>sqlplus sys/oracle@RAC_ORCL as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期四 4月 14 14:37:30 2016

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

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Testing options

SQL> select instance_name, status from v$instance;

INSTANCE_NAME                    STATUS

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

orcl1                            OPEN

当开启第二个命令行窗口连接时,发现实例名为orcl2,可以看出,scan-ip的加入可以具有负载均衡的作用。

注意:登录的时候使用AS SYSDBA容易报错用户名/密码错误

1.Oracle11gR2 RAC 使用scan IP无法连接数据库(ORA-12545)问题解决

原因:

metalink说明:Client is able to resolve all Fully Qualified Domain Name (FQDN) SCAN and VIP name but not short ones(without domain name) as its in different domain;

even though FQDN names were specified during Grid Infrastructure setup, due to bug 9150053 by default DBCA set database parameter local_listener to short node VIP name

while database is created.

因此只要把数据库实例参数local_listener内的host改为vip的IP地址即可

解决办法:

rac1:

SQL> show parameter local_listener

NAME                     TYPE     VALUE

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

local_listener                 string     (DESCRIPTION=(ADDRESS_LIST=(AD

                         DRESS=(PROTOCOL=TCP)(HOST=rac1

                         -vip)(PORT=1521))))

SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.10.220)(PORT=1521))))' scope=both sid='orcl1';

SQL> alter system register;

rac2:

SQL> show parameter local_listener

NAME                     TYPE     VALUE

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

local_listener                 string     (DESCRIPTION=(ADDRESS_LIST=(AD

                         DRESS=(PROTOCOL=TCP)(HOST=rac2

                         -vip)(PORT=1521))))

SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.10.221)(PORT=1521))))' scope=both sid='orcl2';

SQL> alter system register;

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

保定公民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值