3、存储规划
Oracle RAC 使用 ASM 存储来存放数据,通常使用 OCR 和 DATA 两个磁盘组!
| 磁盘名称 | 磁盘用途 | 磁盘大小 |
|---|
| asm-ocr | OCR/Voting File | 10G |
| asm-data | Data Files | 20G |
二、主机配置
📢 注意: 以下标题中(rac01&rac02)代表节点一和节点二都需要执行,(rac01)代表只需要节点一执行。
1、Linux主机安装(rac01&rac02)
安装 Linux 服务器可选择:Centos,Redhat,Oracle Linux。
📢 注意: 上述 Linux 安装包 和 Oracle 安装包 可点击链接跳转获取:
📢 注意: Linux 系统的安装本文不做详细演示!

📢 注意: Linux 系统的安装本文不做详细演示!
2、配置yum源并安装依赖包(rac01&rac02)
Linux远程连接工具:
- 本文将使用XShell和Xftp工具,安装包可以在官网下载,也可私信博主获取。
- 其他工具也可以,比如:putty,SecureCRT 等等工具。
Parallels Desktop挂载Linux主机镜像:

VMware Workstation挂载Linux镜像:

📢 注意: 需要提前挂载系统镜像,可参考:Linux 配置本地 yum 源(6/7/8)!
手动挂载镜像源:
1mount /dev/cdrom /mnt
2df -Th

配置yum源:
1cat <<EOF>>/etc/yum.repos.d/local.repo
2[local]
3name=local
4baseurl=file:///mnt
5gpgcheck=0
6enabled=1
7EOF
8yum repolist all

安装依赖包:
1yum groupinstall -y "Server with GUI"
2yum install -y bc \
3binutils \
4compat-libcap1 \
5compat-libstdc++-33 \
6gcc \
7gcc-c++ \
8elfutils-libelf \
9elfutils-libelf-devel \
10glibc \
11glibc-devel \
12ksh \
13libaio \
14libaio-devel \
15libgcc \
16libstdc++ \
17libstdc++-devel \
18libxcb \
19libX11 \
20libXau \
21libXi \
22libXtst \
23libXrender \
24libXrender-devel \
25make \
26net-tools \
27nfs-utils \
28smartmontools \
29sysstat \
30e2fsprogs \
31e2fsprogs-libs \
32fontconfig-devel \
33expect \
34unzip \
35openssh-clients \
36readline* \
37tigervnc* \
38psmisc --skip-broken
手动上传并安装依赖包:
1cd /soft
2rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

检查依赖包安装情况:
1rpm -q bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ elfutils-libelf elfutils-libelf-devel glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXtst libXrender libXrender-devel make net-tools nfs-utils smartmontools sysstat e2fsprogs e2fsprogs-libs fontconfig-devel expect unzip openssh-clients readline | grep "not installed"

📢 注意: 依赖一定要安装成功,否则可能导致安装失败!
3、网络配置
Linux 7 版本可以使用 nmcli 命令来配置网络,以下命令中的 IP地址、子网掩码、网关 和 网卡名称 请根据实际情况进行修改!
rac01:
1##配置Public IP
2nmcli connection modify eth0 ipv4.addresses 10.211.55.100/24 ipv4.gateway 10.211.55.1 ipv4.method manual autoconnect yes
3##配置Private IP
4nmcli connection modify eth1 ipv4.addresses 1.1.1.1/24 ipv4.method manual autoconnect yes
5##生效
6nmcli connection up eth0
7nmcli connection up eth1
8nmcli connection show

rac02:
1##配置Public IP
2nmcli connection modify eth0 ipv4.addresses 10.211.55.101/24 ipv4.gateway 10.211.55.1 ipv4.method manual autoconnect yes
3##配置Private IP
4nmcli connection modify eth1 ipv4.addresses 1.1.1.2/24 ipv4.method manual autoconnect yes
5##生效
6nmcli connection up eth0
7nmcli connection up eth1
8nmcli connection show

最后,配置好网络后,输入命令 ip a 查看网络是否配置成功,尝试 ping 测试网络。
4、存储配置(rac01&rac02)
Windows 下配置 ISCSI 共享存储可参考:
配置好共享存储后,在 Linux 主机连接共享存储:
1##iscsi识别共享存储
2yum install -y iscsi-initiator-utils*
3##输出targetname,10.211.55.22为iscsi共享存储设备IP地址
4iscsiadm -m discovery -t st -p 10.211.55.22
5##连接共享存储
6iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:10.211.55.22-lucifer -p 10.211.55.22 -l
7lsblk

安装 multipath 绑定多路径:
1##安装multipath
2yum install -y device-mapper*
3mpathconf --enable --with_multipathd y
4##查看共享盘的scsi_id
5/usr/lib/udev/scsi_id -g -u /dev/sdb
6/usr/lib/udev/scsi_id -g -u /dev/sdc
配置 multipath 文件:
1cat <<EOF>/etc/multipath.conf
2defaults {
3 user_friendly_names yes
4}
5
6blacklist {
7 devnode "^sda"
8}
9
10multipaths {
11 multipath {
12 wwid "27e2b3ddbb7fbeb41"
13 alias asm_ocr
14 }
15 multipath {
16 wwid "2852b96c12f460ade"
17 alias asm_data
18 }
19}
20EOF
📢 注意: wwid的值为上面获取的scsi_id,alias可自定义,这里配置1块OCR盘,1块DATA盘!

激活multipath多路径:
1multipath -F
2multipath -v2
3multipath -ll

配置UDEV绑盘:
1rm -rf /dev/mapper/udev_info
2rm -rf /etc/udev/rules.d/99-oracle-asmdevices.rules
3cd /dev/mapper
4for i in asm_*; do
5 printf "%s %s\n" "$i" "$(udevadm info --query=all --name=/dev/mapper/"$i" | grep -i dm_uuid)" >>/dev/mapper/udev_info
6done
7while read -r line; do
8 dm_uuid=$(echo "$line" | awk -F'=' '{print $2}')
9 disk_name=$(echo "$line" | awk '{print $1}')
10 echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${dm_uuid}\",SYMLINK+=\"${disk_name}\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0660\"" >>/etc/udev/rules.d/99-oracle-asmdevices.rules
11done </dev/mapper/udev_info
12##重载udev
13udevadm control --reload-rules
14udevadm trigger --type=devices
15ll /dev/asm*

📢 注意: 这里由于没有创建 grid 用户,因此权限和组是 root,等创建 grid 用户后,再次重载 udev 即可!
确认配置完成后,分别在两个节点输入命令 ls /dev/asm* 查看是否已经成功绑定!
5、hosts文件配置(rac01&rac02)
配置hostname:
1hostnamectl set-hostname p19c01
2hostnamectl set-hostname p19c02
配置hosts文件:
1cat <<EOF>>/etc/hosts
2#Public IP
310.211.55.100 p19c01
410.211.55.101 p19c02
5
6#Private IP
71.1.1.1 p19c01-priv
81.1.1.2 p19c02-priv
9
10#Vip IP
1110.211.55.102 p19c01-vip
1210.211.55.103 p19c02-vip
13
14#Scan IP
1510.211.55.105 p19c-scan
16EOF

6、防火墙配置(rac01&rac02)
1systemctl stop firewalld.service
2systemctl disable firewalld.service
3systemctl status firewalld.service

7、selinux 配置(rac01&rac02)
配置 selinux 临时生效:
1sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2setenforce 0
3getenforce

📢 注意: selinux 配置需要重启生效!
8、时间同步配置(rac01&rac02)
禁用chronyd:
1yum install -y chrony
2timedatectl set-timezone Asia/Shanghai
3systemctl stop chronyd.service
4systemctl disable chronyd.service

配置ntpdate时间同步计划任务:
1yum install -y ntpdate
2##10.211.55.200为时间服务器IP,每天12点同步系统时间
3cat <<EOF>>/var/spool/cron/root
400 12 * * * /usr/sbin/ntpdate -u 10.211.55.200 && /usr/sbin/hwclock -w
5EOF
6##查看计划任务
7crontab -l
8##手动执行
9/usr/sbin/ntpdate -u 10.211.55.200 && /usr/sbin/hwclock -w

9、关闭透明大页和NUMA(rac01&rac02)
Linux 7 配置内核文件,关闭透明大页和numa:
1sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub
2grub2-mkconfig -o /boot/grub2/grub.cfg
重启后检查是否生效:
1cat /sys/kernel/mm/transparent_hugepage/enabled
2cat /proc/cmdline

📢 注意: 关闭 透明大页 和 numa 的配置,需要重启主机生效!
10、avahi-daemon 配置(rac01&rac02)
有些主机安装选择最小化安装,没有安装 avahi-daemon 功能,建议安装之后禁用,防止以后误操作导致出问题:
1yum install -y avahi*
2systemctl stop avahi-daemon.socket
3systemctl stop avahi-daemon.service
4pgrep -f avahi-daemon | awk '{print "kill -9 "$2}'
5systemctl disable avahi-daemon.socket
6systemctl disable avahi-daemon.service
配置 NOZEROCONF:
1cat <<EOF>>/etc/sysconfig/network
2NOZEROCONF=yes
3EOF

11、系统参数配置(rac01&rac02)
安装 Oracle 数据库需要配置系统参数,以下使用脚本命令一键式配置:
1memTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')
2totalMemory=$((memTotal / 2048))
3shmall=$((memTotal / 4))
4if [ $shmall -lt 2097152 ]; then
5 shmall=2097152
6fi
7shmmax=$((memTotal * 1024 - 1))
8if [ "$shmmax" -lt 4294967295 ]; then
9 shmmax=4294967295
10fi
11cat <<EOF>>/etc/sysctl.conf
12fs.aio-max-nr = 1048576
13fs.file-max = 6815744
14kernel.shmall = $shmall
15kernel.shmmax = $shmmax
16kernel.shmmni = 4096
17kernel.sem = 250 32000 100 128
18net.ipv4.ip_local_port_range = 9000 65500
19net.core.rmem_default = 262144
20net.core.rmem_max = 4194304
21net.core.wmem_default = 262144
22net.core.wmem_max = 1048576
23net.ipv4.conf.eth0.rp_filter = 1
24net.ipv4.conf.eth1.rp_filter = 2
25EOF
生效系统参数:

12、系统资源限制配置(rac01&rac02)
配置limits.conf:
1cat <<EOF>>/etc/security/limits.conf
2oracle soft nofile 1024
3oracle hard nofile 65536
4oracle soft stack 10240
5oracle hard stack 32768
6oracle soft nproc 2047
7oracle hard nproc 16384
8oracle hard memlock 134217728
9oracle soft memlock 134217728
10
11grid soft nofile 1024
12grid hard nofile 65536
13grid soft stack 10240
14grid hard stack 32768
15grid soft nproc 2047
16grid hard nproc 16384
17EOF
配置pam.d/login:
1cat <<EOF>>/etc/pam.d/login
2session required pam_limits.so
3session required /lib64/security/pam_limits.so
4EOF

13、用户及组、目录创建(rac01&rac02)
创建安装 Oracle 数据库所需的用户、组以及安装目录:
1/usr/sbin/groupadd -g 54321 oinstall
2/usr/sbin/groupadd -g 54322 dba
3/usr/sbin/groupadd -g 54323 oper
4/usr/sbin/groupadd -g 54324 backupdba
5/usr/sbin/groupadd -g 54325 dgdba
6/usr/sbin/groupadd -g 54326 kmdba
7/usr/sbin/groupadd -g 54327 asmdba
8/usr/sbin/groupadd -g 54328 asmoper
9/usr/sbin/groupadd -g 54329 asmadmin
10/usr/sbin/groupadd -g 54330 racdba
grid/oracle 用户创建:
1/usr/sbin/useradd -u 11012 -g oinstall -G asmadmin,asmdba,asmoper,dba,racdba,oper grid
2/usr/sbin/useradd -u 54321 -g oinstall -G asmdba,dba,backupdba,dgdba,kmdba,racdba,oper oracle
3##修改用户密码为oracle
4echo "oracle" |passwd oracle --stdin
5echo "oracle" |passwd grid --stdin
6##查看用户组
7id grid
8id oracle
9##重载udev
10udevadm control --reload-rules
11udevadm trigger --type-devices
12ll /dev/asm*

📢 注意: 这里udev重载之后,绑盘权限已经变成 grid 了!
创建软件目录:
1mkdir -p /u01/app/19.3.0/grid
2mkdir -p /u01/app/grid
3mkdir -p /u01/app/oracle/product/19.3.0/db
4mkdir -p /u01/app/oraInventory
5mkdir -p /backup
6mkdir -p /home/oracle/scripts
7chown -R oracle:oinstall /backup
8chown -R oracle:oinstall /home/oracle/scripts
9chown -R grid:oinstall /u01
10chown -R grid:oinstall /u01/app/grid
11chown -R grid:oinstall /u01/app/19.3.0/grid
12chown -R grid:oinstall /u01/app/oraInventory
13chown -R oracle:oinstall /u01/app/oracle
14chmod -R 775 /u01

14 环境变量配置(rac01&rac02)
grid用户环境变量:
1cat <<EOF>>/home/grid/.bash_profile
2################OracleBegin#########################
3umask 022
4export TMP=/tmp
5export TMPDIR=\$TMP
6export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
7export ORACLE_BASE=/u01/app/grid
8export ORACLE_HOME=/u01/app/19.3.0/grid
9export ORACLE_TERM=xterm
10export TNS_ADMIN=\$ORACLE_HOME/network/admin
11export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
12export ORACLE_SID=+ASM1
13export PATH=/usr/sbin:\$PATH
14export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH
15alias sas='sqlplus / as sysasm'
16export PS1="[\`whoami\`@\`hostname\`:"'\$PWD]\$ '
17EOF

📢 注意: 每个节点的 ORACLE_SID 不一样(+ASM1/+ASM2),需要自行修改!
oracle用户环境变量:
1cat <<EOF>>/home/oracle/.bash_profile
2################OracleBegin#########################
3umask 022
4export TMP=/tmp
5export TMPDIR=\$TMP
6export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
7export ORACLE_BASE=/u01/app/oracle
8export ORACLE_HOME=\$ORACLE_BASE/product/19.3.0/db
9export ORACLE_HOSTNAME=p19c01
10export ORACLE_TERM=xterm
11export TNS_ADMIN=\$ORACLE_HOME/network/admin
12export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
13export ORACLE_SID=p19c01
14export PATH=/usr/sbin:\$PATH
15export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH
16alias sas='sqlplus / as sysdba'
17export PS1="[\`whoami\`@\`hostname\`:"'\$PWD]\$ '
18################OracleEnd#########################
19EOF

📢 注意: 每个节点的 ORACLE_HOSTNAME(p19c01/p19c02)和 ORACLE_SID(p19c01/p19c02)不一样,需要自行修改!
15、安装介质上传解压(rac01)
安装包使用 XFTP 工具进行上传,只需要上传至一节点 /soft 目录下:
1##创建安装介质存放目录
2mkdir /soft
3##上传安装介质到/soft目录
4LINUX.X64_193000_db_home.zip
5LINUX.X64_193000_grid_home.zip
6p32545008_190000_Linux-x86-64.zip
7p6880880_190000_Linux-x86-64.zip
📢 注意: 19C 的安装包需要解压到对应的 ORACLE_HOME 目录下!
静默解压grid安装包:
1chown -R grid:oinstall /soft
2su - grid -c "unzip -q /soft/LINUX.X64_193000_grid_home.zip -d /u01/app/19.3.0/grid/"
静默解压oracle安装包:
1chown -R oracle:oinstall /soft
2su - oracle -c "unzip -q /soft/LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.3.0/db/"
静默解压补丁安装包:
1cd /soft
2##解压RU补丁包
3chown -R grid:oinstall /soft
4su - grid -c "unzip -q -o /soft/p6880880_190000_Linux-x86-64.zip -d /u01/app/19.3.0/grid"
5##解压OPatch补丁包
6su - grid -c "unzip -q /soft/p32545008_190000_Linux-x86-64.zip -d /soft"
7chown -R oracle:oinstall /soft
8su - oracle -c "unzip -q -o /soft/p6880880_190000_Linux-x86-64.zip -d /u01/app/oracle/product/19.3.0/db"

📢 注意: 由于19C支持安装grid软件前打RU补丁,因此提前解压OPatch和RU补丁,为安装做准备!
root用户下,cvuqdisk安装(rac01&rac02):

1rpm -ivh /u01/app/19.3.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm
2##传输到节点二安装
3scp cvuqdisk-1.0.10-1.rpm p19c02:/soft
4rpm -ivh /soft/cvuqdisk-1.0.10-1.rpm

📢 注意: 19C 版本的 cvu 包换位置了,目录为:$ORACLE_HOME/cv/rpm/,以上所有软件只需要在节点一上传解压即可。
至此,准备工作已经完成,安装前重启主机!
重启后,检查 selinux、numa 和透明大页:

三、安装Grid软件(rac01)
关于 VNC 配置具体可参考文章:
配置 grid 用户 vnc 图形界面:
1##root用户下切换到grid用户
2chown -R grid:oinstall /soft
3su - grid
4##执行vncserver,按提示输入密码即可
5vncserver

在 vnc 客户端界面输入 10.211.55.100:1,输入刚才输入的密码即可连接:

打开终端命令行:

开始安装:
1##应用环境变量
2source ~/.bash_profile
3##进入安装目录
4cd $ORACLE_HOME
5##执行安装程序开始安装,通过-applyRU参数指向补丁解压位置,提前安装grid补丁
6./gridSetup.sh -applyRU /soft/32545008

注意: 可以看到,已经开始对ORACLE_HOME进行补丁安装。
补丁打完,进入安装界面,选择集群安装:

选择 standlone 模式:

修改 scan 名称,与 hosts 文件配置 scan 名称保持一致:

添加节点二信息,进行互信:

输入 grid 用户密码,创建用户时两节点必须保持一致。先执行 setup,再执行 test,开始互信:


确保对应网卡和IP网段对应即可,19C 心跳网段需要选 ASM & Private,用于 ASM 实例的托管:

选择存储类型,19C 只有两个选项,ASM 只能选 Flex:

GIMR,这里不选择安装:

安装时填创建 OCR 盘,一块盘冗余 External,目录选择udev绑的路径:


填写 sys/system 密码,需要记住自己设置的密码:

默认即可:

EM 选择不开,比较占资源,后面安装好后可以配置:

默认即可:




安装预检查,由于我们只配了一个SCAN,所以关于 DNS 相关的都无视,继续:

开始安装 grid:

两节点顺序执行 root.sh,先节点一执行完,再节点二执行:



两个节点的 root.sh 都执行完之后,继续安装:

这个错误查过 MOS 可以忽略:

安装完成:

检查集群状态:
1su - grid
2crsctl stat res -t


检查 grid 补丁:
1su - grid
2opatch lspatches
3sqlplus -version

三、创建 ASM 数据盘 DATA
这里创建的 DATA 磁盘组主要用于存放数据文件、日志文件等数据库文件!
使用图形化方式添加 ASM DATA 数据盘:



检查 asm 磁盘:
建议重启两台主机,检查重启后 Grid 集群是否正常运行!
四、安装Oracle软件
配置 oracle 用户 vnc 图形界面:
1chown -R oracle:oinstall /soft
2##root用户下切换到grid用户
3su - oracle
4##执行vncserver,按提示输入密码即可
5vncserver
6##在vnc客户端界面输入10.211.55.100:1,输入刚才输入的密码即可连接。

在 vnc 客户端界面输入 10.211.55.100:1,输入刚才输入的密码即可连接:


右键打开终端:

开始安装:
1##应用环境变量
2source ~/.bash_profile
3##进入ORACLE_HOME目录
4cd $ORACLE_HOME
5##执行安装程序开始安装,加上jar包防止弹窗不显示问题
6./runInstaller -applyRU /soft/32545008/

📢 注意: 可以看到,已经开始对 ORACLE_HOME 进行补丁安装!
补丁打完,进入安装界面,选择仅安装 Oracle 软件:

选择集群模式:

输入 oracle 用户密码,先执行 setup,再执行 test,开始互信:


选择企业版:

默认即可:



安装预检查,由于我们只配了一个 SCAN,所以关于 DNS 相关的都无视,继续:

开始安装:

root 用户下,两个节点顺序执行 root.sh:


安装完成:

检查补丁版本:
1su - oracle
2opatch lspatches
3sqlplus -version
至此,Oracle 软件已成功安装!
五、创建数据库实例
这里建库还是在第四步安装 Oracle 软件的 vnc 界面中继续:

选择创建数据库实例:

选择自定义模式:

选择基础安装即可:

选择节点:

填写实例名 p19c0,由于默认添加为1,2,实例名规划为 p19c01/02,所以需要加个0;选择安装 CDB 模式,不创建PDB:

默认即可,使用 OMF 模式:

不开闪回,不开归档,可以建完实例后再配置:

配置内存,使用 ASMM 模式,数据库总内存占用物理内存 70%-90% 之间:

使用基础模式安装,block_size 是无法修改的,process 进程数修改为1500,根据实际情况修改:

配置数据库字符集,默认 AL32UTF8,国家字符集,默认 AL16UTF16;根据实际情况修改:

建议全关掉,有可能导致 bug:

填写sys/system密码:

默认即可:

安装预检查,DNS 相关忽略:

开始安装:


经过漫长的等待,数据库建完了:

至此,数据库实例创建完成!
六、数据库优化配置(rac01)
1、开启数据库归档模式
关于开启归档模式,具体可参考文章:
1##关闭数据库实例
2srvctl stop database -d p19c0
3##开启单个节点到mount模式
4srvctl start instance -d p19c0 -i p19c01 -o mount
5##开启归档
6sqlplus / as sysdba
7alter database archivelog;
8##设置归档路径
9ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=+DATA';
10exit;
11##重启数据库实例
12srvctl stop instance -d p19c0 -i p19c01
13srvctl start database -d p19c0
14##检查归档
15sqlplus / as sysdba
16archive log list

2、配置定期删除归档计划任务
关于归档日志删除,具体可参考文章:
1##进入oracle用户
2su - oracle
3mkdir -p /home/oracle/scripts/
4##写入脚本
5{
6 echo '#!/bin/bash'
7 echo 'source ~/.bash_profile'
8 echo 'deltime=`date +"20%y%m%d%H%M%S"`'
9 echo "rman target / nocatalog msglog /home/oracle/scripts/del_arch_\${deltime}.log<<EOF"
10 echo 'crosscheck archivelog all;'
11 echo "delete noprompt archivelog until time 'sysdate-7';"
12 echo "delete noprompt force archivelog until time 'SYSDATE-10';"
13 echo 'EOF'
14} >>/home/oracle/scripts/del_arch.sh
15chmod +x /home/oracle/scripts/del_arch.sh
切换到 oracle 用户写入计划任务:
1cat <<EOF>>/var/spool/cron/oracle
212 00 * * * /home/oracle/scripts/del_arch.sh
3EOF
4##手动执行测试
5su - oracle
6/home/oracle/scripts/del_arch.sh

3、配置数据库开机自启
配置数据库实例随集群服务自启动:
1##root用户下执行
2/u01/app/19.3.0/grid/bin/crsctl modify resource "ora.p19c0.db" -attr "AUTO_START=always" -unsupported
注意: ora.p19c0.db中的 p19c0 是指 db 名称;需要在 root 用户下执行!
所有都配置完成之后,关闭数据库,重启主机!
往期精彩文章
