vSphere EXSi + CentOS 7.4 静默安装 Oracle RAC (11gR2)
安装之前,先总结一下安装Oracle RAC的注意事项:
如果是在vSphere EXSi环境中搭建虚机Oracle RAC需要注意:
虚拟机配置RAC,如果不是挂裸盘RDM(裸磁盘映射)的话,按以下步骤进行,不影响VMotion 的功能,但是影响Storage VMotion 的功能。在数据库系统云化实施中,对Oracle RAC要求部署在虚拟机中的场景,可以参考下面方式进行:
要点:
* 各节点均采用单独的pvscsi控制器,SCSI总线共享配置参数选择"物理"
* 添加厚制备置零磁盘置备模式的硬盘,且各节点SCSI ID要保持一致
* 每个节点双网卡或多网卡,用vmxnet3
* 如果有对VM做快照的需求,设置磁盘为独立磁盘才不会对数据盘有影响
* 为每个磁盘添加multi-wirter标记
* 每个RAC节点都做操作一遍,不同的是第一个节点是创建磁盘,而其他节点是挂载已有的磁盘
* 如果使用了DRS,可以设置DRS关联规则,让RAC节点不要同时位于单个主机上
具体操作步骤可参考后面的ESxi共享存储配置章节。
安装Oracle RAC大概步骤有三个:安装clusterware、安装Oracle和RAC、在RAC下创建数据库。其中安装clusterware最容易出错,下面几点要特别注意:
* 公共网络(Public Network)必须使用各个节点的同一个网卡
* 每个节点需要一个VIP,VIP必须和公共网络(Public Network)在一个子网中
* 如果Oracle RAC需要对外提供服务而不只是对局域网内提供服务,那么公共网络不能配置成内网地址、应该用外网地址
* 有些系统中(如Solaris),需要给VIP指定默认网关
* 硬盘分区时,要确保在所有节点上都能看到分区信息
* 要为OCR设备和VOTE设备指定正确的权限和属主
* OCR/VOTE放置于不同的LUN是为了提高保护,也可以放一份
* Oracle 11gR2开始,Vote Disk信息存储在OCR中了,只需要规划OCR磁盘、不需要单独规划VOTE磁盘了。如要分开就指定不同的asm group。
* 要为Public-IP、VIP、Scan-IP、Private-IP指定主机名(配置DNS或修改/etc/hosts),主机名中不能包含大写字母和下划线“_”,但支持中横线“-”
* Public-IP、VIP、Scan-IP要在同一个网段,VIP和Scan-IP可以随便设置但不能相同
* Public-IP和Private-IP一定要是自己虚拟机的IP,最好是将IP设置成静态IP
* 如果配置失败,重新配置,需要把之前的配置结果全部删除
* 在安装clusterware时,需要设置环境变量ORACLE_HOME,在安装Oracle和RAC时,需要重新指定这个变量,而且不能指定为同一个目录
* 正确配置节点间的信任关系
* RAC要求各节点的oracle账户、grid账户以及相应的组的id是必须相同的,创建的时候建议制定用户id和组id
其他注意事项:
* 主机名(hostname)必须和public名保持一致
* 安装完成后,hostname就不能修改了。这会涉及修改grid参数、重建grid用户互信等其他很多操作,官方的说法是如果安装完成后再修改hostname,只能先删除节点->修改Hostname->再重新添加节点
* Swap空间不够可能安装时也会报错,因此提前按照官方建议准备好Swap空间。如何分配和创建Swap,我的另外一篇有详细介绍《Centos7 安装 Oracle11g》https://blog.csdn.net/sunny05296/article/details/56840775
* 静默安装时,Oracle 11R2新增加了SCAN IP这一选项,官方文档建议必须为SCAN IP设置DNS服务器做域名解析。而在实际没有配置DNS服务器或配置了无权修改,只能添加/etc/hosts。如果图形安装是可以忽略错误继续,但静默安装必须加忽略参数,否则报错无法继续
* 静默安装时,应答文件中的配置参数: privateInterconnects 应该配置网段地址、而不是主机地址,配错安装会失败:[INS-40925]
*
通过/etc/hosts设置只能设置一个SCAN IP,无法实现轮训负载均衡。ORALCE官方文档说SCAN IP在DNS上需要解析成三个IP地址,单很多人也都只配置1个SCAN IP。
hosts文件不能将一个name对应到多个IP上,因此无法实现IP的轮询,如果要IP轮训,必须配置DNS服务器。
SCAN最明显的优点就是,当集群中新增加了节点或者删除了节点,不需要额外维护客户端。
网上说如果配置/etc/hosts scan ip可以忽略该错误,但只能在图形化安装时忽略,静默安装报错无法继续。
1.规划
环境:
VMware ESXi6.0 + Centos7.4_x86-64(4Core/8G/100G)*2个虚机
软件:
linux.x64_11gR2_database_1of2.zip //Oracle Database 11g Release 2 (11.2.0.1.0) for Linux x86-64, (1,239,269,270 bytes) (cksum - 3152418844)
linux.x64_11gR2_database_2of2.zip //(1,111,416,131 bytes) (cksum - 3669256139)
linux.x64_11gR2_grid.zip //Oracle Grid Infrastructure 11g Release 2 (11.2.0.1.0) for Linux x86-64, (1,052,897,657 bytes) (cksum - 3369676398)
官方各个Oracle版本的软件下载路径:https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
hostname规划:
rac1、rac2(节点1:hostnamectl set-hostname rac1,节点2:hostnamectl set-hostname rac1)
IP和RAC节点规划:
2个节点的Oracle RAC 11gR2,需要7个IP:
# for Oracle RAC
192.168.235.60 rac1 #rac1 Public-IP Public-Name
192.168.235.61 rac2 #rac2 Public-IP public-Name
192.168.235.62 rac1vip #rac1 VIP VIP-Name
192.168.235.63 rac2vip #rac2 VIP VIP-Name
192.168.235.64 racscan #Scan IP Scan-Name
10.0.0.1 rac1priv #rac1 Priate-IP Private-Name
10.0.0.2 rac2priv #rac2 Priate-IP Private-Name
磁盘组规划:
用途 ASM卷组名 磁盘大小*个数 总大小 冗余方式 ASM磁盘组
OCR&VOTE +OCR 4G * 3 12G normal ASMOCR01,ASMOCR02,ASMOCR03
归档文件 +ARCH 500G * 1 500G exteranl ASMARCH01
数据文件 +DATA 1T * 2 2T exteranl ASMDATA01,ASMDATA02
注意:Oracle 11gR2开始,Vote Disk信息存储在OCR中了,只需要规划OCR磁盘、不需要单独规划VOTE磁盘了。
说明:
OCR:Oracle Cluster Register(Oracle集群注册),用于维护整个集群的配置信息,包括RAC以及Clusterware资源,包括的信息有节点成员、数据库、实例、服务、监听器、应用程序等。
整个集群会有一份配置OCR,最多两分OCR(primary OCR & mirror OCR,互为镜像,以防OCR的单点故障)。
Oracle会把集群的配置文件放在共享存储上叫做OCR Disk,节点通过OCR Process读写OCR。但只有一个节点(OCR Master节点)能够读写OCR Disk,其它节点通过本节点的OCR process向Master节点的OCR process提交请求,由Master OCR Process完成物理读写,并同步所有节点OCR cache中的内容。
安装Clusterware的在选择OCR的存储位置时,如果选择"Normal Redundancy",则会存储两份相互镜像的OCR。如果选择"External Redundancy"则表明存储本身已经做了冗余配置,不需要创建mirror OCR。该位置会记录在/etc/oracle/ocr.loc(Linux)中。
注意:由于OCR的信息很重要,他是整个集群的首脑,Oracle会每4小时队其做一次备份,并且保留最后的3个备份,以及前一天、前一周的最后一个备份。这个备份由Master节点的CRSD进程完成,备份的默认位置为$CRS_HOME/crs/cdata/
建议OCR要多存储几份。
Oracle RAC OCR 磁盘所需空间计算方法:
total = [2 * ausize * disks] + [redundancy * (ausize * (all_client_instances + nodes + disks + 32) + (64 * nodes) + clients + 543)]
redundancy = Number of mirrors: external = 1, normal = 2, high = 3, flex = 3.
ausize = Metadata AU size in megabytes
all_client_instance = Sum of all database clients
nodes = Number of nodes in cluster.
clients - Number of database instances for each node.
disks - Number of disks in disk group.
For example:
for a four-node Oracle RAC installation, using three disks in a normal redundancy disk group, you require an additional 5293 MB of
space: [2 * 4 * 3] + [2 * (4 * (4 * (4 + 1)+ 30)+ (64 * 4)+ 533)] = 5293 MB
一般节点数不多安装的时候,OCR+VOTE分配10G也就够了,不用精确计算。
VOTE:Oracle Clusterware由2部分组成,分别是Voting Disk和 OCR。Voting Disk里面记录着节点成员的信息(包括节点信息以及节点的增删等信息)。
Voting Disk主要为了在出现故障时,决定那个Partion获得控制权,其他的Partion必须从集群中剔除。
为了保证Voting Disk的安全,需要配置多个Voting Disk,Voting Disk使用的是一种“多数可用算法”。
当有多个Voting Disk时,则必须一半以上的Vote Disk同时使用,Clusterware才能正常使用。
例如如果配置了4个Vote Disk,坏1个Vote Disk,集群仍然可以正常工作。但如果坏了2个,则不能满足半数以上,集群会立即宕掉,所有节点立即重启。
因此:添加Votedisk,尽量不要只添加1个,而应该添加3个。官方建议Voting Disk的个数应该为奇数个,如:1、3、5个,每个Voting Disk的大小约为20MB。
查看Voting Disk命令: crsctl query css votedisk
注意:
1)对Voting Disk的更改必须用root用户来操作,添加/删除Voting Disk都必须在crs资源关闭的情况下进行,同时即使在CRS关闭情况下,操作时仍然需要使用-force参数
2)从Oracle 11gR2开始,Vote Disk信息存储在OCR中了
3)Oracle 11gR2默认情况下,Oracle备份OCR时会自动一起备份Voting Disk,不需要单独备份
ARCH:用于存储归档文件,空间的划分满足每天的归档量即可。
DATA:用于存储数据。
3.ESxi共享存储配置
3.1)添加共享磁盘
step1)在ESXi中的一个虚机(rac1)关机情况下新增磁盘:
OCR+VOTE: 4G *3个
ARCH: 500G *1个
DATA: 1T *2个
编辑虚拟机设置->硬件->添加硬盘,配置参数如下:
1)添加磁盘时,rac1上创建新的虚拟磁盘(rac2添加磁盘的时候就使用现有虚拟磁盘、不需要重新创建)
2)添加的磁盘置备模式必须设置为厚置备置零模式
3)虚拟设备节点:SCSI(1:0)~SCSI(1:N)
4)位置:与虚拟机存储在同一目录中
5)虚拟设备节点:选择新的虚拟设备节点,并且保证,节点2与节点1共享磁盘选择的scsi设备一致。此处rac1上创建时选择scsi(1:0)~scsi(1:5)
6)模式:建议不要勾选独立。因为NBU在VMWare手册中已经明确写不支持独立vmdk的虚拟机备份工作。但要注意,非独立模式,对VM做快照恢复时会影响数据盘,如果有快照需求且不能影响数据盘则要使用独立模式
用上面同样的配置完成所有磁盘的添加。
step2)磁盘添加完后会自动新增SCSI 1控制器(原来只有SCSI 0控制器),修改总线共享方式:“无”==>“虚拟"(这里有两个选项:物理/虚拟,我改成了虚拟)
虚拟:虚拟磁盘可以在同一服务器上的虚拟机之间共享
物理:虚拟磁盘可以在任何服务器上的虚拟机之间共享
step3)在ESXi的节点2虚机(rac2)关机情况下新增所有磁盘,选择rac1上已添加过的虚拟磁盘而不是新建(scsi编号要保持一致)
添加时,磁盘文件路径选择定位到rac1节点对应的vmdk文件,SCSI编号和rac1的编号保持一致,模式勾选独立、持久
step4)rac2也需要将SCSI 1控制器参数进行修改,修改总线共享方式默认“无”(改为虚拟/物理)。
如果rac2遗漏修改,会导致标记multi-writer标记最终导致第二台虚机启动报错找不到磁盘。
step5)对于节点1和节点2添加的磁盘标记。选择添加的磁盘,编辑虚拟机设置->选项--高级--常规--参数配置,末尾添加行,设置每个磁盘的multi-writer标记
名称 值
scsi1:0.sharing multi-wirter
scsi1:1.sharing multi-wirter
scsi1:2.sharing multi-wirter
scsi1:3.sharing multi-wirter
scsi1:4.sharing multi-wirter
scsi1:5.sharing multi-wirter
设置磁盘标记还有一种方法,直接修改磁盘的vmx文件:
scsi1:0.sharing = "multi-writer"
scsi1:1.sharing = "multi-writer"
scsi1:2.sharing = "multi-writer"
scsi1:3.sharing = "multi-writer"
scsi1:4.sharing = "multi-writer"
scsi1:5.sharing = "multi-writer"
注意:
1.所有节点、所有添加的磁盘都要设置multi-wirter
2.所有节点自动新增SCSI 1控制器的总线共享方式一定要修改、如果不修改默认为“无”,会导致一个节点能启动、其他节点启动时报获取磁盘失败的错误、会重置清空multi-writer标记
3.启用了multi-writer参数做的共享磁盘(启用multi-writer参数的原因是在使用vmdk格式磁盘做共享磁盘时,需要启用该参数),但结合VMware KB(1034165),启用了multi-writer参数后,以下的功能将不受支持:
不支持快照功能Most snapshots and any other action which utilizes snapshots
不支持虚拟化备份软件,因为基于虚拟化备份需要依赖快照功能和 vstorage API
不支持对虚拟机的克隆
不支持vsphere replication
不支持 storage vmotion
不支持基于Change Block Tracking (CBT) 的备份
不支持Suspending 挂起暂停虚拟机。
不支持在线扩展虚拟磁盘
step6)如果使用了DRS,则RAC虚机节点建议放在不同的主机上,所以需要配置DRS。如果没有使用DRS,则可以跳过该步骤。
集群编辑->规则->新建,类型选择"单独的虚拟机",选定虚机。
最后:共享磁盘添加完毕后,开机,在所有RAC节点上检查一下,应该都能看到磁盘:
rac1 & rac2上执行命令
# fdisk -l
都可查看到添加的磁盘
[root@rac1 ~]# ls -1 /dev/sd*
/dev/sda
/dev/sda1
/dev/sda2
/dev/sdb
/dev/sdc
/dev/sdd
/dev/sde
/dev/sdf
/dev/sdg
[root@rac1 ~]# fdisk -l |grep sd[bcdefg]
Disk /dev/sdc: 4294 MB, 4294967296 bytes, 8388608 sectors
Disk /dev/sdd: 4294 MB, 4294967296 bytes, 8388608 sectors
......
3.2)对共享磁盘进行分区(只需要一个节点操作)
rac1上用root用户操作:
查看磁盘设备
ls -1 /dev/sd*
fdisk -l |grep sd[bcdefg]
磁盘分区(只需要在一个节点上分区)
# fdisk /dev/sdb
n 创建新分区
p 创建主分区,另有e键是扩展分区
1 分区数字默认从1开始,即sdb1,sdc1等
回车 分区默认从第2048个柱面开始
回车 结束柱面选择默认,即全部柱面只分在一个区
w 保存,将操作写入分区表
再依次对剩下的进行分区操作:
# fdisk /dev/sdc
# fdisk /dev/sdd
# fdisk /dev/sde
# fdisk /dev/sdf
# fdisk /dev/sdg
查看分区后的结果:
[root@rac1 ~]# fdisk -l |grep -e sd[bcdefg]1 |sort
/dev/sdb1 2048 8388607 4193280 83 Linux
/dev/sdc1 2048 8388607 4193280 83 Linux
/dev/sdd1 2048 8388607 4193280 83 Linux
/dev/sde1 2048 1048575999 524286976 83 Linux
/dev/sdf1 2048 2147483647 1073740800 83 Linux
/dev/sdg1 2048 2147483647 1073740800 83 Linux
在rac1上对磁盘进行分区后,rac2就不需要再分区了。
rac2上直接查看磁盘:
[root@rac2 ~]# fdisk -l |grep -e sd[bcdefg]1 |sort
/dev/sdb1 2048 8388607 4193280 83 Linux
/dev/sdc1 2048 8388607 4193280 83 Linux
/dev/sdd1 2048 8388607 4193280 83 Linux
/dev/sde1 2048 1048575999 524286976 83 Linux
/dev/sdf1 2048 2147483647 1073740800 83 Linux
/dev/sdg1 2048 2147483647 1073740800 83 Linux
[root@rac2 ~]#
4.关闭防火墙(所有节点上操作)
# systemctl stop firewalld
# systemctl disable firewalld
# systemctl status firewalld
# vim /etc/selinux/config
设置:SELINUX=disabled
立即生效
# setenforce 0
5.设置所有RAC节点之间的时钟同步
方法1)rac1上开启NTP Server、其他rac节点与rac1进行时钟同步
NTP时钟同步的方法,参考:《Centos7 NTP时钟同步配置》https://blog.csdn.net/sunny05296/article/details/65980897/
配置好了以后,自动同步会比较慢,先执行一次立即和NTP Server同步:
# ntpdate -u ntpServerIP
ntp配置完以后,可能需要一段时间才能进行首次同步,可以通过 ntpstat 查看:
# ntpstat
synchronised to NTP server (x.x.x.x) at stratum 4
time correct to within 38 ms
polling server every 128 s
这里遇到了一个坑,定位浪费我好长时间:
ntp时钟同步以后总是时间莫名自动改掉,而且NTP Client和NTP Server配置也正确,ntpdate -u 192.168.235.60、ntpdate -d 192.168.235.60、timedatectl 显示也都正常
但就是 ntpq -p 查询并没有使用NTP Server,而且ntpstat查看总是显示unsynchronised
# ntpstat
unsynchronised
time server re-starting
polling server every 8 s
即使我手动date修改时间以后,也会被自动改掉、时间也不是NTP Server同步来的。
最终排查定位的结果是:我ESXi虚机上启用了虚机和ESXi宿主机时钟同步导致的,之前尝试过使用方案2配置时钟同步,忘了关闭这个配置了。
方法2)只介绍一下、我最终没有使用方法2。
本来是考虑直接设置虚机和ESXi主机之间时钟同步,我刚开始给ESXi宿主机配置NTP服务,自动与时间服务器同步时间,然后再在虚机上安装VMWare Tools,并设置虚机勾选同步客户机时间和主机时间。
ESXi client配置:配置->软件.时间配置->属性->选项,
常规:启动策略配置为与主机一起启动和停止
NTP设置:添加中国的NTP域名“cn.ntp.org.cn”
勾选重启NTP服务以应用更改
设置成功后,结果发现我的ESXi宿主机系统时区是UTC、而虚机节点rac1、rac2的系统时区是CST,时区不一致,导致两者时间显示相差8小时。
官方说ESXi默认UTC时区、而且不支持修改时区。虽然网上有介绍其他方式,我这里就不折腾了,最终没有采用该方案。
ESXi相关SSH命令行修改系统时间的命令(也可以直接在vsphere ESXi client上进行时间配置,不一定非要命令行操作)
ESXi开启SSH服务方法:
ESXi客户端连接以后,配置-安全配置文件-服务-属性,打开服务属性对话框,选择SSH服务,打开选项对话框,启动。
查看ESXi系统时间:
# esxcli system time get
查看ESXi主机主板上的时间:
# esxcli hardware clock get
设置ESXi系统时间(ESXi主机是不能用date命令来设置时间的,需要使用esxcli命令设置,该命令会自从同步系统时间到ESXi主机主板硬件时钟):
# esxcli system time set -y 2020 -M 07 -d 29 -H 13 -m 17 -s 59
查看修改后的ESXi系统时间:
# esxcli system time get
# esxcli hardware clock get
配置好NTP时钟同步后,date查看一下所有RAC节点的时钟是否同步完成。
6.配置主机名(hostname)&RAC节点名称&私有网卡
rac1设置主机名:
# hostnamectl set-hostname rac1
rac2设置主机名:
# hostnamectl set-hostname rac2
rac1和rac2上修改/etc/hosts文件
# vim /etc/hosts #添加内容如下(rac1和rac2 的 /etc/hosts 添加相同的内容)
# for Oracle RAC
192.168.235.60 rac1 #rac1 public ip
192.168.235.61 rac2 #rac2 public ip
192.168.235.62 rac1vip #rac1 vip
192.168.235.63 rac2vip #rac2 vip
192.168.235.64 racscan #scan ip
10.0.0.1 rac1priv #rac1 private ip
10.0.0.2 rac2priv #rac2 private ip
添加虚拟机网卡(最初我使用1块网卡,通过系统多IP绑定的方式,后面考虑Oracle处理可能有问题,而更换了后面的方法)
rac1上添加虚拟Private-IP网卡
永久生效在网卡上绑定Private-IP(如果只是临时生效只需要执行:ifconfig ens160:0 10.0.0.1/24,但我们需要永久生效):
# echo "
#nic ens160:0
TYPE=Ethernet
NAME=ens160:0
DEVICE=ens160:0
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.0.0.1
PREFIX=24
" > /etc/sysconfig/network-scripts/ifcfg-ens160:0
重启网卡:
# service network restart
# ifconfig 查看增加了一个 ens160:0
ens160: xxxxxx
ens160:0: flags=4163
inet 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255
ether 00:0c:29:72:12:ba txqueuelen 1000 (Ethernet)
rac2上添加虚拟Private-IP网卡:
# echo "
#nic ens160:0
TYPE=Ethernet
NAME=ens160:0
DEVICE=ens160:0
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.0.0.2
PREFIX=24
" > /etc/sysconfig/network-scripts/ifcfg-ens160:0
# service network restart
# ifconfig
ens160: xxxxxx
ens160:0: flags=4163
inet 10.0.0.2 netmask 255.255.255.0 broadcast 10.0.0.255
ether 00:0c:29:ed:a7:c9 txqueuelen 1000 (Ethernet)
添加网卡
后面我在配置静默安装grid的应答文件参数时,注意到 privateInterconnects 参数配置可能会和ens160:0网卡名命名冲突、冒号有可能会导致Oracle解析出问题:
oracle.install.crs.config.privateInterconnects=ens160:192.168.208.0:1,ens160:0:10.0.0.0:2
所以,这里我换一种方式来配置Private-IP网卡,还是老老实实在虚机上,再添加一块网卡作为Private-IP网卡设备,步骤如下:
先删掉之前的配置:
rm -rf /etc/sysconfig/network-scripts/ifcfg-ens160:0
ESXi客户端上添加:编辑虚拟机设置->硬件.添加->添加以太网适配器(我只接了1个物理网卡,添加的网卡适配器类型和原来的网卡保持一致,我的是"VMXNET 3")
添加完毕后,CentOS系统中ifconfig可以看到新增了一个网卡设备ens192,这样我就有两个网卡:ens160, ens192了。
添加后没有自动生成网卡配置文件,手动添加修改配置文件:
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens160 ifcfg-ens192
vim ifcfg-ens192
修改 NAME, DEVICE, IP
注释掉 UUID, GATEWAY, DNS
重启网卡服务
service network restart
其他节点也同样处理。
rac1和rac2的private互通确认,通过ping检查一下。
重启rac1和rac2虚机,然后再确认一下添加的ens160:0仍然存在。
检查网络通信是否正常
rac1和rac2上都测试一下:
ping -c 2 rac1
ping -c 2 rac2
ping -c 2 rac1priv
ping -c 2 rac2priv
7.进行Oracle安装的相关准备工作
7.1 Swap检查(所有节点上操作)
官方给出的配置
内存大小 Swap大小
2.5G~32G 等同内存大小
32G以上 32G
有我的内存8G,所以Swap也分配8G。如果不足,需要创建。如果已满足,则跳过。
查看内存和Swap(也可应free -h查看)
grep SwapTotal /proc/meminfo
grep MemTotal /proc/meminfo
我的Swap只有2G,大小不够,需要设置更大的Swap,root执行的命令如下:
dd if=/dev/zero of=/myswapfile bs=1M count=8192 #由于我内存8G,所以创建8G Swapfile
mkswap /myswapfile #指定作为交换区的文件
swapon /myswapfile #激活交换区文件
echo "/myswapfile swap swap defaults 0 0" >> /etc/fstab #设置开机时启用swap
swapon -s #确认swap已经被使用,另外在/目录可以看到文件swapfile
free -h #如果原来Swap分配的有,显示的值会叠加
reboot #重启虚机,确认重启后Swap大小正常
说明:关于创建Swap的详细介绍,可以参考《Centos7 安装 Oracle11g》https://blog.csdn.net/sunny05296/article/details/56840775
7.2 /tmp检查(所有节点上操作)
# df -h /tmp
官方要求至少剩余空间要大于1G
7.3 修改系统版本,绕过系统检查(所有节点上操作)
由于我是Centos7系统,需要修改系统信息,绕过Oracle安装版本检查
# vim /etc/centos-release
将原来的内容: CentOS Linux release 7.4.1708 (Core)
将内容改为:redhat-7
7.4 创建组&用户&目录(所有rac节点都要执行)
注意:RAC要求各节点的oracle账户、grid账户以及相应的组的id是必须相同的(创建后可查看/etc/passwd和/etc/group)
root执行下面命令:
groupadd -g 1000 oinstall
groupadd -g 1020 asmadmin
groupadd -g 1021 asmdba
groupadd -g 1022 asmoper
groupadd -g 1031 dba
groupadd -g 1032 oper
useradd -m -u 1100 -g oinstall -G asmdba,dba,asmadmin,asmoper grid
useradd -m -u 1101 -g oinstall -G dba,oper,asmdba oracle
mkdir -p /u01/app/grid #grid user $ORACLE_BASE
mkdir -p /u01/app/11.2.0/grid #grid user $ORACLE_HOME
chown -R grid:oinstall /u01
mkdir -p /u01/app/oracle #Oracle数据库安装目录, oracle user $ORACLE_BASE; $ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
mkdir -p /u01/app/oraInventory #Oracle数据库配置文件目录
mkdir -p /u01/app/database #Oracle数据库软件包解压目录
chown oracle:oinstall /u01/app/oracle
chown oracle:oinstall /u01/app/oraInventory
chown oracle:oinstall /u01/app/database
chmod -R 775 /u01/
修改用户密码
passwd oracle
passwd grid
关于Oracle Grid安装的目录创建,官方的原始说明如下:
Creating the Oracle Base Directory Path
The Oracle base directory for the grid installation owner is the location where diagnostic and administrative logs, and other logs associated with Oracle ASM and Oracle Clusterware are stored.
If you have created a path for the Oracle Clusterware home that is compliant with Oracle Optimal Flexible Architecture (OFA) guidelines for Oracle software paths then you do not need to create an Oracle base directory. When OUI finds an OFA-compliant path, it creates the Oracle base directory in that path.
For OUI to recognize the path as an Oracle software path, it must be in the form u[00-99]/app, and it must be writable by any member of the oraInventory (oinstall) group. The OFA path for the Oracle base is /u01/app/user, where user is the name of the software installation owner.
Oracle recommends that you create an Oracle Grid Infrastructure Grid home and Oracle base homes manually, particularly if you have separate Oracle Grid Infrastructure for a cluster and Oracle Database software owners, so that you can separate log files.
For example:
### mkdir -p /u01/app/11.2.0/grid
### mkdir -p /u01/app/grid
### mkdir -p /u01/app/oracle
### chown grid:oinstall /u01/app/11.2.0/grid
### chown grid:oinstall /u01/app/grid
### chown oracle:oinstall /u01/app/oracle
### chmod -R 775 /u01/
### chown -R grid:oinstall /u01
7.5 添加环境变量
所有rac节点上添加环境变量
修改grid和oracle用户的.bash_profile
修改root用户的/etc/profile
rac1添加环境变量:
# vi /home/grid/.bash_profile
umask 022
export ORACLE_SID=+ASM1
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export TNS_ADMIN=$ORACLE_HOME/network/admin
#export NLS_LANG=AMERICAN_AMERICA.zhs16gbk
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export ORA_NLS10=$ORACLE_HOME/nls/data
export ORACLE_TERM=xterm
export EDITOR=vi
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
vi /home/oracle/.bash_profile
umask 022
export ORACLE_SID=orcl1
# ORACLE_UNQNAME是11gR2新出现的
#export ORACLE_UNQNAME=orcl
export ORACLE_BASE=/u01/app/oracle
#export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export TNS_ADMIN=$ORACLE_HOME/network/admin
#export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export GRID_HOME=/u01/app/11.2.0/grid
export ORA_NLS10=$GRID_HOME/nls/data
export ORACLE_TERM=xterm
export EDITOR=vi
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
rac2
vi /home/grid/.bash_profile
umask 022
export ORACLE_SID=+ASM2
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export TNS_ADMIN=$ORACLE_HOME/network/admin
#export NLS_LANG=AMERICAN_AMERICA.zhs16gbk
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export ORA_NLS10=$ORACLE_HOME/nls/data
export ORACLE_TERM=xterm
export EDITOR=vi
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
vi /home/oracle/.bash_profile
umask 022
export ORACLE_SID=orcl2
# ORACLE_UNQNAME是11gR2新出现的
#export ORACLE_UNQNAME=orcl
export ORACLE_BASE=/u01/app/oracle
#export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export TNS_ADMIN=$ORACLE_HOME/network/admin
#export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export GRID_HOME=/u01/app/11.2.0/grid
export ORA_NLS10=$GRID_HOME/nls/data
export ORACLE_TERM=xterm
export EDITOR=vi
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
rac1 & rac2:
#用于root用户操作 crsctl 命令,如果不加操作时需要cd到对应目录下才能执行
export GRID_HOME=/u01/app/11.2.0/grid
export PATH=$PATH:$GRID_HOME/bin
退出终端重新登录
检查环境变量生效:
echo $PATH
su - oracle
echo $ORACLE_HOME && echo $ORACLE_SID && exit
su - grid
echo $ORACLE_HOME && echo $ORACLE_SID && exit
7.6 修改内核参数(所有rac节点上操作)
添加内核配置优化参数如下
vi /etc/sysctl.conf
添加下面内容:
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
#设置最大打开文件数
fs.file-max = 6815744
fs.aio-max-nr = 1048576
#共享内存的页数,Linux共享内存页大小为4KB,8G内存设置为:8GB/4KB=8*1024*1024*1024/4KB=2097152
kernel.shmall = 2097152
#最大共享内存,官方文档建议是内存的1/2,例如:8G内存则设置为:4*1024*1024*1024
kernel.shmmax = 4294967296
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
#tcp参数设置
#可使用的IPv4端口范围(TCP/UDP协议允许使用的本地端口号)
net.ipv4.ip_local_port_range = 9000 65500
#默认&最大的TCP数据接收窗口大小(字节)
net.core.rmem_default = 262144
net.core.rmem_max= 4194304
#默认&最大的TCP数据发送窗口大小(字节)
net.core.wmem_default= 262144
net.core.wmem_max= 1048576
#信号相关参数,如果不设置Oracle RAC安装检测失败
kernel.sem = 250 3200 100 128
使内核参数立即生效
sysctl -p
7.7 修改oracle和grid用户限制设置,提高软件运行性能(所有rac节点操作)
vi /etc/security/limits.conf
在文件末尾添加配置项:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
7.8 安装依赖的包
yum install -y binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers glibc-static kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel libstdc++-static make numactl-devel sysstat unixODBC unixODBC-devel compat-libcap1 libXi libXtst
rpm -qa binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers glibc-static kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel libstdc++-static make numactl-devel sysstat unixODBC unixODBC-devel compat-libcap1 libXi libXtst
rpm -qa binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers glibc-static kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel libstdc++-static make numactl-devel sysstat unixODBC unixODBC-devel compat-libcap1 libXi libXtst |wc -l
总计29个依赖包
其中:compat-libcap1 libXi libXtst 是安装Oracle Grid and RAC必须的依赖,但如果只安装Oracle Database则不依赖
有些依赖包如果CentOS7 yum里面没有,可以去 Red Hat Enterprise Linux的yum下载,或者晚上直接wget下载后 rpm -ivh xxx.rpm 安装
注意:
1.Linux不同版本、x86-32、x86-64不同,需要安装Oracle的软件不同,所需要的依赖包也不同
2.官方的Oracle Grid安装说明:https://docs.oracle.com/cd/E11882_01/install.112/e41961/toc.htm
中有关于必须的依赖包的说明:https://docs.oracle.com/cd/E11882_01/install.112/e41961/prelinux.htm#CWLIN225
Table 2-9 Linux x86-64 Oracle Grid Infrastructure and Oracle RAC Package Requirements
Table 2-10 Linux x86-64 Oracle Database Features Package Requirements
3.pdksh只有在Linux 4上需要,Linux 5/6/7都已经被ksh取代
7.9 设置节点互信关系(ssh免密登录)
oracle和grid两个用户都要设置互信(rac1&rac2)
1)对oracle用户设置节点互信关系:
su - oracle
cd ~
ssh-keygen # 这里一路默认回车就行了,在本地机器上使用ssh-keygen产生公钥私钥对
ssh-copy-id -i ~/.ssh/id_rsa.pub oracle@rac1 #将本机的公钥复制到远程机器的authorized_keys文件中(~/.ssh/authorized_key),会提示输入用户密码
ssh-copy-id -i ~/.ssh/id_rsa.pub oracle@rac2
2)对grid用户设置节点互信关系:
exit
su - grid
cd ~
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub grid@rac1
ssh-copy-id -i ~/.ssh/id_rsa.pub grid@rac2
3)测试节点互信:
首次可能会提示输入yes,直接输入yes即可完成登录,不需要密码,后续就不会提示了。
exit
su - oracle
ssh rac1 date
ssh rac2 date
ssh rac1priv date
ssh rac2priv date
exit
su - grid
ssh rac1 date
ssh rac2 date
ssh rac1priv date
ssh rac2priv date
说明:关于互信设置,还有另外一种方式,直接使用软件包解压后提供的ssh互信设置脚本(sshUserSetup.sh)来完成,如果觉得前面设置方法麻烦的话,也可尝试用脚本设置
Oacle安装包解压后,脚本位于:database/sshsetup/sshUserSetup.sh
由于我前面已经手动设置过互信,所以直接跳过下面步骤。
# su - grid
cd $GRID_HOME/deinstall # /u01/app/12.2.0/grid/deinstall
./sshUserSetup.sh -user grid -hosts "rac1 rac2 racpriv rac2priv" -advanced -noPromptPassphrase
exit
# su - oracle
cd $GRID_HOME/deinstall # /u01/app/12.2.0/grid/deinstall
./sshUserSetup.sh -user oracle -hosts "rac1 rac2 racpriv rac2priv" -advanced -noPromptPassphrase
同样的,等设置互信完成后,在所有rac节点上互信测试,能免密登录就OK了。
7.10 Centos7安装配置DNS服务器
如果不配置DNS服务器,静默安装的时候, racscan无法解析(nslookup racscan)拿到scan ip,安装无法继续下去。
7.10 设置共享磁盘(用oracleasm创建ASM磁盘)
前面步骤已经添加并格式化了共享磁盘,本步骤是用oracleasm创建ASM磁盘并完成ASM配置。
用oracleasm在rac1格式化后,rac2上只需要扫描即可。oracleasm需要三个包:kmod-oracleasm, oracleasm-support, oracleasmlib。
rac1上root用户进行操作:
下载oracleasm:
su - root
mkdir /opt/soft
cd $_
wget http://public-yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracleasm-support-2.1.11-2.el7.x86_64.rpm
wget http://download.oracle.com/otn_software/asmlib/oracleasmlib-2.0.12-1.el7.x86_64.rpm
安装oracleasm:
yum install -y kmod-oracleasm
rpm -ivh oracleasmlib-2.0.12-1.el7.x86_64.rpm oracleasm-support-2.1.11-2.el7.x86_64.rpm
rpm -qa oracleasmlib oracleasm-support
配置ASM属性:
# oracleasm configure -i
Default user to own the driver interface [ ]: grid
Default group to own the driver interface [ ]: oinstall
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
# oracleasm init
Creating /dev/oracleasm mount point: /dev/oracleasm
Loading module "oracleasm": oracleasm
Configuring "oracleasm" to use device physical block size
Mounting ASMlib driver filesystem: /dev/oracleasm
创建asm磁盘:
oracleasm createdisk asmocr01 /dev/sdb1
oracleasm createdisk asmocr02 /dev/sdc1
oracleasm createdisk asmocr03 /dev/sdd1
oracleasm createdisk asmarch01 /dev/sde1
oracleasm createdisk asmdata01 /dev/sdf1
oracleasm createdisk asmdata02 /dev/sdg1
查看创建的ASM磁盘:
[root@rac1 ~]# oracleasm listdisks
ASMARCH01
ASMDATA01
ASMDATA02
ASMOCR01
ASMOCR02
ASMOCR03
查看设备
# ls /dev/oracleasm/disks/
ASMARCH01 ASMDATA01 ASMDATA02 ASMOCR01 ASMOCR02 ASMOCR03
说明:
如果磁盘规划有误,需要删除重建,删除asm磁盘命令如下:
oracleasm deletedisk asmocr01
删除后,其他节点reboot重启重新扫描刷新磁盘
rac2上也用root用户进行操作:
下载oracleasm:直接从rac1拷贝
cd /opt
scp -r root@rac1:/opt/soft /opt
安装oracleasm:
cd /opt/soft
yum install -y kmod-oracleasm
rpm -ivh oracleasmlib-2.0.12-1.el7.x86_64.rpm oracleasm-support-2.1.11-2.el7.x86_64.rpm
rpm -qa oracleasmlib oracleasm-support
配置ASM属性:
# oracleasm configure -i
Default user to own the driver interface [ ]: grid
Default group to own the driver interface [ ]: oinstall
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
# oracleasm init
rac2不需要再重复创建ASM磁盘,直接扫描即可
# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "ASMOCR02"
Instantiating disk "ASMOCR03"
Instantiating disk "ASMARCH01"
Instantiating disk "ASMOCR01"
Instantiating disk "ASMDATA01"
Instantiating disk "ASMDATA02"
[root@rac2 ~]# oracleasm listdisks
ASMARCH01
ASMDATA01
ASMDATA02
ASMOCR01
ASMOCR02
ASMOCR03
到此,rac1和rac2节点都能看到
8.静默方式安装RAC集群
8.1 上传软件包
先将软件包上传到/u01目录下,然后授权
# chown oracle:oinstall linux.x64_11gR2_database*.zip
# chown grid:oinstall linux.x64_11gR2_grid.zip
# ls -l /u01
total 3323816
drwxrwxr-x 7 grid oinstall 82 Jul 30 23:03 app
-rw-r--r-- 1 oracle oinstall 1239269270 Nov 18 2015 linux.x64_11gR2_database_1of2.zip
-rw-r--r-- 1 oracle oinstall 1111416131 Nov 18 2015 linux.x64_11gR2_database_2of2.zip
-rw-r--r-- 1 grid oinstall 1052897657 Jul 21 15:45 linux.x64_11gR2_grid.zip
8.1 安装集群grid软件
注意:
1.安装时,所有软件只需要在一个节点解压,其他节点不需要。安装GI和DB软件时,安装过程中会自动将软件同步到其他节点。
2.11gR2安装是会用设置的grid用户的$ORACLE_HOME变量来作为GI的HOME目录。如果是Oracle 12c则grid安装不再会按你设置的grid用户的$ORACLE_HOME变量来作为GI的HOME目录,而是直接将你GRID软件的解压目录作为家目录,则必须解压到grid的HOME目录。
1.解压软件包
su - grid
$ echo $ORACLE_HOME # /u01/app/11.2.0/grid
$ cd /u01
$ ls -l
total 3323816
drwxrwxr-x 7 grid oinstall 82 Jul 30 23:03 app
-rw-r--r-- 1 oracle oinstall 1239269270 Nov 18 2015 linux.x64_11gR2_database_1of2.zip
-rw-r--r-- 1 oracle oinstall 1111416131 Nov 18 2015 linux.x64_11gR2_database_2of2.zip
-rw-r--r-- 1 grid oinstall 1052897657 Jul 21 15:45 linux.x64_11gR2_grid.zip
$ unzip linux.x64_11gR2_grid.zip -d /u01/app/11.2.0 #解压后会释放一个grid目录
解压后的目录及文件如下:
[grid@rac1 11.2.0]$ ll /u01/app/11.2.0/
total 0
drwxrwxr-x 8 grid oinstall 180 Jul 31 16:56 grid
[grid@rac1 11.2.0]$ ll /u01/app/11.2.0/grid/
total 1028244
drwxr-xr-x 9 grid oinstall 168 Aug 17 2009 doc
drwxr-xr-x 4 grid oinstall 256 Aug 15 2009 install
-rw-r--r-- 1 grid oinstall 1052897657 Jul 31 16:53 linux.x64_11gR2_grid.zip
drwxrwxr-x 2 grid oinstall 29 Aug 15 2009 response
drwxrwxr-x 2 grid oinstall 34 Aug 15 2009 rpm
-rwxrwxr-x 1 grid oinstall 3795 Jan 29 2009 runcluvfy.sh
-rwxr-xr-x 1 grid oinstall 3227 Aug 15 2009 runInstaller
drwxrwxr-x 2 grid oinstall 29 Aug 15 2009 sshsetup
drwxr-xr-x 14 grid oinstall 4096 Aug 15 2009 stage
-rw-r--r-- 1 grid oinstall 4228 Aug 18 2009 welcome.html
[grid@rac1 11.2.0]$
2.安装grid前先安装grid中cvuqdisk包
切换到root操作
$ exit #切换到root
# yum install -y smartmontools #如果不安装,cvuqdisk安装时会报错 /usr/sbin/smartctl 不存在
# rpm -ivh /u01/app/11.2.0/grid/rpm/cvuqdisk-1.0.7-1.rpm
# su - grid #再次切换到grid继续
3.grid安装前的预检查(非必须)
执行Oracle的检查脚本进行检查:
$ORACLE_HOME/runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose #检查当前环境配置是否满足
Oracle 官方建议在安装Oracle Grid Infrastructure前运行脚本来检查各个节点是否满足GI安装的官方要求。
在部署Grid Infrastructure的过程中使用,我们不光要学会怎么用这个脚本,更应该明白其中的一些原理。
runcluvfy.sh将功能在shell中实现,并和GI的安装介质一起提供给用户,使得用户在数据库和CLUSTER安装之前就可以利用这个工具的功能。
runcluvfy.sh语法说明:
-pre: 该选项主要检查是否满足安装的需要。
-post:该选择主要检查安装后组件是否正常。
-n:该选项用于指定节点列表,这里指定了2个节点。
-verbose:该选项用于输出详细的验证信息。
-fixup:这是Oracle 11gR2中新增加的一个参数。利用这个参数,可以产生一个名为runfixup.sh的脚本。
runfixup.sh 脚本中包含一系列的操作系统命令,利用这个脚本可以对操作系统进行一定的修改,使其满足安装条件。
完成系统进行校验之后,以root用户的身份执行脚本runfixup.sh,就可以解决操作系统中一些尚不满足安装条件的情况。
我的检测结果,大部分都OK,问题如下:
1)内核小版本不一致
本来是一致的,可能是由于安装某些软件导致微小的差异,最终结果是passsed,可以忽略该告警。
WARNING:
PRVF-7524 : Kernel version is not consistent across all the nodes.
Kernel version = "3.10.0-1127.18.2.el7.x86_64" found on nodes: rac2.
Kernel version = "3.10.0-1127.13.1.el7.x86_64" found on nodes: rac1.
Result: Kernel version check passed
最终结果还是passwd,直接忽略
2)提示i386的包没有找到,如果以及安装过i686(x86_64)的包了,该类型的错误可以忽略
Check: Kernel parameter for "semmni"
Node Name Configured Required Comment
------------ ------------------------ ------------------------ ----------
rac2 0 128 failed
rac1 0 128 failed
Result: Kernel parameter check failed for "semmni"
我检测结果中提示i386没有找到、但实际x86_64已安装的有:
libaio
glibc
compat-libstdc++-33
libaio-devel
libgcc
libstdc++
unixODBC
unixODBC-devel
3)如果有遇到有些错误是因为要求的版本没有找到,但实际安装的版本比要求的版本高,也可以忽略。
4)pdksh提示没有,由于Redhat7上已经被ksh替代,rpm -qa ksh 已安装即可,可以忽略
5.NTP时钟同步检测失败,没有以"-x"参数启动(没有开启平滑同步模式)
Checking NTP daemon command line for slewing option "-x"
Check: NTP daemon command line
Node Name Slewing Option Set?
------------------------------------ ------------------------
rac2 no
rac1 no
Result:
NTP daemon slewing option check failed on some nodes
PRVF-5436 : The NTP daemon running on one or more nodes lacks the slewing option "-x"
Result: Clock synchronization check using Network Time Protocol(NTP) failed
检测出来的问题不多,直接手动修改一下(rac1 & rac2都要修改),root操作:
问题1、3、4:无需修改,忽略即可。只需要修改问题2和问题5。
问题2:修改内核优化参数
vi /etc/sysctl.conf
kernel.sem = 250 32000 100 128
立即生效:
sysctl -p
说明:
kernel.sem 内核参数是指 semmsl,semmns,semopm,semmni这4个参数。
semmsl : 指每个线号集的最大信号数,Oracle建议是设置为oracle的最大进程数+10
semmni : 指整个系统的信号集的最大数量
semmns : 指整个系统的信号总数,也就是semmni*semmsl的结果
semopm : 指每个semop系统调用可以执行的信号操作的最大数量,建议设置等于 semmsl
Oracle默认设置:semmsl=250, semmns=3200, semopm=100, semmni=128,即: kernel.sem = 250 32000 100 128
例:如果在Oracle的 init.ora 文件参数中设置 processes = 5000
则:semmsl=5010, semmni=128, semmns=semmsl*semmni=641280, semopm=semmsl=5010,即 kernel.sem=5010 641280 5010 128
问题5:修改NTP启动参数:
vi /etc/sysconfig/ntpd
OPTIONS="-g -x"
重启NTP服务
service ntpd restart
修改完毕重新检测:
su - grid
$ORACLE_HOME/runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose #检查当前环境配置是否满足
发现其他都OK,还是有一个失败:
Check: Kernel parameter for "semmni"
Node Name Configured Required Comment
------------ ------------------------ ------------------------ ----------
rac2 0 128 failed
rac1 0 128 failed
Result: Kernel parameter check failed for "semmni"
网上找资料说是可能是因为OS是CentOS的缘故,虽然OS已经生效(sysctl -p),但Oracle检测脚本不认为通过。估计是Oracle检测脚本对CentOS7的不兼容吧,不管了,直接忽略,继续往下安装。
如果检测问题比较多,也可以考虑执行下面命令生成修复脚本(我没有使用):
$ORACLE_HOME/runcluvfy.sh stage -pre crsinst -n rac1,rac2 -fixup -verbose
4.静默安装grid(Oracle Grid Infrastructure)
先介绍一下关于disk group和fail group的概念
ASM有几个难理解的概念:ASM磁盘,故障组(FAILGROUP),磁盘组(disk group)。
asm disk: 磁盘比较好裂解,就是我们的磁盘,这个磁盘一般都是做raid以后看到的磁盘。
FAILGROUP: 故障组就是asm disk的一个逻辑组合,如果不指定哪些asm disk属于哪个FAILGROUP,那么可以理解每个asm disk都是一个FAILGROUP。
disk group: 磁盘组比较好理解,就是asm disk的组合。
磁盘组有3种镜像的方式:External redundancy, Normal redundancy, High redundancy。
External:不镜像ASM中的数据
Normal:镜像ASM中的数据一次
High:镜像ASM中的数据两次
这三种镜像的方式,就是针对故障组来说的。如果有2个故障组,就是Normal方式镜像;如果有3个故障组就是High方式镜像。
接下来正式开始 To install and configure 'Grid Infrastructure for Cluster'。
由于是静默安装,所以在安装时安装程序需要找应答文件(response file),根据response file里面配置的内容来进行安装。
response file可以通过一次图形界面安装的配置来生成,该方式需要至少有过一次图形界面的安装。另外还有一种方式是可以直接使用Oracle安装介质(解压后的目录)中提供的标准的response file来进行相应参数修改,安装是指定修改后的response file。
response file存在于解压后的response目录下的crs_install.rsp(网上很多介绍都说是 grid_install.rsp 文件,但我解压后的response下只有crs_install.rsp)
先备份一下原来的响应文件,然后再编辑修改。
cd $ORACLE_HOME/response
cp crs_install.rsp back.crs_install.rsp
vim crs_install.rsp
修改后的关键参数内容如下:
# Do not change the following system generated value.
oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v11_2_0 #响应文件版本、不用修改
ORACLE_HOSTNAME=rac1
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=en,zh_CN
oracle.install.option=CRS_CONFIG
ORACLE_BASE=/u01/app/grid
ORACLE_HOME=/u01/app/11.2.0/grid
oracle.install.asm.OSDBA=asmdba
oracle.install.asm.OSOPER=asmoper
oracle.install.asm.OSASM=asmadmin
oracle.install.crs.config.gpnp.scanName=racscan
oracle.install.crs.config.gpnp.scanPort=1521
oracle.install.crs.config.clusterName=cluster
oracle.install.crs.config.gpnp.configureGNS=false
oracle.install.crs.config.gpnp.gnsSubDomain=
oracle.install.crs.config.gpnp.gnsVIPAddress=
oracle.install.crs.config.autoConfigureClusterNodeVIP=false
oracle.install.crs.config.clusterNodes=rac1:rac1vip,rac2:rac2vip
# 1代表public,2代表private,如果是一个网卡绑定多IP(ens160, ens160:0)可能填法还不一样,没找到如何解决,后来改成了添加物理网卡。注意:这里配置的是网段地址
oracle.install.crs.config.privateInterconnects=ens160:192.168.235.0:1,ens192:10.0.0.0:2
oracle.install.crs.config.storageOption=ASM_STORAGE
# 这项只和windows有关,Linux不设置
oracle.install.crs.config.sharedFileSystemStorage.diskDriveMapping=
#-------------------------------------------------------------------------------
# These properties are applicable only if FILE_SYSTEM_STORAGE is chosen for
# storing OCR and voting disk //只有存储类型使用文件系统时才需要配置OCR & voting disk,asm无需配置
# Specify the location(s) and redundancy for OCR and voting disks
# In case of windows, mention the drive location that is specified to be
# formatted for DATA in the above property.
# Multiple locations can be specified, separated by commas
# Redundancy can be one of these:
# EXTERNAL - one(1) location should be specified for OCR and voting disk
# NORMAL - three(3) locations should be specified for OCR and voting disk
#-------------------------------------------------------------------------------
oracle.install.crs.config.sharedFileSystemStorage.votingDiskLocations=
oracle.install.crs.config.sharedFileSystemStorage.votingDiskRedundancy=NORMAL
oracle.install.crs.config.sharedFileSystemStorage.ocrLocations=
oracle.install.crs.config.sharedFileSystemStorage.ocrRedundancy=NORMAL
oracle.install.crs.config.useIPMI=false
oracle.install.crs.config.ipmi.bmcUsername=
oracle.install.crs.config.ipmi.bmcPassword=
# ASM相关配置,使用ASM需要配置,使用文件系统则不需要
oracle.install.asm.SYSASMPassword=1q2w3e
oracle.install.asm.diskGroup.name=ocr
#-------------------------------------------------------------------------------
# Redundancy level to be used by ASM.
# It can be one of the following
# - NORMAL
# - HIGH
# - EXTERNAL
# Example: oracle.install.asm.diskGroup.redundancy=NORMAL
#
#-------------------------------------------------------------------------------
oracle.install.asm.diskGroup.redundancy=NORMAL
#-------------------------------------------------------------------------------
# List of disks to create a ASM DiskGroup
#
# Example: oracle.install.asm.diskGroup.disks=/oracle/asm/disk1,/oracle/asm/disk2
#
#-------------------------------------------------------------------------------
#oracle.install.asm.diskGroup.disks=ORCL:ASMOCR01,ORCL:ASMOCR02,ORCL:ASMOCR03 网上有的介绍用的是该方式,我没有尝试
oracle.install.asm.diskGroup.disks=/dev/oracleasm/disks/ASMOCR01,/dev/oracleasm/disks/ASMOCR02,/dev/oracleasm/disks/ASMOCR03
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/oracleasm/disks/*
oracle.install.asm.monitorPassword=1q2w3e
oracle.install.crs.upgrade.clusterNodes=
oracle.install.asm.upgradeASM=false
5.执行静默安装命令
[grid@rac1 grid]$ cd $ORACLE_HOME
[grid@rac1 grid]$ ./runInstaller -silent -ignorePrereq -ignoreSysPrereqs -responseFile $ORACLE_HOME/response/crs_install.rsp
参数说明:
-silent 静默安装
-ignorePrereq 忽略预检测告警信息
-ignoreSysPrereqs 忽略系统的安装前检查的结果
-responseFile 指定应答文件
-force 强制安装
注意:网上很多介绍安装是都指定了参数 -showProgress (显示安装进度),刚开始我带上该参数报错:
The command line arguments '-showProgress' are not valid options.
后面通过 runInstaller -help 查看,我的runInstaller并不支持 -showProgress 参数,需要删除该参数。
如果安装过程中出错终止,查看日志目录/tmp/OraInstall2020-08-02_12-25-11AM下的日志文件,获取错误详情。日志目录由 .log, .err, .out 三个日志文件。
我遇到的问题如下:
问题1:
[grid@rac1 grid]$ [WARNING] [INS-08109] Unexpected error occurred while validating inputs at state 'CRSNodeInformationUI'.
CAUSE: No additional information available.
ACTION: Contact Oracle Support Services or refer to the software manual.
SUMMARY:
- For input string: "10.0.0.1"
A log of this session is currently saved as: /tmp/OraInstall2020-08-02_12-25-11AM/installActions2020-08-02_12-25-11AM.log. Oracle recommends that if you want to keep this log, you should move it from the temporary location to a more permanent location.
[root@rac1 ~]# tail -100f /tmp/OraInstall2020-08-02_12-25-11AM/oraInstall2020-08-02_12-25-11AM.err
---# Begin Stacktrace #---------------------------
ID: oracle.install.commons.util.exception.DefaultErrorAdvisor:439
oracle.install.commons.flow.FlowException: [INS-08109] Unexpected error occurred while validating inputs at state 'CRSNodeInformationUI'.
at oracle.install.commons.flow.AbstractFlowExecutor.validate(AbstractFlowExecutor.java:399)
at oracle.install.commons.flow.AbstractFlowExecutor.leaveVertex(AbstractFlowExecutor.java:607)
at oracle.install.commons.flow.AbstractFlowExecutor.transition(AbstractFlowExecutor.java:321)
at oracle.install.commons.flow.AbstractFlowExecutor.nextState(AbstractFlowExecutor.java:261)
at oracle.install.commons.flow.SilentFlowExecutor.execute(SilentFlowExecutor.java:67)
at oracle.install.commons.flow.AbstractFlowExecutor.execute(AbstractFlowExecutor.java:206)
at oracle.install.commons.flow.FlowApplication.executeFlow(FlowApplication.java:144)
at oracle.install.commons.flow.FlowApplication.run(FlowApplication.java:150)
at oracle.install.commons.base.driver.common.Installer.run(Installer.java:260)
at oracle.install.commons.util.Application.startup(Application.java:869)
at oracle.install.commons.flow.FlowApplication.startup(FlowApplication.java:164)
at oracle.install.commons.flow.FlowApplication.startup(FlowApplication.java:181)
at oracle.install.commons.base.driver.common.Installer.startup(Installer.java:265)
at oracle.install.ivw.crs.driver.CRSInstaller.startup(CRSInstaller.java:96)
at oracle.install.ivw.crs.driver.CRSInstaller.main(CRSInstaller.java:103)
Caused by: java.lang.NumberFormatException: For input string: "10.0.0.1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:456)
at java.lang.Integer.parseInt(Integer.java:497)
at oracle.install.ivw.crs.validator.CRSValidationHelper._getDefaultSubnets(CRSValidationHelper.java:405)
at oracle.install.ivw.crs.validator.CRSValidationHelper._validateNodes(CRSValidationHelper.java:510)
at oracle.install.ivw.crs.validator.CRSValidationHelper.validateNodeVIPs(CRSValidationHelper.java:638)
at oracle.install.ivw.crs.validator.CRSNodeInformationValidator.validate(CRSNodeInformationValidator.java:152)
at oracle.install.commons.flow.validation.ValidationHelper.validateState(ValidationHelper.java:178)
at oracle.install.commons.flow.AbstractFlowExecutor.validate(AbstractFlowExecutor.java:394)
... 14 more
定位&解决办法:
网上找了好久,没有找到有效信息,问题依旧。
最终仔细思考,"10.0.0.1"引起了我的注意,猜测这个可能是一个配置参数,Oracle期望的是一个整数值,而拿到的是一个字符串,导致处理失败。
因此,联想到可能是应答文件参数配置有误,查找应答文件中的字符串"10.0.0.1":
[grid@rac1 grid]$ cat response/crs_install.rsp |grep "10.0.0.1"
oracle.install.crs.config.privateInterconnects=ens160:192.168.235.60:1,ens192:0:10.0.0.1:2
[grid@rac1 grid]$
问题找到了,原来是配置网卡设备&IP地址的时候,中间多写了一个"0"导致参数解析失败。
修改后问题解决。
问题2:
[FATAL] [INS-40925] One or more nodes have interfaces not configured with a subnet that is common across all cluster nodes.
CAUSE: Not all nodes have network interfaces that are configured on subnets that are common to all nodes in the cluster.
ACTION: Ensure all cluster nodes have a public interface defined with the same subnet accessible by all nodes in the cluster.
A log of this session is currently saved as: /tmp/OraInstall2020-08-01_04-48-01PM/installActions2020-08-01_04-48-01PM.log. Oracle recommends that if you want to keep this log, you should move it from the temporary location to a more permanent location.
定位&解决办法:
最终定位原因是 响应文件中的参数 privateInterconnects 应该配置网段地址、而不是主机地址,配错安装会失败:[INS-40925]
问题3:
[WARNING] [INS-30011] The password entered does not conform to the Oracle recommended standards.
CAUSE: Oracle recommends that the SYS password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
ACTION: Provide a password that conforms to the Oracle recommended standards.
[WARNING] [INS-30011] The password entered does not conform to the Oracle recommended standards.
CAUSE: Oracle recommends that the ASMSNMP password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
ACTION: Provide a password that conforms to the Oracle recommended standards.
[WARNING] [INS-32016] The selected Oracle home contains directories or files.
CAUSE: The selected Oracle home contained directories or files.
ACTION: To start with an empty Oracle home, either remove its contents or choose another location.
SEVERE:OUI-10182:The effective user ID does not match the owner of the file, or the process is not the super-user; the system indicates that super-user privilege is required.
[root@rac1 /]#
前面几个WARNING都没有关系可以忽略,关键错误:
SEVERE:OUI-10182:The effective user ID does not match the owner of the file, or the process is not the super-user; the system indicates that super-user privilege is required.
解决办法:
用户权限问题,解决方法:用root帐户在/etc下建立文件oraInst.loc,并写入以下内容:
# vi /etc/oraInst.loc
inventory_loc=/u01/app/oraInventory
inst_group=oinstall
重新执行安装。
$ ./runInstaller -silent -ignorePrereq -ignoreSysPrereqs -responseFile $ORACLE_HOME/response/crs_install.rsp
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 120 MB. Actual 81543 MB Passed
Checking swap space: must be greater than 150 MB. Actual 10239 MB Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2020-08-01_07-39-26PM. Please wait ...[grid@rac1 grid]$
[grid@rac1 grid]$
[grid@rac1 grid]$
[grid@rac1 grid]$
[grid@rac1 grid]$ [WARNING] [INS-30011] The password entered does not conform to the Oracle recommended standards.
CAUSE: Oracle recommends that the SYS password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
ACTION: Provide a password that conforms to the Oracle recommended standards.
[WARNING] [INS-30011] The password entered does not conform to the Oracle recommended standards.
CAUSE: Oracle recommends that the ASMSNMP password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
ACTION: Provide a password that conforms to the Oracle recommended standards.
[WARNING] [INS-32016] The selected Oracle home contains directories or files.
CAUSE: The selected Oracle home contained directories or files.
ACTION: To start with an empty Oracle home, either remove its contents or choose another location.
[WARNING] [INS-30011] The password entered does not conform to the Oracle recommended standards.
CAUSE: Oracle recommends that the SYS password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
ACTION: Provide a password that conforms to the Oracle recommended standards.
[WARNING] [INS-30011] The password entered does not conform to the Oracle recommended standards.
CAUSE: Oracle recommends that the ASMSNMP password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
ACTION: Provide a password that conforms to the Oracle recommended standards.
[WARNING] [INS-32016] The selected Oracle home contains directories or files.
CAUSE: The selected Oracle home contained directories or files.
ACTION: To start with an empty Oracle home, either remove its contents or choose another location.
You can find the log of this install session at:
/u01/app/oraInventory/logs/installActions2020-08-01_07-39-26PM.log
[WARNING] [INS-30011] The password entered does not conform to the Oracle recommended standards.
CAUSE: Oracle recommends that the SYS password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
ACTION: Provide a password that conforms to the Oracle recommended standards.
[WARNING] [INS-30011] The password entered does not conform to the Oracle recommended standards.
CAUSE: Oracle recommends that the ASMSNMP password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
ACTION: Provide a password that conforms to the Oracle recommended standards.
[WARNING] [INS-32016] The selected Oracle home contains directories or files.
CAUSE: The selected Oracle home contained directories or files.
ACTION: To start with an empty Oracle home, either remove its contents or choose another location.
The following configuration scripts need to be executed as the "root" user.
#!/bin/sh
#Root scripts to run
/u01/app/oraInventory/orainstRoot.sh
/u01/app/11.2.0/grid/root.sh
To execute the configuration scripts:
1. Open a terminal window
2. Log in as "root"
3. Run the scripts
4. Return to this window and hit "Enter" key to continue
Configuration assistants have not been run. This can happen for following reasons - either root.sh is to be run before config or Oracle Universal Installer was invoked with the -noConfig option.
"/u01/app/11.2.0/grid/cfgtoollogs/configToolAllCommands" script contains all commands to be executed by the configuration assistants. This file may be used to run the configuration assistants outside of OUI. Note that you may have to update this script with passwords (if any) before executing the same.
Successfully Setup Software.
安装完成,正常会提示执行两个脚本:
/u01/app/oraInventory/orainstRoot.sh
/u01/app/11.2.0/grid/root.sh
另开会话分别在各节点上依次执行这两个脚本,执行完后会要求在运行安装程序的节点上以root帐户执行/u01/app/11.2/grid/cfgtoollogs/configToolAllCommands
安要求执行完即可。
按照提示以root用户运行脚本,rac1上执行完后,还需要在rac2上执行
[root@rac1 /]# /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.
[root@rac1 /]# /u01/app/11.2.0/grid/root.sh
Check /u01/app/11.2.0/grid/install/root_rac1_2020-08-01_19-45-46.log for the output of root script
[root@rac1 /]#
我执行第二脚本 /u01/app/11.2.0/grid/root.sh 的时候卡住了,日志如下
[root@rac1 /]# tail /u01/app/11.2.0/grid/install/root_rac1_2020-08-01_19-45-46.log
peer pa cert TP
pa peer cert TP
profile reader pa cert TP
profile reader peer cert TP
peer user cert
pa user cert
Adding daemon to inittab
CRS-4124: Oracle High Availability Services startup failed.
CRS-4000: Command Start failed, or completed with errors.
ohasd failed to start: Inappropriate ioctl for device
[root@rac1 /]#
网上搜索,原来这个错误:
CRS-4124: Oracle High Availability Services startup failed.
CRS-4000: Command Start failed, or completed with errors.
ohasd failed to start: Inappropriate ioctl for device
还是11gR2 RAC (11.2.0.1) 的一个经典bug。
解决办法如下:
# ls -l /var/tmp/.oracle/npohasd
# chown root:oinstall /var/tmp/.oracle/npohasd #修改该文件权限,将root:root修改为root:oinstall
# /u01/app/11.2.0/grid/crs/install/roothas.pl -deconfig -force -verbose #重新执行root.sh之前先删除配置
# /u01/app/11.2.0/grid/root.sh #重新执行root.sh,等执行过程提示:Adding daemon to inittab 时,同步执行dd命令
# /bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1
如果出现 /bin/dd: opening`/var/tmp/.oracle/npohasd': No such file or directory 的时候文件还没生成就继续执行,重复操作,直到成功为止,一般出现 Adding daemon to inittab 这条信息的时候执行 dd 命令。
最终root.sh脚本执行成功:
rac2 2020/08/01 20:42:07 /u01/app/11.2.0/grid/cdata/rac2/backup_20200801_204207.olr
Preparing packages...
Configure Oracle Grid Infrastructure for a Cluster ... succeeded
Oracle 11gR2 的这个bug对于首次安装的人来说,真是坑死人啊。
6.grid安装完成,执行下列命令,验证一下状态:
su - grid
$ crsctl query css votedisk #检查表决磁盘(Voting disk)
$ ocrcheck #检查Oracle集群注册表(OCR)
$ crsctl check crs #检查CRS状态
$ crsctl check cluster #检查集群信息(本节点)
$ crsctl check cluster -all #检查集群信息(所有节点)
$ crsctl check cluster -n rac1 rac2 #检查集群信息(指定的节点)
$ olsnodes -n #检查集群节点状态
$ srvctl status asm -a #检查Oracle ASM功能
$ ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}' #检查两个节点上的 Oracle TNS 监听器服务
$ crsctl check ctss #检查时间CTSS
执行结果如下:
[grid@rac1 ~]$ crsctl query css votedisk #检查表决磁盘(Voting disk)
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 2646211ae83a4f1fbfa3f3e71054b31c (/dev/oracleasm/disks/ASMOCR01) [OCR]
2. ONLINE 9b03444e5c014fbcbf9d178aed7af3b2 (/dev/oracleasm/disks/ASMOCR02) [OCR]
3. ONLINE 9770bf3077264f73bfb8e54f4cea07c2 (/dev/oracleasm/disks/ASMOCR03) [OCR]
Located 3 voting disk(s).
[grid@rac1 ~]$ ocrcheck #检查Oracle集群注册表(OCR)
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 1984
Available space (kbytes) : 260136
ID : 870882427
Device/File Name : +ocr
Device/File integrity check succeeded
Device/File not configured
Device/File not configured
Device/File not configured
Device/File not configured
Cluster registry integrity check succeeded
Logical corruption check bypassed due to non-privileged user
[grid@rac1 ~]$
[grid@rac1 ~]$ crsctl check crs #检查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@rac1 ~]$
[grid@rac1 ~]$ crsctl check cluster #检查集群信息(本节点)
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
[grid@rac1 ~]$
[grid@rac1 ~]$ crsctl check cluster -all #检查集群信息(所有节点)
**************************************************************
rac1:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
rac2:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
[grid@rac1 ~]$
[grid@rac1 ~]$ crsctl check cluster -n rac1 rac2 #检查集群信息(指定的节点)
**************************************************************
rac1:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
rac2:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
[grid@rac1 ~]$
[grid@rac1 ~]$ olsnodes -n #检查集群节点状态
rac1 1
rac2 2
[grid@rac1 ~]$
[grid@rac1 ~]$ srvctl status asm -a #检查Oracle ASM功能
ASM is running on rac1,rac2
ASM is enabled.
[grid@rac1 ~]$
[grid@rac1 ~]$ ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}' #检查两个节点上的 Oracle TNS 监听器服务
LISTENER_SCAN1
[grid@rac1 ~]$
[grid@rac1 ~]$ crsctl check ctss #检查时间CTSS
CRS-4700: The Cluster Time Synchronization Service is in Observer mode.
[grid@rac1 ~]$
7.创建磁盘组(disk group)
查看表决磁盘
$ crsctl query css votedisk
创建磁盘组
方法1)
su - grid
sqlplus / as sysasm
-- 先查看一下全局磁盘和磁盘组信息
set linesize 200
col path for a30
select name,path,state,group_number from v$asm_disk;
SQL> select name,path,state,group_number from v$asm_disk;
NAME PATH STATE GROUP_NUMBER
------------------------------------------------------------------------------------------ ------------------------------ ------------------------ ------------
/dev/oracleasm/disks/ASMDATA01 NORMAL 0
/dev/oracleasm/disks/ASMDATA02 NORMAL 0
/dev/oracleasm/disks/ASMARCH01 NORMAL 0
OCR_0000 /dev/oracleasm/disks/ASMOCR01 NORMAL 1
OCR_0001 /dev/oracleasm/disks/ASMOCR02 NORMAL 1
OCR_0002 /dev/oracleasm/disks/ASMOCR03 NORMAL 1
select INST_ID,name,free_mb,state from gv$asm_diskgroup;
SQL> select INST_ID,name,free_mb,state from gv$asm_diskgroup;
INST_ID NAME FREE_MB STATE
---------- ------------------------------------------------------------------------------------------ ---------- ---------------------------------
1 OCR 11359 MOUNTED
2 OCR 11359 MOUNTED
--创建磁盘组
-- for DATA
create diskgroup DATA external redundancy disk '/dev/oracleasm/disks/ASMDATA01';
alter diskgroup DATA add disk '/dev/oracleasm/disks/ASMDATA02';
-- for ARCH
create diskgroup ARCH external redundancy disk '/dev/oracleasm/disks/ASMARCH01';
--再查看全局磁盘和磁盘组
select name,path,state,group_number from v$asm_disk;
NAME PATH STATE GROUP_NUMBER
------------------------------------------------------------------------------------------ ------------------------------ ------------------------ ------------
DATA_0000 /dev/oracleasm/disks/ASMDATA01 NORMAL 2
DATA_0001 /dev/oracleasm/disks/ASMDATA02 NORMAL 2
OCR_0000 /dev/oracleasm/disks/ASMOCR01 NORMAL 1
ARCH_0000 /dev/oracleasm/disks/ASMARCH01 NORMAL 3
OCR_0001 /dev/oracleasm/disks/ASMOCR02 NORMAL 1
OCR_0002 /dev/oracleasm/disks/ASMOCR03 NORMAL 1
select INST_ID,name,free_mb,state from gv$asm_diskgroup;
INST_ID NAME FREE_MB STATE
---------- ------------------------------------------------------------------------------------------ ---------- ---------------------------------
2 OCR 11359 MOUNTED
2 DATA 0 DISMOUNTED
2 ARCH 0 DISMOUNTED
1 OCR 11359 MOUNTED
1 DATA 2097080 MOUNTED
1 ARCH 511945 MOUNTED
添加磁盘组后,其他节点需要mount才能将状态unmount->mount
rac2上查看磁盘和磁盘组:
# su - grid
SQL> sqlplus / as sysasm
SQL> set linesize 200
SQL> col path for a30
SQL> select name,path,state,group_number from v$asm_disk;
NAME PATH STATE GROUP_NUMBER
------------------------------------------------------------------------------------------ ------------------------------ ------------------------ ------------
/dev/oracleasm/disks/ASMDATA02 NORMAL 0
/dev/oracleasm/disks/ASMDATA01 NORMAL 0
/dev/oracleasm/disks/ASMARCH01 NORMAL 0
OCR_0000 /dev/oracleasm/disks/ASMOCR01 NORMAL 1
OCR_0002 /dev/oracleasm/disks/ASMOCR03 NORMAL 1
OCR_0001 /dev/oracleasm/disks/ASMOCR02 NORMAL 1
6 rows selected.
SQL> select INST_ID,name,free_mb,state from gv$asm_diskgroup;
INST_ID NAME FREE_MB STATE
---------- ------------------------------------------------------------------------------------------ ---------- ---------------------------------
1 OCR 11359 MOUNTED
1 DATA 2097080 MOUNTED
1 ARCH 511945 MOUNTED
2 OCR 11359 MOUNTED
2 DATA 0 DISMOUNTED
2 ARCH 0 DISMOUNTED
6 rows selected.
SQL>
rac2上mount操作:
alter diskgroup DATA mount;
alter diskgroup ARCH mount;
然后再查看全局磁盘组,都已经mount了:
SQL> select INST_ID,name,free_mb,state from gv$asm_diskgroup;
INST_ID NAME FREE_MB STATE
---------- ------------------------------------------------------------------------------------------ ---------- ---------------------------------
1 OCR 11359 MOUNTED
1 DATA 2097037 MOUNTED
1 ARCH 511902 MOUNTED
2 OCR 11359 MOUNTED
2 DATA 2097037 MOUNTED
2 ARCH 511902 MOUNTED
SQL> exit
$ srvctl enable diskgroup -g ARCH #最初我没有设置,重启后丢失了ARCH,手动能启动,不知是否必须手动设置enable
======== 到此 grid 安装完毕、磁盘组也添加好了,后面剩下安装 Oracle Database软件 ========
退出到grid用户shell命令行
$ crsctl status res -t #查看集群状态
[grid@rac1 ~]$ crsctl status res -t #查看集群状态
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ARCH.dg
ONLINE ONLINE rac1
ONLINE ONLINE rac2
ora.DATA.dg
ONLINE ONLINE rac1
ONLINE ONLINE rac2
ora.OCR.dg
ONLINE ONLINE rac1
ONLINE ONLINE rac2
ora.asm
ONLINE ONLINE rac1 Started
ONLINE ONLINE rac2 Started
ora.eons
ONLINE ONLINE rac1
ONLINE ONLINE rac2
ora.gsd
OFFLINE OFFLINE rac1
OFFLINE OFFLINE rac2
ora.net1.network
ONLINE ONLINE rac1
ONLINE ONLINE rac2
ora.ons
ONLINE ONLINE rac1
ONLINE ONLINE rac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE rac1
ora.oc4j
1 OFFLINE OFFLINE
ora.rac1.vip
1 ONLINE ONLINE rac1
ora.rac2.vip
1 ONLINE ONLINE rac2
ora.scan1.vip
1 ONLINE ONLINE rac1
[grid@rac1 ~]$
$ crs_stat -t #查看ASM状态
[grid@rac1 ~]$ crs_stat -t #查看ASM状态
Name Type Target State Host
------------------------------------------------------------
ora.ARCH.dg ora....up.type ONLINE ONLINE rac1
ora.DATA.dg ora....up.type ONLINE ONLINE rac1
ora....N1.lsnr ora....er.type ONLINE ONLINE rac1
ora.OCR.dg ora....up.type ONLINE ONLINE rac1
ora.asm ora.asm.type ONLINE ONLINE rac1
ora.eons ora.eons.type ONLINE ONLINE rac1
ora.gsd ora.gsd.type OFFLINE OFFLINE
ora....network ora....rk.type ONLINE ONLINE rac1
ora.oc4j ora.oc4j.type OFFLINE OFFLINE
ora.ons ora.ons.type ONLINE ONLINE rac1
ora....SM1.asm application ONLINE ONLINE rac1
ora.rac1.gsd application OFFLINE OFFLINE
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip ora....t1.type ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora.rac2.gsd application OFFLINE OFFLINE
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip ora....t1.type ONLINE ONLINE rac2
ora.scan1.vip ora....ip.type ONLINE ONLINE rac1
[grid@rac1 ~]$
8.安装Oracle数据库软件(Oracle Database)
8.1 rac1上用oracle用户操作
su - oracle
cd /u01/
unzip linux.x64_11gR2_database_1of2.zip -d /u01/app
unzip linux.x64_11gR2_database_2of2.zip -d /u01/app
ls -l /u01/app |grep database
drwxrwxr-x 8 oracle oinstall 128 Aug 1 22:20 database
ls -l /u01/app/database
total 16
drwxr-xr-x 12 oracle oinstall 203 Aug 17 2009 doc
drwxr-xr-x 4 oracle oinstall 223 Aug 15 2009 install
drwxrwxr-x 2 oracle oinstall 61 Aug 15 2009 response
drwxr-xr-x 2 oracle oinstall 34 Aug 15 2009 rpm
-rwxr-xr-x 1 oracle oinstall 3226 Aug 15 2009 runInstaller
drwxrwxr-x 2 oracle oinstall 29 Aug 15 2009 sshsetup
drwxr-xr-x 14 oracle oinstall 4096 Aug 15 2009 stage
-rw-r--r-- 1 oracle oinstall 5402 Aug 18 2009 welcome.html
解压会释放database目录,如果释放的目录和文件权限不对的话需要执行: chown –R oracle:oinstall /u01/app/database
8.2 安装前执行检查脚本验证环境(我直接跳过该步骤,由于我安装grid时已经都同步配置过了,应该不会有问题,就不检测了,直接跳到8.3)
/home/grid/grid/runcluvfy.sh stage -pre dbinst -n oracle-rac1,oracle-rac2 -verbose
8.3 静默安装前编辑应答文件
cd /u01/app/database
cp -r response bak.response
vim response/db_install.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
#------------------------------------------------------------------------------
# Specify the installation option.
# It can be one of the following:
# 1. INSTALL_DB_SWONLY //只安装数据库软件
# 2. INSTALL_DB_AND_CONFIG //安装数据库软件 & 建库
# 3. UPGRADE_DB //升级数据库
#-------------------------------------------------------------------------------
oracle.install.option=INSTALL_DB_SWONLY
#主机名,如果没有设置,则填localhost
ORACLE_HOSTNAME=rac1
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=en,zh_CN
#ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
ORACLE_HOME=/opt/oracle/product/11.2.0
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.isCustomInstall=false
oracle.install.db.customComponents=oracle.server:11.2.0.1.0,oracle.sysman.ccr:10.2.7.0.0,oracle.xdk:11.2.0.1.0,oracle.rdbms.oci:11.2.0.1.0,oracle.network:11.2.0.1.0,oracle
.network.listener:11.2.0.1.0,oracle.rdbms:11.2.0.1.0,oracle.options:11.2.0.1.0,oracle.rdbms.partitioning:11.2.0.1.0,oracle.oraolap:11.2.0.1.0,oracle.rdbms.dm:11.2.0.1.0,or
acle.rdbms.dv:11.2.0.1.0,orcle.rdbms.lbac:11.2.0.1.0,oracle.rdbms.rat:11.2.0.1.0
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oper
oracle.install.db.CLUSTER_NODES=rac1,rac2
#下列参数建库的话需要填、不建库也可以不填
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=orcl
oracle.install.db.config.starterdb.SID=orcl
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=true
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=true
#所有用户名的密码
oracle.install.db.config.starterdb.password.ALL=1q2w3e
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.SYSMAN=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.control=DB_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.dbcontrol.enableEmailNotification=false
oracle.install.db.config.starterdb.dbcontrol.emailAddress=
oracle.install.db.config.starterdb.dbcontrol.SMTPServer=
#是否自动备份
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=
oracle.install.db.config.starterdb.storageType=ASM_STORAGE
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
#使用ASM存储数据库文件才需要指定
oracle.install.db.config.asm.diskGroup=DATA
#使用ASM存储数据库文件才需要指定
oracle.install.db.config.asm.ASMSNMPPassword=1q2w3e
#上面参数,建库需要填,不建库可以不填
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
#11g的一个bug,这里必须设置为true,否则安装会报错
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
8.4 执行静默安装数据库
./runInstaller -silent -ignorePrereq -ignoreSysPrereqs -responseFile /u01/app/database/response/db_install.rsp
rac1安装过程中会自动将软件拷贝到rac2节点。安装成功后,会提示执行root.sh脚本:
[oracle@rac1 database]$ The following configuration scripts need to be executed as the "root" user.
#!/bin/sh
#Root scripts to run
/u01/app/oracle/product/11.2.0/root.sh
To execute the configuration scripts:
1. Open a terminal window
2. Log in as "root"
3. Run the scripts
4. Return to this window and hit "Enter" key to continue
Successfully Setup Software.
分别在rac1, rac2上以root执行脚本:
/u01/app/oracle/product/11.2.0/root.sh
[root@rac1 ~]# /u01/app/oracle/product/11.2.0/root.sh
Check /u01/app/oracle/product/11.2.0/install/root_rac1_2020-08-02_00-00-55.log for the output of root script
[root@rac1 ~]#
[root@rac1 ~]# cat /u01/app/oracle/product/11.2.0/install/root_rac1_2020-08-02_00-00-55.log
Running Oracle 11g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/11.2.0
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
[root@rac1 ~]#
到此,Oracle Database软件安装完毕。接下来建库。
9.dbca静默建库(db)
9.1 执行dbca命令静默建库(orcl)
dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbName orcl -sid orcl -sysPassword 1q2w3e -systemPassword 1q2w3e -storageType ASM -diskGroupName DATA -nationalCharacterSet "AL16UTF16" -characterSet "AL32UTF8" -nodeinfo rac1,rac2 -sampleSchema false -asmSysPassword 1q2w3e -obfuscatedPasswords false
参数说明:
-silent : 静默安装
-createDatabase : 创建数据库
-templateName : 模板 General_Purpose.dbc
-gdbName : 全局名称
-sid : 实例名
-sysPassword : sys 用户的密码
-systemPassword : system 用户的密码
-storageType : 存储类型,此处是 ASM
-diskGroupName : 卷组名称
-nationalCharacterSet : 国家字符集,Valid values : "UTF8" or "AL16UTF16",如果不设,默认值为 "AL16UTF16"
-characterSet : 字符集
-nodeinfo : 节点信息,此处应填节点名称
-sampleSchema : 是否需要 sample 实例,此处填 false
-asmSysPassword : asm 用户密码
-obfuscatedPasswords : Set to true if passwords are encrypted,默认为false
关于 characterSet 和 nationalCharacterSet
characterSet : 影响 char,varchar,varchar2 等数据类型
nationalCharacterSet :影响 nchar,nvarchar,nvarchar2 等数据类型
建库报错:找不到 listener 监听服务
# tail -f /u01/app/oracle/cfgtoollogs/dbca/orcl.log
Cluster database creation requires Default listener configured and running in Grid Infrastructure home. Use NETCA in Grid Infrastructure home - "/u01/app/11.2.0/grid" to configure a listener before proceeding.
定位排查:
我还没有启动监听服务?
[oracle@rac1 ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 02-AUG-2020 00:45:26
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
[oracle@rac1 ~]$
直接通过 lsnrctl status 查看监听服务不存在。
但发现 1521 端口已经监听中了:
$ netstat -an |grep 1521
tcp 0 0 192.168.235.64:1521 0.0.0.0:* LISTEN
问题原因,应该是:没有 listener 服务添加入 crs 中。
将监听服务 listener 服务添加入 crs 中:
$ exit
[root@rac1 ~]# su - grid
Last login: Sat Aug 1 21:52:50 CST 2020 on pts/1
先查看一下 crs 状态
[grid@rac1 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.ARCH.dg ora....up.type ONLINE ONLINE rac1
ora.DATA.dg ora....up.type ONLINE ONLINE rac1
ora....N1.lsnr ora....er.type ONLINE ONLINE rac1
ora.OCR.dg ora....up.type ONLINE ONLINE rac1
ora.asm ora.asm.type ONLINE ONLINE rac1
ora.eons ora.eons.type ONLINE ONLINE rac1
ora.gsd ora.gsd.type OFFLINE OFFLINE
ora....network ora....rk.type ONLINE ONLINE rac1
ora.oc4j ora.oc4j.type OFFLINE OFFLINE
ora.ons ora.ons.type ONLINE ONLINE rac1
ora....SM1.asm application ONLINE ONLINE rac1
ora.rac1.gsd application OFFLINE OFFLINE
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip ora....t1.type ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora.rac2.gsd application OFFLINE OFFLINE
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip ora....t1.type ONLINE ONLINE rac2
ora.scan1.vip ora....ip.type ONLINE ONLINE rac1
[grid@rac1 ~]$
使用srvctl指令查看listener服务
[grid@oel11g ~]$ srvctl status listener
PRCN-2044 : No listener exists
没有listener服务添加入crs中,通过如下指令加 listener 加入到 crs 服务中:
[grid@oel11g ~]$ srvctl add listener
[grid@oel11g ~]$ srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is not running
监听服务已加入 crs 服务中
启动 listener 服务
[grid@oel11g ~]$ srvctl start listener
[grid@oel11g ~]$ srvctl status listener
查看监听服务状态
[grid@rac1 ~]$ srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): rac1,rac2
查看集群状态
[grid@rac1 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.ARCH.dg ora....up.type ONLINE ONLINE rac1
ora.DATA.dg ora....up.type ONLINE ONLINE rac1
ora....ER.lsnr ora....er.type ONLINE ONLINE rac1
ora....N1.lsnr ora....er.type ONLINE ONLINE rac1
ora.OCR.dg ora....up.type ONLINE ONLINE rac1
ora.asm ora.asm.type ONLINE ONLINE rac1
ora.eons ora.eons.type ONLINE ONLINE rac1
ora.gsd ora.gsd.type OFFLINE OFFLINE
ora....network ora....rk.type ONLINE ONLINE rac1
ora.oc4j ora.oc4j.type OFFLINE OFFLINE
ora.ons ora.ons.type ONLINE ONLINE rac1
ora....SM1.asm application ONLINE ONLINE rac1
ora....C1.lsnr application ONLINE ONLINE rac1
ora.rac1.gsd application OFFLINE OFFLINE
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip ora....t1.type ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....C2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application OFFLINE OFFLINE
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip ora....t1.type ONLINE ONLINE rac2
ora.scan1.vip ora....ip.type ONLINE ONLINE rac1
[grid@rac1 ~]$
监听服务起来后,此时便可以继续建库了。
重新执行静默建库成功。
查看集群状态(db服务: ora.orcl.db)
SQL> exit
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ crsctl stat res ora.orcl.db -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.orcl.db
1 ONLINE ONLINE rac1 Open
2 ONLINE ONLINE rac2 Open
[grid@rac1 ~]$
看到集群中已有 db 服务,状态 online。说明刚刚操作都正常了。
通过dbca创建的库,会自动将数据库资源添加到CRS管理,无需手动再添加。
srvctl查看Oracle实例(数据库)状态:
[grid@rac1 ~]$ srvctl status database -d orcl
Instance orcl1 is running on node rac1
Instance orcl2 is running on node rac2
srvctl查询当个数据库实例状态:
[grid@rac1 ~]$ srvctl status instance -d orcl -i orcl1
Instance orcl1 is running on node rac1
显示所有配置的数据库
[grid@rac1 ~]$ srvctl config database
orcl
查看数据库配置
[grid@rac1 ~]$ srvctl config database -d orcl -a
Database unique name: orcl
Database name: orcl
Oracle home: /u01/app/oracle/product/11.2.0
Oracle user: oracle
Spfile: +DATA/orcl/spfileorcl.ora
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: orcl
Database instances: orcl1,orcl2
Disk Groups: DATA
Services:
Database is enabled
Database is administrator managed
[grid@rac1 ~]$
查看scan状态
[grid@rac1 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node rac1
[grid@rac1 ~]$
节点应用程序状态
srvctl status nodeapps
sys 登录数据库
[oracle@rac1 ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Sun Aug 2 03:53:02 2020
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected.
SQL>
9.2 rac1创建数据库默认表空间 user_data
create tablespace user_data datafile '+data/orcl/datafile/my_data01.dbf' size 100m
autoextend on next 50m maxsize unlimited segment space management auto;
alter database default tablespace user_data;
9.3 rac1创建数据库临时表空间
create temporary tablespace user_temp tempfile '+data/orcl/datafile/my_temp01.dbf' size 200M REUSE
autoextend on next 50M MAXSIZE Unlimited
extent management local uniform size 256K;
9.4 rac1创建undo表空间 undotbs2
create undo tablespace undotbs2 datafile '+data/orcl/datafile/my_undotbs2_01.dbf' size 100m
autoextend on next 10m maxsize unlimited segment space management auto;
9.5 创建用户和授权
create user test identified by "1q2w3e" default tablespace user_data temporary tablespace user_temp;
grant connect,resource,dba to test;
create user jack identified by "1q2w3e" default tablespace user_data temporary tablespace user_temp;
grant connect,resource,dba to jack;
查询表空间的文件路径
select * from dba_data_files;
查看当前用户的缺省表空间
select username,default_tablespace from user_users;
9.6 远程连接数据库测试
通过Public IP连接
jdbc:oracle:thin:@//192.168.235.60:1521:orcl #ServiceName
jdbc:oracle:thin:@192.168.235.60:1521:orcl1 #rac1 SID
jdbc:oracle:thin:@//192.168.235.61:1521:orcl #ServiceName
jdbc:oracle:thin:@192.168.235.61:1521:orcl2 #rac2 SID
通过VIP连接:
jdbc:oracle:thin:@//192.168.235.62:1521:orcl #ServiceName
jdbc:oracle:thin:@192.168.235.62:1521:orcl1 #rac2 SID
jdbc:oracle:thin:@//192.168.235.63:1521:orcl #ServiceName
jdbc:oracle:thin:@192.168.235.63:1521:orcl2 #rac2 SID
通过SCAN连接
jdbc:oracle:thin:@//racscan:1521:orcl
jdbc:oracle:thin:@//192.168.235.64:1521:orcl
如果要通过SCAN连接注意:如果没有配置DNS,需要客户端hosts文件中添加,才能连接:
# connect RAC by SCAN
192.168.235.64 racscan
192.168.235.62 rac1vip
192.168.235.63 rac2vip
至此手动建库结束!
------ 到此全部安装完毕(grid -> Oracle Database -> DB) ------
==============================================================================
附:
Oracle RAC 常用命令
待后续补充
Oracle RAC的启动和关闭
默认安装后,Oracle RAC会自动启动。如果要手动关闭和启动操作,相关顺序和命令参考如下
启动顺序:节点集群服务->ASM实例->数据库(实例)->监听服务
关闭顺序:监听服务->数据库(实例)->ASM实例->节点集群服务
Oracle RAC 启动&关闭:
注意:
1.Oracle 11g开始,如果在ASM磁盘组中存储OCR和VOTEDISK,那么不能单独启动或关闭Oracle RAC数据库系统中的 asm 实例,必须使用 crsctl 命令来启动或停止crs(会自动同步启动/停止ASM实例和nodeapps),因此 and 和 nodeapps 不需要单独启动/关闭了。
2.crsctl stop crs -all 必须以root执行。
3.crsctl stop cluster 加了 -all 参数,则只需要在1个节点执行
4.crsctl strat/stop cluster 和 crsctl strat/stop crs 的区别:
crsctl strat/stop cluster 既可以管理本地clusterware stack( -n rac1),也可以管理整个集群( -all )
crsctl start/stop crs 仅管理本地节点的clusterware stack的启停,包含启动ohasd进程
关闭Oracle RAC:
crsctl status server
crsctl status resource -t
su - grid
srvctl stop listener #listener, srvctl status listener. 也可执行 srvctl stop listener -n rac1,rac2
srvctl stop database -d orcl #database, 查询数据库实例可以通过:select instance_name from v$instance; srvctl status database -d orcl
#也可以执行 srvctl stop instance -d orcl -i rac1,rac2
su - root
crsctl stop cluster -all #停止crs集群软件,必须root执行。停止集群软件时还会同步停止 asm & nodeapps(crs 集群服务)。也可执行 crs_stop -all
crsctl status server
crs_stat -t -v
启动Oracle RAC
su - root
crsctl start cluster -all #启动CRS集群软件,必须root执行。停止集群软件时还会同步停止 asm(ASM服务) & nodeapps(CRS集群服务)。也可执行 crs_start -all
crsctl status server #或执行 crs_stat -t -v
su - grid
srvctl start database -d orcl #database, 查询数据库实例可以通过:select instance_name from v$instance; srvctl status database -d orcl
#也可以执行: srvctl start instance -d orcl -i rac1,rac2
srvctl start listener #listener, srvctl status listener
crsctl status resource -t
如果启动Oracle RAC报错:
[root@rac1 ~]# crsctl start cluster -all
CRS-4639: Could not contact Oracle High Availability Services
CRS-4000: Command Start failed, or completed with errors.
原因:crs没有启动,Oracle的bug。
解决办法:启动之前需要执行:
/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1
然后再执行启动命令
需要查看相关日志,可以到grid目录下$ORACLE_HOME找
其他常用命令
查看Oracle实例(数据库)状态
$ srvctl status database -d orcl
Instance orcl1 is running on node rac1
Instance orcl2 is running on node rac2
#查看Oracle单个实例(instance)状态
$ srvctl status instance -d orcl -i orcl1
Instance orcl1 is running on node rac1
显示配置的所有数据库
$ srvctl config database
orcl
查看数据库配置
$ srvctl config database -d orcl -a
Database unique name: orcl
Database name: orcl
Oracle home: /u01/app/oracle/product/11.2.0
Oracle user: oracle
Spfile: +DATA/orcl/spfileorcl.ora
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: orcl
Database instances: orcl1,orcl2
Disk Groups: DATA
Services:
Database is enabled
Database is administrator managed
查看scan状态
$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node rac1
查看节点应用程序状态
srvctl status nodeapps