
简介本资源是一份面向DBA、Oracle运维工程师及高可用数据库架构学习者的实战部署指南聚焦Linux 7.9环境下Oracle 19c RAC集群的全流程安装与配置解决企业级数据库高可用建设中共享存储ASM多路径、双节点协同、集群服务管理等核心难点。文档为单文件PDF共10.13MB内容结构完整覆盖系统规划主机/网络/OCR/Voting Disk设计、环境配置VMware虚拟化部署、防火墙/NTP/sysctl/limits等20余项内核与用户层调优、Grid Infrastructure安装、RAC数据库实例创建及健康检查等五大阶段含详细命令示例与配置截图说明。已有601人学习下载读者可直接复用该文档在测试环境快速搭建稳定RAC集群掌握从底层存储映射到上层服务注册的全链路排错逻辑与最佳实践。1. 在 Linux 7.9 上硬刚 Oracle 19c RAC这不是部署文档是血泪复现笔记你花 3 小时配好 VMware 网络crsctl check cluster -all却报CRS-4537: Cluster Ready Services is not running你反复核对/etc/hosts里那 6 行 IP 和主机名cluvfy stage -pre crsinst -n rac121,rac122 -verbose还是卡在 “PRVF-5636: The NTP daemon or service was not detected on any of the nodes”你按文档把oracleasmlib-2.0.12-1.el7.x86_64.rpm装了三遍asmcmd lsdg一执行就ORA-15032: not all alterations performed—— 这不是你手残是 Linux 7.9 Oracle 19c RAC 这套组合拳天生带「玄学」属性。这份 PDF 文档标题所指不是教科书式理论汇编而是作者在小黑 P1580G 内存3T 固态上用 VMware Workstation Pro 16.1 拉出 3 台虚拟机rac121/rac122/server实打实跑通 5 轮以上、全程截图留痕、连root.sh执行输出都逐行比对过的落地手册。它解决的不是“RAC 是什么”而是“为什么udevadm trigger后/dev/mapper/mpath*不出现”、“为什么gridSetup.sh图形界面卡在‘Validating Node Connectivity’却无报错日志”、“为什么opatch lspatches显示补丁已装crsctl query crs activeversion却还是旧版本”——这些只有亲手砸过键盘的人才懂的坑。适合两类人一是刚摸过 Linux 基础命令、想啃下 Oracle 高可用硬骨头的 DBA 新手二是手头只有 Oracle Linux 7.9或 CentOS 7.9/Red Hat 7.9物理机、急需快速搭出可验证 RAC 环境的运维老鸟。别信“一键脚本”RAC 的尊严得一行行echo、一次次multipath -ll、一遍遍tail -f /u01/app/grid/crsdata/rac121/alert.log换回来。2. 系统底座Linux 7.9 三节点网络与内核调优绕不开的 7 个生死配置Oracle 19c RAC 对底层 OS 的要求不是“能跑”而是“必须像手术刀一样精准”。Linux 7.9 默认配置和 Oracle 官方认证清单 Oracle Database 19c Certification Matrix 之间横亘着至少 7 处不改必翻车的硬性门槛。这里不讲原理只列你必须执行、且顺序不能错的命令和参数逻辑。2.1 防火墙与 SELinux不是“关掉就行”而是“关得干净彻底”提示systemctl stop firewalld systemctl disable firewalld只是表象iptables规则残留才是srvctl start listener启动失败的元凶。# 彻底清空所有 iptables 规则含 nat/filter/mangle 表 sudo iptables -F sudo iptables -t nat -F sudo iptables -t mangle -F sudo iptables -X # 永久禁用 firewalld避免 reboot 后复活 sudo systemctl mask firewalld sudo systemctl stop firewalld # 关闭 SELinux注意不是 setenforce 0那是临时的 sudo sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config sudo cat /etc/selinux/config | grep SELINUX # 输出应为SELINUXdisabled参数说明systemctl mask比disable更狠——它会创建一个指向/dev/null的符号链接让firewalld.service根本无法被任何进程包括systemd自身启动。sed -i直接改/etc/selinux/config是唯一生效方式setenforce 0在重启后自动失效而 RAC 安装过程中任意一次 reboot 都可能触发 SELinux 重载导致gridSetup.sh图形界面白屏。2.2 三网卡绑定业务/心跳/存储网络IP 地址必须“物理隔离”文档中规划的三个网段192.168.31.0/24业务网、192.168.122.0/24心跳网、192.168.99.0/24存储网不是建议是 Oracle Clusterware 强制校验项。VMware 中必须为每台虚拟机rac121/rac122/server添加3 个独立网卡并分别桥接到不同 VMnet如 VMnet1/VMnet2/VMnet3绝不能共用一个 VMnet 或 NAT 模式。# rac121 节点示例检查三张网卡是否识别且 UP ip addr show | grep -E ens33|ens34|ens37 # 正常输出应类似 # 2: ens33: BROADCAST,MULTICAST,UP,LOWER_UP ... inet 192.168.31.121/24 ... # 3: ens34: BROADCAST,MULTICAST,UP,LOWER_UP ... inet 192.168.122.121/24 ... # 4: ens37: BROADCAST,MULTICAST,UP,LOWER_UP ... inet 192.168.99.121/24 ... # 为每张网卡配置静态 IP以 ens33 为例其他类推 sudo tee /etc/sysconfig/network-scripts/ifcfg-ens33 EOF TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic DEFROUTEyes IPV4_FAILURE_FATALno IPV6INITyes IPV6_AUTOCONFyes IPV6_DEFROUTEyes IPV6_FAILURE_FATALno IPV6_ADDR_GEN_MODEstable-privacy NAMEens33 UUIDxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx DEVICEens33 ONBOOTyes IPADDR192.168.31.121 NETMASK255.255.255.0 EOF sudo systemctl restart network逻辑说明cluvfy工具在stage -pre crsinst阶段会严格校验① 每个节点必须有且仅有 3 个 UP 状态的 IPv4 接口② 三个接口的子网掩码必须互不重叠③192.168.122.0/24心跳网必须是私有地址段且不能路由到公网。若ens34配置成192.168.31.200/24与业务网同段cluvfy会直接报PRVF-5636并终止。2.3/etc/hostsRAC 的“DNS 黑匣子”6 行缺一不可Oracle Clusterware 启动时ohasd进程会读取/etc/hosts解析所有节点名。此处不是“能 ping 通就行”而是必须满足 Oracle 内部解析器的硬编码规则每个节点必须有 3 行记录public VIP private且顺序固定。# rac121 节点的 /etc/hostsrac122 节点内容镜像仅 IP 和主机名替换 sudo tee -a /etc/hosts EOF # Public IPs 192.168.31.121 rac121.com rac121 192.168.31.122 rac122.com rac122 # Private IPs (Heartbeat) 192.168.122.121 rac121-priv 192.168.122.122 rac122-priv # Virtual IPs (VIP) 192.168.31.123 rac121-vip 192.168.31.124 rac122-vip # SCAN IP (Single Client Access Name) 192.168.31.125 rac-scan EOF参数说明rac121-priv和rac122-priv必须使用192.168.122.0/24段这是 Oracle 19c 默认心跳网段rac-scan必须是单个 IP非 DNS 轮询且不能与任何节点 public IP 冲突rac121.com是 FQDNFully Qualified Domain Namerac121是 short name两者缺一不可——gridSetup.sh会校验hostname -f和hostname是否匹配这两行。2.4 内核参数sysctl.conf里的 9 个数字决定 ASM 能否挂载ASM 磁盘组依赖 Linux 内核的block和memory子系统。Oracle 19c 官方要求vm.swappiness1、fs.aio-max-nr1048576等 9 项参数少设一个asmca创建磁盘组时就会ORA-15018: diskgroup cannot be created。# 追加至 /etc/sysctl.conf注意不是覆盖是追加 sudo tee -a /etc/sysctl.conf EOF # Oracle 19c RAC Required Kernel Parameters fs.aio-max-nr 1048576 fs.file-max 6815744 kernel.shmall 2097152 kernel.shmmax 4294967295 kernel.shmmni 4096 kernel.sem 250 32000 100 128 net.ipv4.ip_local_port_range 9000 65500 net.core.rmem_default 262144 net.core.wmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_max 1048576 net.ipv4.conf.all.rp_filter 2 net.ipv4.conf.default.rp_filter 2 vm.swappiness 1 vm.dirty_ratio 15 vm.dirty_background_ratio 5 EOF # 立即生效 sudo sysctl -p # 验证关键参数 sudo sysctl fs.aio-max-nr vm.swappiness net.core.rmem_max # 输出应为fs.aio-max-nr 1048576, vm.swappiness 1, net.core.rmem_max 4194304逻辑说明vm.swappiness1是 ASM 性能关键——值过高会导致内核频繁 swapASM 进程因内存不足被 OOM killer 杀死fs.aio-max-nr1048576是异步 I/O 最大请求数低于此值asmcmd会报ORA-15055: unable to connect to ASM instancenet.ipv4.conf.all.rp_filter2启用严格反向路径过滤防止心跳包被误丢弃。2.5 用户资源限制limits.conf里oracle用户的 6 个硬上限Oracle 进程尤其是oraagent.bin启动时会申请大量文件句柄和进程数。Linux 默认ulimit -n是 1024而 Oracle 19c 要求nofile65536否则crsctl start crs后crs_stat -t显示ora.cssd为OFFLINE。# 追加至 /etc/security/limits.conf注意必须写 oracle 用户名不能写 %dba 组 sudo tee -a /etc/security/limits.conf EOF # Oracle User Limits for 19c RAC oracle soft nofile 65536 oracle hard nofile 65536 oracle soft nproc 16384 oracle hard nproc 16384 oracle soft stack 10240 oracle hard stack 32768 oracle soft memlock 32768 oracle hard memlock 32768 EOF # 确保 pam_limits.so 生效/etc/pam.d/login 已存在该行但需确认 echo session required pam_limits.so | sudo tee -a /etc/pam.d/login参数说明nproc16384是最大进程数cssd进程树深度超限时会崩溃stack32768是栈大小KB低于此值gridSetup.sh图形界面直接 Segmentation Faultmemlock32768是锁定内存上限KBASM 实例必须锁定 SGA 到物理内存否则ORA-27102: out of memory。2.6 时间同步NTP 不是“配个 server”而是“全集群强制 drift 补偿”RAC 节点间时间差 1 秒crsctl check cluster就会报CRS-4535: Cannot communicate with Cluster Ready Services。Linux 7.9 的chronyd默认不兼容 Oracle 的ntpd校验逻辑必须降级回ntpd并配置tinker stepout 300。# 卸载 chronyd安装 ntpd sudo yum remove chrony -y sudo yum install ntp -y # 配置 ntp.confserver 节点作为 NTP Serverrac121/rac122 作为 Client # server 节点执行 sudo tee /etc/ntp.conf EOF driftfile /var/lib/ntp/drift restrict default kod nomodify notrap nopeer noquery restrict 192.168.31.0 mask 255.255.255.0 nomodify notrap restrict 192.168.122.0 mask 255.255.255.0 nomodify notrap restrict 192.168.99.0 mask 255.255.255.0 nomodify notrap server 127.127.1.0 fudge 127.127.1.0 stratum 10 EOF # rac121/rac122 节点执行 sudo tee /etc/ntp.conf EOF driftfile /var/lib/ntp/drift restrict default kod nomodify notrap nopeer noquery server 192.168.31.99 iburst tinker stepout 300 EOF # 启动并设开机自启 sudo systemctl enable ntpd sudo systemctl start ntpd # 验证等待 5 分钟后执行 ntpq -p # 输出中应有 *192.168.31.99且 offset 10ms逻辑说明tinker stepout 300是救命参数——它允许ntpd在时间偏差 300 秒时强制步进校正step而非缓慢 slewing。若不加此参数当虚拟机 suspend/resume 后时间漂移 300 秒ntpd会拒绝同步crsctl永远报错。2.7 YUM 源与基础包oracle-database-server-19c-preinstall不是可选是强制依赖Oracle 官方预装包oracle-database-server-19c-preinstall会自动配置limits.conf、sysctl.conf、用户组并安装所有必需 RPM如libaio、ksh、compat-libstdc。手动yum install单个包极易遗漏依赖。# 在所有节点rac121/rac122/server执行 sudo yum install -y oracle-database-server-19c-preinstall # 验证预装包创建的用户和组 id oracle # 输出应包含uid54321(oracle) gid54321(oinstall) groups54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54327(asmdba),54328(asmoper),54329(asmadmin) # 安装额外必需包预装包未覆盖 sudo yum install -y bc binutils compat-libcap1 compat-libstdc-33 gcc gcc-c glibc glibc-devel ksh libaio libaio-devel libgcc libstdc libstdc-devel libXi libXtst make net-tools nfs-utils python python-configshell python-rtslib python-six targetcli smartmontools sysstat unzip zip参数说明oracle-database-server-19c-preinstall会创建oracle用户 UID54321Oracle 官方硬编码若手动创建useradd oracleUID 不匹配会导致gridSetup.sh报ORA-00604: error occurred at recursive SQL level 1nfs-utils是server节点提供 iSCSI 共享存储的底层依赖缺失则targetcli无法启动。3. 共享存储实战从 iSCSI Target 到 ASM 磁盘组绕不开的 5 层设备映射RAC 的灵魂是共享存储。Linux 7.9 下server节点用targetcli暴露 LUNrac121/rac122用iscsiadm发现登录再经multipath聚合最后由udev绑定永久设备名——这 5 层链路断一环ASM 就是空中楼阁。别信“fdisk -l看到盘就行”asmca只认/dev/asm-*这种 udev 规则生成的设备。3.1 server 节点targetcli创建 3 个 LUNOCR/Voting/Data不是“建个文件就完事”targetcli的 LUN 必须是块设备/dev/sdb不能是文件/var/tmp/ocr.img否则asmca会报ORA-15018: diskgroup cannot be created。# server 节点准备 3 块裸盘假设已添加 sdb/sdc/sdd各 20G sudo fdisk -l | grep Disk /dev/sd[bcde] # 输出应为Disk /dev/sdb: 21.5 GB, ... Disk /dev/sdc: 21.5 GB, ... Disk /dev/sdd: 21.5 GB, ... # 安装 targetcli sudo yum install -y targetcli # 启动服务 sudo systemctl enable target sudo systemctl start target # 使用 targetcli 创建 iSCSI Target交互式命令此处为脚本化写法 sudo targetcli EOF /backstores/block create ocr /dev/sdb /backstores/block create voting /dev/sdc /backstores/block create data /dev/sdd /iscsi create iqn.2022-02.com.xaosky:server /iscsi/iqn.2022-02.com.xaosky:server/tpg1/luns create /backstores/block/ocr /iscsi/iqn.2022-02.com.xaosky:server/tpg1/luns create /backstores/block/voting /iscsi/iqn.2022-02.com.xaosky:server/tpg1/luns create /backstores/block/data /iscsi/iqn.2022-02.com.xaosky:server/tpg1/acls create iqn.2022-02.com.xaosky:rac121 /iscsi/iqn.2022-02.com.xaosky:server/tpg1/acls create iqn.2022-02.com.xaosky:rac122 /iscsi/iqn.2022-02.com.xaosky:server/tpg1/portals create 192.168.99.99 /iscsi/iqn.2022-02.com.xaosky:server/tpg1/portals create 192.168.122.99 saveconfig exit EOF逻辑说明/iscsi/iqn.2022-02.com.xaosky:server/tpg1/portals create必须指定192.168.99.99存储网和192.168.122.99心跳网两个 IP因为rac121会通过192.168.99.121访问rac122会通过192.168.122.122访问acls create是访问控制列表iqn.2022-02.com.xaosky:rac121是rac121节点的 iSCSI Initiator 名称必须与rac121节点/etc/iscsi/initiatorname.iscsi中的InitiatorName一致。3.2 rac121/rac122 节点iscsiadm发现登录multipath聚合lsblk必须看到mpathaiscsiadm登录后每块盘会生成 2 个/dev/sdX设备因双路径multipath将其聚合成/dev/mapper/mpatha。若multipath -ll无输出asmca无法识别磁盘。# 安装 iscsi-initiator-utils 和 device-mapper-multipath sudo yum install -y iscsi-initiator-utils device-mapper-multipath # 配置 initiatorname必须与 server 端 acls 匹配 echo InitiatorNameiqn.2022-02.com.xaosky:rac121 | sudo tee /etc/iscsi/initiatorname.iscsi sudo systemctl enable iscsid sudo systemctl start iscsid # 发现 targetserver 的存储网 IP sudo iscsiadm -m discovery -t st -p 192.168.99.99 # 输出应为192.168.99.99:3260,1 iqn.2022-02.com.xaosky:server # 登录 target sudo iscsiadm -m node -T iqn.2022-02.com.xaosky:server -p 192.168.99.99 -l # 验证登录状态 sudo iscsiadm -m session # 输出应为tcp: [1] 192.168.99.99:3260,1 iqn.2022-02.com.xaosky:server # 启动 multipathd sudo systemctl enable multipathd sudo systemctl start multipathd # 查看 multipath 设备关键必须看到 mpatha/mpathb/mpathc sudo multipath -ll # 正常输出应类似 # mpatha (36001405c2e3a3a3a3a3a3a3a3a3a3a3a) dm-2 IET,VIRTUAL-DISK # size4.0G features0 hwhandler0 wprw # -- policyservice-time 0 prio0 statusactive # |- 0:0:0:0 sdb 8:16 active undef running # - 1:0:0:0 sdc 8:32 active undef running # mpathb (36001405c2e3a3a3a3a3a3a3a3a3a3a3b) dm-3 IET,VIRTUAL-DISK # ...参数说明multipath -ll输出中mpatha后的(36001405...)是 WWIDWorld Wide Identifierasmca识别磁盘的唯一依据sdb和sdc是两条物理路径statusactive表示路径正常若显示failed或undef需检查iscsiadm -m session是否登录成功或dmesg | grep -i multipath查看内核日志。3.3 udev 规则/dev/asm-ocr这种设备名不是ln -s是KERNELdm-*规则ASM 要求磁盘设备名永久不变reboot 后仍是/dev/asm-ocr。/dev/mapper/mpatha会变必须用udev绑定 WWID 到固定名。# 获取 mpatha 的 WWID从 multipath -ll 输出复制 WWID_OCR36001405c2e3a3a3a3a3a3a3a3a3a3a3a WWID_VOTING36001405c2e3a3a3a3a3a3a3a3a3a3a3b WWID_DATA36001405c2e3a3a3a3a3a3a3a3a3a3a3c # 创建 udev 规则文件 sudo tee /etc/udev/rules.d/99-oracle-asm.rules EOF # OCR Disk KERNELdm-*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/\$parent, RESULT$WWID_OCR, SYMLINKasm-ocr, OWNERgrid, GROUPasmadmin, MODE0660 # Voting Disk KERNELdm-*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/\$parent, RESULT$WWID_VOTING, SYMLINKasm-voting, OWNERgrid, GROUPasmadmin, MODE0660 # DATA Disk KERNELdm-*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/\$parent, RESULT$WWID_DATA, SYMLINKasm-data, OWNERgrid, GROUPasmadmin, MODE0660 EOF # 重新加载 udev 规则并触发 sudo udevadm control --reload-rules sudo udevadm trigger --subsystem-matchblock # 验证reboot 后也必须存在 ls -l /dev/asm-* # 输出应为lrwxrwxrwx. 1 root root 4 May 10 10:00 /dev/asm-ocr - dm-2 # lrwxrwxrwx. 1 root root 4 May 10 10:00 /dev/asm-voting - dm-3 # lrwxrwxrwx. 1 root root 4 May 10 10:00 /dev/asm-data - dm-4逻辑说明PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/\$parent是关键——scsi_id从设备父节点/dev/dm-2读取 WWID与规则中RESULT匹配SYMLINKasm-ocr创建软链接OWNERgrid确保grid用户可读写若ls -l /dev/asm-*无输出执行sudo udevadm info --name/dev/dm-2 --queryall | grep ID_SERIAL确认 WWID 是否正确。3.4 ASM 磁盘权限oracleasm已淘汰udevchown是唯一正解Oracle 19c 废弃了oracleasm工具oracleasm configure报错必须用udev规则 chown设置权限。grid用户必须对/dev/asm-*有读写权否则asmca创建磁盘组时报ORA-15018。# 确认 grid 用户存在且属 asmadmin 组 id grid # 输出应包含uid54322(grid) gid54322(oinstall) groups54322(oinstall),54327(asmadmin) # 手动 chownudev 规则有时不立即生效 sudo chown grid:asmadmin /dev/asm-* sudo chmod 660 /dev/asm-* # 验证权限 ls -l /dev/asm-* # 输出应为brw-rw----. 1 grid asmadmin 253, 2 May 10 10:00 /dev/asm-ocr参数说明brw-rw----中brw表示块设备rw表示grid用户和asmadmin组有读写权若显示root:rootasmca会报ORA-15032: not all alterations performedchmod 660是必须的600仅 owner会导致asmcmd无法执行。3.5 验证 ASM 可见性kfod命令是比asmca更底层的探测器在运行gridSetup.sh前用kfodKernel Files OD直接探测 ASM 能识别哪些磁盘。它不依赖 GUI是纯命令行验证。# 切换到 grid 用户必须 sudo su - grid # 执行 kfodgrid 安装前不此时 grid 用户已存在但 ORACLE_HOME 未设用临时路径 # 注意kfod 在 $ORACLE_HOME/bin 下但此时 grid home 未安装需从安装介质临时解压 # 更简单方法用 Oracle 19c Grid Infrastructure 安装包中的 kfod下载后解压到 /tmp # 假设已解压/tmp/grid/install/kfod # 若未解压可先验证 /dev/asm-* 是否可读 ls -l /dev/asm-* # 确保输出为 grid:asmadmin 660 # 执行 kfod需指定 asm_diskstring /tmp/grid/install/kfod asm_diskstring/dev/asm-* disksall # 正常输出应类似 # -------------------------------------------------------------------------------- # ORACLE_SID ORACLE_HOME # -------------------------------------------------------------------------------- # ASM1 /u01/app/19c/grid # # Disks # ----- # 1. /dev/asm-ocr # 2. /dev/asm-voting # 3. /dev/asm-data # --------------------------------------------------------------------------------逻辑说明kfod输出中必须列出/dev/asm-ocr等 3 个设备且ORACLE_SIDASM1表示 ASM 实例名若输出为空或报KFOD-00301: No disks found说明udev规则或权限未生效asm_diskstring/dev/asm-*是 ASM 搜索磁盘的路径模式必须与udev创建的软链接名匹配。4. 避坑RAC 安装中 5 个高频翻车点现象、原因、解决全闭环别等gridSetup.sh卡在 94% 才查日志。这 5 个坑我踩过至少 3 次每次都是tail -f /u01/app/grid/cfgtoollogs/oui/grep -i error\|fail定位血泪经验浓缩成可抄作业的排查清单。4.1 现象gridSetup.sh图形界面卡在 “Validating Node Connectivity”无报错鼠标可点但进度条不动原因cluvfy校本文还有配套的精品资源点击获取