
简介《Oracle 19c RAC on Linux 7.6安装手册》是一份针对Red Hat 7.6环境部署Oracle 19c RAC的实战文档面向需要搭建高可用集群的DBA、系统管理员及运维工程师。文档以图文步骤完整覆盖从系统环境检查、关闭THP并开启Hugepages、安装依赖包、配置内核参数到网络规划固定IP及GNS固定的关键环节目录结构清晰依次涉及OS检查、内核与软件包准备、网络配置、杂项配置、时钟同步等模块。同时穿插介绍Flex ASM特性、12.2集群模式Standalone与Domain Service的演进差异并给出配置过程中常见问题的定位与排查方法。整份资料为单个docx文件约160KB内容高度浓缩适合希望少走弯路、快速掌握RACGNS部署要点的实践者。目前已有716人学习下载。1. 先搞懂集群模式再动手19c RAC 与 Linux 7.6 的系统准备量装 Oracle 19c RAC on Linux 7.6真正费时间的从来不是 gridSetup.sh 那两个小时而是进安装程序之前那一小时的系统巡检——THP、Hugepages、内核参数、DNS、UDEV任何一项没弄干净预检就会以各种诡异的方式报警。这份资源把 Red Hat 7.6 / Oracle Linux 7.4 上 19c RAC 的完整落地流程串起来了三个关键点Standalone 与 Domain Services Cluster 怎么选、GNS 配置 SCAN 的完整链路、以及装完之后的排障手法。适合正在搭两节点 RAC 的 DBA也适合刚接手集群环境、想知道哪些配置能偷懒、哪些必须手工盯住的系统管理员。顺便说一句19c 安装前别急着敲命令先把集群模式想清楚。从 12.2 开始集群分 Standalone Cluster 与 Domain Services ClusterDSC两种模式前者最多 64 节点、每节点直连共享存储、GIMR 在 19c 变成可选项后者则是中心化的服务集群由 DSC 提供 ASM 存储、MGMTDB 和 TFA成员集群通过物理直连或 ASM IO Service 网络路径访问分片存储。这一步选错后面拆一半重来是常有的事。2. 系统环境准备THP、Hugepages 与内核参数的落地配置从拆过的安装记录看RAC 预检失败八成集中在操作系统层而且报错往往不在真正的问题上——内存不足的提示可能来自 SWAP 没算 Hugepages包缺失的提示可能来自内核参数没生效。所以系统准备阶段宁可多花半小时一条条对着看也不要装了三个小时再回来返工。2.1 环境检查清单内存、SWAP 与 /dev/shm 的 10 分钟核对原手册开头有一张环境检查表我把最关键的几项压成下面这张表动手前逐条过掉。检查项要求命令RAM至少 8Ggrep MemTotal /proc/meminfo运行级别3 或 5runlevelLinux 版本OL 7.4UEK4/UEK5/RHCK或 RHEL 7.4uname -rm; cat /etc/redhat-release/tmp至少 1Gdu -h /tmpSWAP4G~16G 取等于 RAM超过 16G 取 16Ggrep SwapTotal /proc/meminfo/dev/shm挂载类型与权限正常df -h /dev/shm软件空间grid 至少 12GOracle 至少 10G建议预留 100Gdf -h /u01Red Hat 7.6 的内核是 3.10.0-957 起步高于手册里 7.4 的基线3.10.0-693.5.2.0.1.el7所以内核版本这条直接满足。SWAP 那条有个容易忽略的联动如果启用了 Hugepages校验 SWAP 前要先算出 Hugepages 占用的内存并从 SWAP 总量里减掉否则按物理内存等配 SWAP 会偏小。19c Standalone 的 GIMR 是可选项不配 GIMR 时 Hugepages 预算不用额外留但按 Domain Services Cluster 装时GIMR 的 SGA 会占 1G 左右这 1G 要提前算进 Hugepages 里不然启动后会有一截共享内存被换出去性能很难看。2.2 关闭 THP 开启 Hugepages从 GRUB 到 memlock 的完整链路为什么非关不可THP 在 RHEL/OEL 7 默认是 enabled[always]它会在后台自动把 4KB 页合并成大页对数据库来说是黑匣子——你以为自己在管理 SGA其实 kernel 在替你改内存布局。很多「负载一高就卡一下」的诡异现场最后都落在 khugepaged 碎片整理上。生产环境建议明确关闭并换用标准 Hugepages。# 先确认当前状态[always] 表示透明大页正开启 cat /sys/kernel/mm/transparent_hugepage/enabled # [always] madvise never # 编辑 /etc/default/grub在 GRUB_CMDLINE_LINUX 末尾追加参数 # GRUB_CMDLINE_LINUX... transparent_hugepagenever vi /etc/default/grub参数追加后别急着重启先重建引导配置# BIOS 机器 grub2-mkconfig -o /boot/grub2/grub.cfg # UEFI 机器路径不同别抄错 grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg shutdown -r now # 重启后唯一有效的验证看 /proc/cmdline 里有没有失效参数 cat /proc/cmdline | tr \n | grep transparent # 期望输出 transparent_hugepagenever注意只改 /etc/default/grub 而不重建 grub.cfg重启后参数不会进内核 cmdline这类「改了等于没改」是 THP 环节最常见的翻车。另外 RHEL 7 默认的 tuned 服务会在启动阶段重新应用调优 profile个别 profile 会反手把 THP 打开所以验证时要连同 enabled 文件一起看不要只看 cmdline。提示Hugepages 与 THP 是两套机制。THP 是内核自动管理的透明页Hugepages 是你预分配、应用独占的大页。RAC 里这两者并存时THP 必须关Hugepages 必须开顺序不能反。然后配置标准大页# 按实例内存计算后写入 vim /etc/sysctl.conf vm.nr_hugepages 512 sysctl -p grep HugePages_Total /proc/meminfo # memlock 上限单位 KB建议直接给 unlimited vim /etc/security/limits.conf oracle soft memlock unlimited oracle hard memlock unlimited grid soft memlock unlimited grid hard memlock unlimitedhugepages 数量的估算公式我一般把 SGAPGA 上界加起来除以 2MB向上取整后加 2~4 页余量如果这台机器还跑别的数据库实例把所有实例的内存都加进再算。memlock 设 unlimited 省得反复对齐 KB 数——很多同学把 memlock 设成具体数值后发现 hugepages 只能起来一部分就是 KB 换算错了。2.3 内核参数Preinstall RPM 自动配置与手工 sysctl 的取舍如果你用的是 Oracle Linux 7最省事的路子是直接装 preinstall 包cd /etc/yum.repos.d/ wget http://yum.oracle.com/public-yum-ol7.repo yum repolist yum install -y oracle-database-preinstall-19c这个包会把内核参数、limits、numaoff、用户和组一次性配好省得手工一项项对。但注意它只存在于 Oracle LinuxRed Hat 7.6 上没有官方对应的包纯 RHEL 环境只能手工来。另外装了 preinstall 不等于万事大吉——它配的 shmmax 偏保守如果你的 SGA 计划超过 4G还是得自己改。手工配置内核参数先把文件建出来vim /etc/sysctl.d/97-oracledatabase-sysctl.conf参数推荐值说明fs.aio-max-nr1048576异步 I/O 请求上限RAC 跑在 ASM 上必须够大fs.file-max6815744全局文件句柄数kernel.shmall2097152共享内存页数与 shmmax 联动kernel.shmmax4294967295单段共享内存上限SGA 超 4G 时建议放大到物理内存的一半kernel.shmmni4096共享内存段数量kernel.sem250 32000 100 128信号量四元组照抄即可net.ipv4.ip_local_port_range9000 65500RAC 节点间通信端口范围默认 32768 起步偏窄net.core.rmem_default / rmem_max262144 / 4194304socket 接收缓冲区net.core.wmem_default / wmem_max262144 / 1048576socket 发送缓冲区改完必须重载并验证sysctl --system sysctl -a | grep -E kernel.sem|kernel.shmmax|ip_local_port_range顺带一提原手册里 CVU 也是这个阶段的可选动作把 GRID_HOME/cv/rpm 下的 cvuqdisk 包装到每个节点再跑 runcluvfy.sh stage -pre crsinst -fixup -n node1,node2 做预检。这个工具的输出当正式安装前的最后一次体检预检不过别硬装回来看上面那张表。3. 网络规划是 RAC 的灵魂固定 IP 与 GNS 两种方案怎么选网络规划决定 RAC 装完是省心还是折腾。两节点 RAC 最少要三种 IPPublic业务、Private心跳、VIPSCAN 又分固定三个 IP 或交给 GNS 自动生成。选固定还是 GNS其实取决于你手头有没有一个愿意配合的 DNS 管理员——如果你所在的团队掌控 DNSGNS 能省掉后面大量 hosts 维护如果控制不了就走固定配置稳稳当当。3.1 固定 IP 方案手工写全 hostsDNS 只解析 SCAN固定方案的定位Public/Private/VIP 全部手工分配并写进各节点 /etc/hostsDNS 只负责解析 SCANgridSetup.sh 里全部手工指定。19c 的 VIP 规则先划重点从 18c 开始 VIP 可选但必须全员配或全员不配不能这台配那台不配VIP 在故障切换时依赖漂移不配的话就要靠客户端重连逻辑兜底。# /etc/hosts两节点保持一致 192.168.204.11 pub19-node1.rac.libai 192.168.204.12 pub19-node2.rac.libai 40.40.40.41 priv19-node1.rac.libai 40.40.40.42 priv19-node2.rac.libai 192.168.204.21 vip19-node1.rac.libai 192.168.204.22 vip19-node2.rac.libai固定方案里 SCAN 三个 IP 必须在 DNS 里做 A 记录不要只写进 hosts。如果 DNS 暂时不可用可以把 SCAN 也写进 hosts 顶一阵但所有节点的 hosts 必须完全一致且 SCAN 解析出的三个 IP 顺序不影响工作——DNS 轮询效果更好。3.2 GNS 子域委托named.conf 正反解与 SCAN 域名的写法GNS 的原理一句话你告诉 DNS「vip.rac.libai 这个子域由 GNS 服务器负责」然后 VIP、Private、SCAN 这些地址由 GNS 自动分配和注册不用再手工写死。它的前提是你有一个可控的 DNS 服务器来做子域委托原手册用的是 bind chroot。先装 bindyum install -y bind bind-chroot vi /etc/named.confnamed.conf 里最少要定义四个 zone一个根提示一个正解域外加两个反解域public 网段一个、private 网段一个zone . IN { type hint; file named.ca; }; zone rac.libai IN { type master; file named.rac.libai; }; zone 204.168.192.in-addr.arpa IN { type master; file named.192.168.204; }; zone 40.40.40.in-addr.arpa IN { type master; file named.40.40.40; };正解文件是 GNS 配置的戏眼最后两行千万别漏vi /var/named/named.rac.libai$TTL 600 IN SOA rac.libai. admin.rac.libai. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS master master IN A 192.168.204.12 pub19-node1.rac.libai. IN A 192.168.204.11 pub19-node2.rac.libai. IN A 192.168.204.12 priv19-node1.rac.libai. IN A 40.40.40.41 priv19-node2.rac.libai. IN A 40.40.40.42 vip.rac.libai. IN NS gns.rac.libai. gns.rac.libai. IN A 192.168.204.10最后两行的含义vip.rac.libai 这个子域的名字解析全部委托给 gns.rac.libai而 gns.rac.libai 本身有一个固定地址。稍后在 gridSetup.sh 里填 GNS 地址 192.168.204.10、子域 vip.rac.libaiSCAN 名字填 scan19.vip.rac.libai——注意 SCAN 的完整域名必须落在委托子域内这是 GNS 配置的硬前提。固定方案里你可能会写 scan19-vip.rac.libaiGNS 方案里必须是 scan19.vip.rac.libai 这种带圆点子域的格式别混。反解文件同样要配vi /var/named/named.192.168.204$TTL 600 IN SOA rac.libai. admin.rac.libai. ( 10 ; serial 3H ; refresh 15M ; retry 1W ; expire 1D ) ; minimum IN NS master.rac.libai. 12 IN PTR master.rac.libai. 11 IN PTR pub19-node1.rac.libai. 21 IN PTR vip19-node1.rac.libai. 22 IN PTR vip19-node2.rac.libai.我在实际配置里踩过一个无语的问题bind 的 zone 文件权限不对root 创建、named 用户读不了导致区加载失败日志里报 permission denied排了半天。所以配完之后养成习惯用 named-checkzone 先验named-checkzone rac.libai /var/named/named.rac.libai systemctl restart named dig 127.0.0.1 scan19.vip.rac.libaidig 能返回三个 A 记录、没有 SERVFAIL才说明子域委托链路通了。3.3 命名与网段约定安装程序不会告诉你的四个注意点从原手册的网络配置说明里提炼几条容易在前期规划踩坑的规则网卡命名走字母数字加中划线「-」可以「_」不行——Public/VIP/SCAN 的名字含下划线gridSetup 直接不认。Public/VIP/SCAN 必须同一子网Private 独立网段不建议跟业务网段混。Private 网卡可以不绑定 bond。过去总觉得心跳必须链路聚合实际上 Grid Infrastructure 的 HAIP 机制最多支持 4 个私网 interface 做冗余配多了的网卡自动当备用减少一层 bond 维护负担。要么全员 IPv4要么全员 IPv6混用会让 GNS 生成的地址陷入解析混乱GNS 虽然能生成 IPv6 地址但生产环境我一般保持 IPv4 单栈。4. 安装前杂项一次做齐用户组、limits、时钟与 UDEV 磁盘原手册把这一堆配置散在「其他配置」一节里但它们其实是同一件事让安装程序在干净、可预测的系统状态里跑完。Flex ASM 从 12.1 起就成了 Grid Infrastructure 的一部分意思是某个节点的 ASM 实例异常时可以由另一个节点的实例接管每个节点不再需要单独维护一套 ASM 配置。正因如此ASM 磁盘的设备名和权限必须在所有节点上完全一致——这就是 UDEV 规则的用武之地。4.1 用户组、目录与 limits.conf先建组再建用户groupadd -g 54318 oinstall groupadd -g 54319 dba groupadd -g 54320 oper groupadd -g 54321 asmadmin groupadd -g 54322 asmdba groupadd -g 54323 asmoper useradd -u 54318 -g oinstall -G dba,oper grid useradd -u 54319 -g oinstall -G dba,oper,asmadmin,asmdba oracle注意grid 用户只加 dba 和 operoracle 用户才需要 asmadmin/asmdba 组合用于数据库实例注册到 ASM。组 ID 与用户 ID 用 54318/54319 这类大号 UID 是为了与别的系统用户错开避免 NFS 场景下的 UID 冲突生产上建议固定。目录结构 19c 与 12c 一脉相承mkdir -p /u01/app/19c/grid mkdir -p /u01/app/oracle chown -R grid:oinstall /u01/app/19c chown -R oracle:oinstall /u01/app/oracle chmod -R 775 /u01/applimits.conf 是原手册单独列了一节的配置我在两个节点上分别做同一套vim /etc/security/limits.d/99-oracle-rac.conforacle soft nofile 65536 oracle hard nofile 65536 oracle soft nproc 16384 oracle hard nproc 16384 grid soft nofile 65536 grid hard nofile 65536 grid soft nproc 16384 grid hard nproc 16384 oracle soft memlock unlimited oracle hard memlock unlimited grid soft memlock unlimited grid hard memlock unlimitedmemlock 这项在 THP 那节提过这里再次强调它与 Hugepages 的联动memlock 小于 hugepages 总容量时大页只起一部分且启动后没有报错提示属于典型的「看起来正常、实际没吃到」配置。4.2 时钟同步、I/O Scheduler 与 SSH 超时RAC 节点间通信依赖时钟一致性时间差过大会引起 reconfiguration 甚至脑裂。19c 推荐用 chrony 而不是老掉牙的 ntpdyum install -y chrony systemctl enable --now chronyd chronyc sources -v每个节点都要指向同一组时间源跑一轮 chronyc makestep 把初始偏差抹平再装 grid 前把两个节点时间差控制在秒级以内。I/O Scheduler 这道配置很多人会跳过去——ASM 磁盘直连裸盘时内核 IO 调度器默认是 CFQ对数据库这种随机 IO 负载不公平。改成 deadlineecho deadline /sys/block/sdb/queue/scheduler # 永久生效写进 udev 规则 echo ACTIONadd|change, KERNELsd*, ATTR{queue/scheduler}deadline /etc/udev/rules.d/60-io-scheduler.rulesSSH 超时属于「装到一半才想起」型问题。gridSetup 在配置互信时会建立多段 SSH 会话如果 sshd 默认的空闲超时太短长时间停在图形界面思考人生会话断了安装程序会报连接重置。我在 /etc/ssh/sshd_config 里加了ClientAliveInterval 300 ClientAliveCountMax 2改完重启 sshd 不影响现有会话grid 进程自己会建新会话。4.3 UDEV 手工配置 ASM 磁盘共享盘权限的根治方案ASM 实例发现磁盘走的是 /dev/asm* 这种固定设备名而不是 /dev/sdb所以必须用 UDEV 或 ASMLIB 统一命名并赋权。原手册给的 UDEV 方案适用 Red Hat 7.6ASMLIB 在 RHEL 上不好装UDEV 是更通用路线。第一步拿到每个共享盘的稳定标识# 常见做法用 scsi_id 拿 WWID /usr/lib/udev/scsi_id -g -u -d /dev/sdb # 或直接看 /dev/disk/by-id/ 下的软链 ls -l /dev/disk/by-id/第二步写规则vim /etc/udev/rules.d/99-oracle-asm.rulesKERNELsd*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d $devnode, \ RESULT3600508b1001c1234567890abcdef, NAMEasm-disk1, OWNERgrid, GROUPasmadmin, MODE0660 KERNELsd*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d $devnode, \ RESULT3600508b1001c1234567890abcdef2, NAMEasm-disk2, OWNERgrid, GROUPasmadmin, MODE0660规则生效udevadm control --reload udevadm trigger ls -l /dev/asm*两个坑先记下一是 PROGRAM 路径在 RHEL 7 是完整路径 /usr/lib/udev/scsi_id写成 /sbin/scsi_id 会导致规则静默失败这是老文档里最常见的历史遗留写法二是如果共享存储走 multipath 或者存储厂商的多路径工具设备节点是 dm-规则却匹配 sd结果就是磁盘在 ASM 里「看得到厂商型号、看不到设备」。多路径环境要把规则建立在 multipath 之后的映射设备上规则里 KERNELdm-*再用 /dev/mapper 或 multipath 的 WWID 做匹配。4.4 图形界面、X11 Forward 与 Direct NFS安装入口的三个现实问题gridSetup.sh 和 runInstaller 都要图形界面。不少人习惯 ssh -X 到节点上直接跑结果卡白屏或者窗口弹不出来。原手册里专门建议关闭 X11 Forward实际经验是不是 X11 不能用而是转发链路上的字体和窗口管理器缺失会让安装程序渲染出问题。更稳的做法是用 VNC 或者在装有图形桌面的本机控制台上跑。Direct NFSdNFS用在 NAS/NFS 共享存储场景。19c 的 Standalone 集群允许把 OCR 和投票文件直接放在共享文件系统上这时候启用 Direct NFS 能绕过系统 NFS 客户端的锁定问题。配置方法不复杂在 grid 的 ORACLE_HOME 下放一个 oranfstab 文件逐行写 NFS 服务器和导出路径再重启 ocssd 让配置生效。如果没做这一步共享文件系统上的 OCR 在节点重启时偶发 hang 也不是没遇到过。5. 避坑排查19c RAC 安装最容易翻车的 5 个现场系统准备的每个环节都检查过了不代表安装一定顺畅。下面 5 个现场是拆这份资源时最常遇到的前两个出现在预检后三个出现在安装中后期按顺序排查能省很多时间。5.1 预检反复报警内存、软件包与 sysctl 单项不过现象runcluvfy.sh stage -pre crsinst 打印一串 FAILED逐条看下来既有内存不足又有缺少软件包还有 kernel.sem 的值偏小。单独修完某一项重跑预检又冒出新的失败仿佛在跟它打地鼠。原因多数是系统准备阶段没有「一个节点过一个节点」地落地比如改 sysctl 只改了第一个节点就复制 hosts 去装第二个或者手册里列的包名是 Oracle Linux 的RHEL 7.6 上对应包名不同导致 yum 安装实际没生效。sem 值偏小则通常是早期某个脚本临时改过 /proc/sys/kernel/semsysctl.conf 里却没有对应条目。解决把第二章那张环境检查表当清单两个节点逐项打完勾再跑预检RHEL 环境用 rpm -qa 核对已装包而不是只信 yum install 的返回值sysctl 改完一定 sysctl --system 重载。跑预检时如果看到 fixup 提示逐条确认它要修的是什么再让它执行别盲目接受所有自动修复。5.2 THP 关了又「复活」tuned 服务与内核参数两条链路的拉扯现象/proc/cmdline 里已经有 transparent_hugepagenever重启之后 /sys/kernel/mm/transparent_hugepage/enabled 显示的却还是 always或者 HugePages_Total 一直起不来。原因RHEL 7 的 tuned 服务在系统启动尾声会实施它的 profile常见的 throughput-performance 配置会把 THP 重新打开覆盖了 GRUB 传入的内核参数另外 Hugepages 起不来往往不是 THP 的问题而是 memlock 或 vm.nr_hugepages 里写的数值不对。解决先检查 tuned 是否在跑systemctl status tuned在跑就把 THP 相关参数写进对应的 tuned profile或者生产环境直接禁用 tuned。Hugepages 那侧按 2.2 的公式重新核算 nr_hugepages再 grep HugePages_Total 确认数量。两者都检查完再重启一次——RAC 集群初始化阶段重启最划算装到一半再重启才叫事故。5.3 ASM 磁盘设备不生成UDEV 的 PROGRAM 路径与 multipath 场景现象udevadm trigger 执行完ls /dev/asm* 什么也没有或者某些节点有、某些节点没有或者 ASM 磁盘组创建时设备能枚举但权限不足。原因最常见的是 PROGRAM 写成了 /sbin/scsi_idRHEL 7 实际路径是 /usr/lib/udev/scsi_id规则静默失败另一种是用存储多路径后设备在 /dev/mapper 下面而规则还是按 sd* 匹配触发条件压根对不上。解决先把规则简化到最小可运行一条磁盘、一个规则PROGRAM 和 RESULT 严格对应 scsi_id 输出跑 udevadm test /block/sdb 看规则有没有被应用确认 multipath 设备改用 dm-* 匹配并指向 /dev/mapper 路径。我在多个环境里踩过这条路简化规则比一口气写十条更管用。5.4 GNS 与 SCAN 域名解析失败子域委托没生效现象gridSetup.sh 走到 GNS 配置那步输入子域 vip.rac.libai 和 GNS 地址后报错说 SCAN 名 scan19.vip.rac.libai 无法解析或者前期测试正常安装完成后客户端连接数据库偶发失败。原因第一正解文件里少了委托记录vip.rac.libai. IN NS gns.rac.libai. 和 gns.rac.libai. IN A ...或 NS 记录的域名缺根点第二gridSetup 里填的 SCAN 域名没有真正落在委托子域内比如写成 scan19-vip.rac.libai中划线而委托的子域是 vip.rac.libai圆点当然解析不了第三反解域没配或者 PTR 记录缺失GNS 启动时的反向验证失败。解决在 DNS 服务器上用 dig 127.0.0.1 scan19.vip.rac.libai 确认能返回 3 个 A 记录再 dig -x 192.168.204.162 确认反解存在最后检查 SCAN 全名格式GNS 方案必须是 scan19.vip.rac.libai 而不是 scan19-vip.rac.libai。安装程序这步卡住的十有八九是第三种填域名前先自己拿 dig 测一遍不要指望安装程序帮你判断。5.5 图形界面弹不出来DISPLAY、X11 与 VNC 的选择现象ssh -X 到节点执行 ./gridSetup.sh窗口显示几秒就消失或者画面空白、按钮不可点有时还伴随字体报错。原因图形转发链路上的 X 客户端组件不全xorg-x11-fonts 缺失DISPLAY 环境变量没有传递到目标节点或 X11 Forward 与 sshd 配置的交互问题。原手册建议关闭 X11 Forward 不是禁用图形安装而是让你换一条更稳的显示链路。解决本机有显示器和桌面环境就直接在控制台跑远程环境我用 VNC 起一个固定桌面再跑安装比 ssh -X 稳得多。如果非用 X11 不可至少 export DISPLAY:0.0 并确认目标机器装了 xterm 和 xorg-x11-fonts-*。6. 装完别急着下班节点重启回归与集群健康验证安装程序跑完 gridSetup.sh、root.sh 和 dbca 只是第一步这时的「装完能起」和上线后的「重启还能起」是两件完全不同的事。我的习惯是把下面这套验证流程跑完才算真正交付。先看集群资源全景crsctl status resource -t # 期望输出ora.network、ora.asm、ora.cssd、ora.diskmon 等全部 ONLINE检查 OCR 完整性ocrcheck # 期望输出中出现 Status of Oracle Cluster Registry is as followsVersion 正常验证 SCAN 与 VIP 解析dig short scan19.vip.rac.libai # 期望返回 3 个不同的 IP crsctl status resource ora.scan1.type -v然后强制做一次节点重启回归将 node2 shutdown -r now等它启动后 30 分钟内持续观察让集群自动做资源接管和恢复。回归完再查一遍 crsctl status resource -t同时用 asmcmd lsdg 确认磁盘组还是 MOUNTEDsrvctl status database -d orcl 确认实例在两个节点上都 OPEN。最后跑一次正式的 post-check$GRID_HOME/bin/cluvfy stage -post crsinst -n node1,node2 $GRID_HOME/bin/cluvfy comp ocr这套流程帮我拦下过不止一次问题有一个环境就是节点重启后一个 VIP 卡在 UNKNOWN 状态另一个实例自动注册失败而重启前所有检查都是绿的。从那以后每次装完 RAC 我都强制走一遍节点重启回归把「装完能起」和「重启还能起」两件事分开验收再没被这类问题半夜叫醒过。希望帮到你。本文还有配套的精品资源点击获取