
简介这份安装手册面向具备一定 Linux 与数据库基础的 DBA 及运维工程师聚焦在 Red Hat Enterprise Linux 7.6 环境下完成 Oracle 19c RAC 集群部署与 GNS 配置 SCAN 这类较复杂场景。内容从操作系统环境检查起步依次覆盖关闭 THP 并开启 Hugepages、安装 Red Hat 及其余依赖软件包、通过 Preinstall RPM 或手工方式调整内核参数、CVU 校验以及固定网络与 GNS 结合的网络配置方案并补充操作系统杂项配置与时钟同步等收尾环节同时穿插 Flex ASM 机制介绍与各版本变化对比说明从 12.2 起分化为 Standalone Cluster 与 Domain Service Cluster 两种集群模式。手册还记录了实际配置中遇到的问题与分析排查方法便于读者按章节逐项对照、定位故障。资源为单个 docx 文档压缩包约 160KB已有 719 人学习下载适合作为部署实操时的手边参考。1. 从一次重启后才暴露的故障说起19c RAC Linux 7.6 安装最容易出问题的环节不在 gridSetup.sh 的图形界面里而在装完重启之后节点上的透明大页面又回来了GIGrid Infrastructure起不来或者起来后内存一直抖动。我经手过一套两节点集群安装当天一切正常跑了两周开始随机踢节点最后查到/sys/kernel/mm/transparent_hugepage/enabled还是[always]之前改的 grub 根本没生效。这套环境在中小规模业务库上很常见两三个节点、共享存储、要求实例级高可用但机器往往不是全新交付的系统层早被别人的配置动过。想一次装通就得先把环境门槛、内核参数、网络解析这三层逐个核对清楚再进图形界面。下面按我实际装机的顺序写从系统检查一路到装完怎么验。2. 环境核对Linux 7.6 上跑 19c RAC 的硬门槛安装前这一轮核对最省时间。很多人跳过它直接挂 ISO结果跑到 CVU 预检才发现内核版本不够、/dev/shm只有 64M 或者/tmp塞在根分区里。这些检查全部是只读命令不花两分钟却能省掉后面一次回滚。2.1 内存、swap、/tmp 与 /dev/shm 的检查命令内存底线是 8G实际做生产库我一般按单节点 16G 起算因为一个节点的 GI 栈加 ASM 实例本身就要吃掉 34G再叠一个 SGA 很容易触顶。swap 的算法分两段物理内存 4G 到 16G 之间时swap 给到和内存一样大物理内存超过 16Gswap 固定 16G 就够。这里有个容易漏的点——如果启用了 HugePages算 swap 时要把预分配给大页的那部分内存扣掉否则你会写一个虚高的 swap 值。/tmp至少要 1G但 19c 的 grid 安装包解压阶段实际会占掉几个 G我习惯单独挂一个 5G 以上的分区。/dev/shm要确认是 tmpfs 挂载且权限为 1777这个目录后面 root.sh 阶段会用到。# 物理内存与 swap单位 kB grep MemTotal /proc/meminfo grep SwapTotal /proc/meminfo # /tmp 与 /dev/shm 的空间、挂载类型 df -h /tmp df -h /dev/shm mount | grep -E shm|/tmp # /dev/shm 权限应为 drwxrwxrwt ls -ld /dev/shmgrep MemTotal出来的是 kB除以 1024 才是 G别直接拿数字去比对 8G。mount | grep shm如果看不到 tmpfs说明/dev/shm没挂上需要补fstab条目再mount -a。ls -ld /dev/shm的权限位末尾必须是t不是1777的话后面 GI 启动会报共享内存段创建失败。2.2 内核版本、运行级别与空间规划Linux 7.6 自带的内核是3.10.0-957.el7.x86_64属于 Red Hat 兼容内核分支满足 19c 要求的3.10.0-693.5.2.0.1.el7.x86_64及以上。如果机器上跑的是 UEK 分支门槛是 UEK4 的4.1.12-112.16.7.el7uek.x86_64或 UEK5 的4.14.35-1818.1.6.el7uek.x86_64及以上。版本号只比到el7之前那一段小数点后的补丁号低于门槛就别硬上。运行级别要 3 或 52 不行。空间上GI 的 home 至少 12GOracle home 至少 10G我一般直接给/u01分 100G因为后面还要放补丁、trace、归档。# 内核版本与架构输出形如 3.10.0-957.el7.x86_64 x86_64 uname -mr # 发行版版本确认是 7.6 cat /etc/redhat-release # 运行级别应为 3 或 5 runlevel # 空间规划 df -h /u01uname -mr一次给出内核版本和架构比uname -a干净。runlevel输出两个数字第二个才是当前级别看到N 5或N 3就对了如果是N 2用systemctl set-default multi-user.target改完重启。df -h /u01如果提示目录不存在先建目录再挂盘别在根分区上装。2.3 Standalone Cluster 与 Domain Service ClusterGIMR 从 19c 起可选从 12.2 开始集群分成两种模式。Standalone Cluster 最多支持 64 个节点每个节点直连共享存储通过各自节点的 ASM 实例或共享文件系统挂载本地管理 GIMR。Domain Services Cluster 则是一个或多个节点组成域服务集群集中提供 MGMTDB、TFA 日志收集、合并的 ASM 存储管理成员集群可以物理直连分片存储也可以走 ASM IO Service 通过网络访问。两节点自建业务库基本都是选 Standalone别为了“架构先进”去上 Domain Services那套东西要额外的成员集群和 Hub 节点规划。真正影响安装参数的是 GIMR19c 的 Standalone 安装里GIMR 变成了可选项。如果选装就要在 HugePages 里额外预留 1G 给 GIMR 的 SGA如果不装大页只算数据库实例的 SGA 就行。提示GIMR 选与不选在安装向导里一旦点过就不太好回退最好在动手前定下来并把这个结论写进装机记录。3. 系统层调优THP、Hugepages、依赖包与内核参数这一层是安装文档里最容易抄错的部分因为很多参数是“看起来设了其实没生效”。配置原理不复杂THP 要在内核启动参数层面关掉HugePages 要在 sysctl 层面预留内核参数要落在/etc/sysctl.d/下而不是零散 echo 到/proc。区别在于前者重启后还在后者重启就没了。3.1 关闭透明大页面并重建 grub先看现状。enabled和defrag两个文件都要看输出里方括号包住的那个就是当前值理想状态是[never]。cat /sys/kernel/mm/transparent_hugepage/enabled cat /sys/kernel/mm/transparent_hugepage/defrag如果还是[always]把参数写进 grub而不是每次开机跑脚本# 备份现有 grub 配置出问题能直接回滚 cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak.$(date %F) # 编辑内核启动参数在 GRUB_CMDLINE_LINUX 末尾追加 vi /etc/default/grub # GRUB_CMDLINE_LINUXrd.lvm.lvrhel/root rd.lvm.lvrhel/swap ... transparent_hugepagenever # BIOS 机器重建 grub.cfg grub2-mkconfig -o /boot/grub2/grub.cfg # UEFI 机器用下面这条路径不同 # grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg # 重启后验证 shutdown -r now cat /proc/cmdlineGRUB_CMDLINE_LINUX里原有的rd.lvm.lv之类一律保留只在末尾追加不要整行替换替换掉根分区就起不来了。grub2-mkconfig的-o参数是输出文件BIOS 和 UEFI 两台机器的路径不一样用错路径的结果是“命令成功但重启后参数没生效”这也是很多人以为关掉了 THP 其实没关的原因。重启后cat /proc/cmdline能看到transparent_hugepagenever才算落地。3.2 HugePages 与 memlock 的算法大页数量按 SGA 总量倒推把所有实例的 SGA 加起来装上 GIMR 就再加 1G除以 2M 得到页数再上浮 10% 左右做余量。比如两个节点各一个实例、SGA 各 8G就是 16G 除以 2M约 8192 页实际给 9000 上下。# /etc/sysctl.conf 追加数值按上面算出来的填 vm.nr_hugepages 9216 # 立即生效 sysctl -p # 查看分配结果HugePages_Total 应等于设定值 grep Huge /proc/meminfolimits.conf里的 memlock 要放开否则 oracle 用户锁不住这么多内存# /etc/security/limits.conf oracle soft memlock 197132288 oracle hard memlock 197132288 # grid 用户如果也跑 ASM 实例同样需要一组 grid soft memlock 197132288 grid hard memlock 197132288memlock 的单位是 KB上面这个值约等于 188G写unlimited也能过但有些环境里unlimited会被 PAM 限制截断我倾向写具体数字。改完必须重新登录才生效ulimit -l看到新值才算数su - oracle之后立刻查一次。3.3 依赖包与 preinstall RPM 的取舍必须装的包是一长串缺一个libaio或compat-libcap1就会在链接阶段失败。RHEL 7.6 上我一般一次性装齐yum install -y \ bc binutils compat-libcap1 compat-libstdc-33 elfutils-libelf elfutils-libelf-devel \ fontconfig-devel glibc glibc-devel ksh libaio libaio-devel \ libX11 libXau libXi libXtst libXrender libXrender-devel libxcb \ libgcc librdmacm-devel libstdc libstdc-devel make \ net-tools nfs-utils smartmontools sysstatnet-tools是 RAC 和 Clusterware 要用的nfs-utils给 ACFS 用。如果要上 ACFS Remote还得补python、python-configshell、python-rtslib、python-six、targetcli这组。注意 RHEL 7 里compat-libstdc的实际包名是compat-libstdc-33照着文档写原名会报找不到包。第二条路是装oracle-database-preinstall-19c它会把 oracle 用户、oinstall 和 dba 组、sysctl 参数、limits 限制一次性配好还会顺手设numaoff。省事但有两个前提机器上不能已经有你自己建的 oracle 用户和组否则 UID/GID 会对不上而且它写进去的 sysctl 值会跟你手工写的文件打架这一点后面单独说。3.4 手工写内核参数与 CVU 预检不用 preinstall 的话参数统一写在/etc/sysctl.d/下不要echo到/proc/sys# /etc/sysctl.d/97-oracledatabase-sysctl.conf 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.rmem_max 4194304 net.core.wmem_default 262144 net.core.wmem_max 1048576# 加载全部 sysctl 配置并确认 sysctl --system sysctl -a | grep -E shmmax|shmall|file-max|aio-max-nr几个值的含义kernel.shmmax是单个共享内存段上限源里给的4294967295是 4G 减 1 的通用值物理内存大的机器要按内存一半重算kernel.shmall是共享内存总页数2097152乘 4K 等于 8Gfs.aio-max-nr是异步 IO 请求数上限RAC 里偏小会直接报 IO 错误。sysctl --system会按文件名顺序加载/etc/sysctl.d/下所有文件所以文件名的数字前缀决定了谁覆盖谁。CVU 是可选步骤但预检能提前暴露节点间不一致。包在 Grid 安装介质的cv/rpm目录里# 有旧版本先卸掉 rpm -qi cvuqdisk rpm -e cvuqdisk # 指定所属组后安装 export CVUQDISK_GRPoinstall rpm -ivh cvuqdisk-1.0.10-1.rpm # 两节点预检-fixup 表示允许它顺手修可修项 ./runcluvfy.sh stage -pre crsinst -fixup -n pub19-node1,pub19-node2CVUQDISK_GRP一般就是oinstall这个变量不 export 的话 rpm 装上了也跑不起来。-fixup会修改一些系统配置第一次跑建议先不加它看原始报告确认问题清单之后再决定要不要让它动手。4. 网络与存储落地hosts、固定 IP、GNS 与 UDEV 绑盘网络这块的规则是死的写错一个下划线或者把 VIP 和 public 放进不同网段安装向导会直接拦住。存储这块的坑在于“当下绑好了重启就变”所以 UDEV 规则必须一次写对。4.1 命名与网段的六条硬规则第一要么全 IPv4要么全 IPv6不要混着来GNS 虽然能生成 IPv6 地址但混配会让解析结果不可控。第二从 18c 起 VIP 是可选的可以给所有节点配也可以一个都不配但不支持只给部分节点配。第三private 网卡最多配四个做 HAIP超过四个的部分自动降为冗余private 不需要做 bond集群自己会做高可用。第四public 和 VIP 的主机名只能用字母、数字和-绝对不能用下划线。第五public、VIP、SCAN VIP 必须在同一个子网段。第六public 要固定配置在各节点网卡上VIP、private IP、SCAN 都可以交给 GNS 管其中 SCAN 需要三个固定 IP。SCAN 那三个地址是硬性的少配一个后面客户端连接会间歇性失败而且这种失败很难和网络问题区分开。4.2 /etc/hosts 与固定 IP 的写法固定配置方案最直白public、private、VIP 全部手写在 hosts 里SCAN 走 DNS 解析。两节点示例如下# public 192.168.204.11 pub19-node1.rac.lab 192.168.204.12 pub19-node2.rac.lab # private 40.40.40.41 priv19-node1.rac.lab 40.40.40.42 priv19-node2.rac.lab # vip 192.168.204.21 vip19-node1.rac.lab 192.168.204.22 vip19-node2.rac.lab # scan vip三个地址走 DNShosts 里不写 # 192.168.204.33 scan19-vip.rac.lab # 192.168.204.34 scan19-vip.rac.lab # 192.168.204.35 scan19-vip.rac.lab # gns vip 192.168.204.10 gns19-vip.rac.lab域名我习惯用.lab这种不对外解析的后缀避免和公司内网已有域名冲突。private 单独用40.40.40.0/24网段物理上两张网卡接不同交换机这样 private 心跳不会和 public 流量抢带宽。SCAN 的注释保留着是为了提醒自己这三个地址必须存在 DNS 里别顺手写进 hosts 造成解析不一致。4.3 bind 正反解与 GNS 子域委派要用 GNS 托管 VIP 和 SCAN就得先有一台自己的 DNS。装 bind 之后/etc/named.conf里配正向域和两个反向域yum install -y bind chroot vi /etc/named.confoptions { directory /var/named; dump-file /var/named/data/cache_dump.db; statistics-file /var/named/data/named_stats.txt; allow-query { any; }; # 可收紧为集群所在网段 recursion yes; allow-transfer { none; }; }; zone . IN { type hint; file named.ca; }; zone rac.lab IN { # 正向域 type master; file named.rac.lab; }; zone 204.168.192.in-addr.arpa IN { # public 网段反解 type master; file named.192.168.204; }; zone 40.40.40.in-addr.arpa IN { # private 网段反解 type master; file named.40.40.40; };正向域文件里除了常规的 A 记录最后两行是 GNS 的关键$TTL 600 IN SOA rac.lab. admin.rac.lab. ( 2024010101 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS master.rac.lab master IN A 192.168.204.12 scan19-vip.rac.lab. IN A 192.168.204.33 scan19-vip.rac.lab. IN A 192.168.204.34 scan19-vip.rac.lab. IN A 192.168.204.35 priv19-node1.rac.lab. IN A 40.40.40.41 priv19-node2.rac.lab. IN A 40.40.40.42 vip19-node1.rac.lab. IN A 192.168.204.21 vip19-node2.rac.lab. IN A 192.168.204.22 pub19-node1.rac.lab. IN A 192.168.204.11 pub19-node2.rac.lab. IN A 192.168.204.12 vip.rac.lab. IN NS gns.rac.lab. gns.rac.lab. IN A 192.168.204.10最后两行的意思是子域vip.rac.lab的解析服务器是gns.rac.lab而这台 GNS 的地址是192.168.204.10。这一对记录就是委派缺一行 GNS 就接管不了子域。对应到安装向导里SCAN 页填的域名必须落在这个被委派的子域下——比如scan19-vip.rac.lab属于vip.rac.lab的子域就能被 GNS 接管GNS 页填 IP192.168.204.10、子域填vip.rac.lab。两者对不上安装时能过运行期 SCAN 解析会飘。反向域文件按网段补 PTR 即可格式是33 IN PTR scan19-vip.rac.lab.这样。改完所有 zone 文件用named-checkconf和named-checkzone各过一遍比直接重启服务靠谱。4.4 UDEV 绑定 ASM 磁盘与存储侧配置手工配 ASM 磁盘靠 UDEV 把/dev/sdX绑成固定名字。规则的核心是用磁盘的 SCSI ID 而不是盘符# 先取每块共享盘的唯一 ID /usr/lib/udev/scsi_id -g -u -d /dev/sdb # /etc/udev/rules.d/99-oracle-asmdevices.rules KERNELsd*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/$parent, \ RESULT3600a09803830reset0001, SYMLINKasm-disk1, OWNERgrid, GROUPasmadmin, MODE0660 KERNELsd*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/$parent, \ RESULT3600a09803830reset0002, SYMLINKasm-disk2, OWNERgrid, GROUPasmadmin, MODE0660RESULT必须和scsi_id的输出一模一样一个字符都不能差这是最常见的失效原因。OWNER给 gridGROUP给 asmadminMODE是 0660权限给宽了 ASM 会拒绝给窄了 grid 用户读不到。# 重新加载规则并触发 udevadm control --reload-rules udevadm trigger --typedevices --actionchange # 验证软链接、属主、权限 ls -l /dev/asm-disk*验证时看的是软链接指向的设备、属主 grid、组 asmadmin、权限brw-rw----。如果软链接存在但属主是 root说明规则里的OWNER没生效通常是SUBSYSTEM写错或者规则文件名排序被别的规则抢先。存储侧还有几项要顺手处理走 NAS 的话按厂商要求补挂载参数和nfs-utils版本用 Direct NFS 就在$ORACLE_HOME/lib下配oranfstabI/O 调度器建议对共享盘设成deadlineSSD 或全闪存储上noop也行别留默认的cfq。SSH 超时限制也要放开/etc/ssh/sshd_config里ClientAliveInterval 300、ClientAliveCountMax 3否则安装中途 SSH 断开向导会卡在半路。5. 安装执行与现场排查gridSetup.sh 到 dbca 的五类翻车前面都是准备这一章是真正动手和出问题时的处理。图形安装本身没什么技术含量难的是执行顺序和报错定位。19c 的路径是gridSetup.sh装 GI然后runInstaller装数据库软件最后dbca建库三步之间不能跳。5.1 图形界面前的收尾清单进图形界面之前我固定过一遍这几项时钟同步用 chrony 还是 ntp 无所谓但两节点必须指向同一个源chronyc sources -v里带^*的那一行就是当前同步源limits.conf里 oracle 和 grid 的nofile、nproc都给足X11Forwarding关掉用 VNC 或本地控制台跑图形向导更稳/etc/hosts里不要留重复记录。# 时钟同步状态 chronyc sources -v timedatectl # 资源限制需重新登录后查看 su - grid -c ulimit -n; ulimit -u su - oracle -c ulimit -n; ulimit -utimedatectl里System clock synchronized: yes才算同步成功。ulimit -n看到 65536 以上比较放心值太小在 root.sh 阶段会报“无法创建足够进程”。5.2 gridSetup.sh 到 runInstaller、dbca 的执行顺序gridSetup.sh用 grid 用户跑向导里依次是集群类型Standalone、节点列表、SSH 互通、网络接口public 和 private 分别绑定、存储方式ASM、GIMR 选不选、ASM 口令、IPMI 可跳过、安装位置、预检、执行。执行阶段会在最后提示用 root 跑两个脚本一个在 GI home 下的root.sh两节点按提示顺序执行。GI 装完后用 root 执行orainstRoot.sh老版本需要19c 里部分流程已合并再用 oracle 用户跑runInstaller装数据库软件最后dbca建库。dbca里选 RAC 数据库、指定两个实例、字符集、内存参数注意内存参数里 SGA 要和前面算 HugePages 时用的值一致否则大页不够分。5.3 翻车一THP 重启后回到 always现象装完 GI 重启节点驱逐eviction记录里出现内存相关告警/sys/kernel/mm/transparent_hugepage/enabled显示[always]。原因只改了/etc/default/grub没执行grub2-mkconfig或者机器是 UEFI 启动输出路径写成了 BIOS 的/boot/grub2/grub.cfg配置写进了没被读取的文件。解决cat /proc/cmdline确认参数是否真的进了内核命令行没进就按启动方式重建UEFI 机器输出到/boot/efi/EFI/redhat/grub.cfg重建前先备份原文件。5.4 翻车二SCAN 解析不上GNS 委派写错层现象安装向导能过客户端连 SCAN 时好时坏nslookup scan19-vip.rac.lab在某个节点上返回不了三个地址。原因正向域里漏了vip.rac.lab. IN NS gns.rac.lab.这行委派或者 SCAN 域名不在被委派的子域下GNS 根本不接管这个域。解决用dig 192.168.204.10 scan19-vip.rac.lab直接问 GNS能答出来说明委派通了答不出来就看正向域末尾那两行 NS 和 A 是否成对以及 SCAN 域名后缀是否和子域一致。5.5 翻车三/dev/shm 权限与大小导致 root.sh 失败现象执行root.sh报共享内存相关错误或者 GI 启动时提示无法创建内存段。原因/dev/shm权限不是 1777或者被挂成了很小的 tmpfs。解决ls -ld /dev/shm看权限位df -h /dev/shm看大小权限用chmod 1777 /dev/shm修正大小在fstab里调size参数后重新挂载改完再跑一次root.sh。5.6 翻车四UDEV 规则生效但重启后盘符变了现象装的时候/dev/asm-disk1指向正确重启后 ASM 起不来ls -l /dev/asm-disk*发现软链接指向了别的盘。原因规则里用了KERNELsdb这种固定盘符写法或者RESULT从别的机器上抄来没改实际匹配不上就退回了默认命名。解决一律用scsi_id取真实 ID 写进RESULT规则里的KERNEL用sd*通配改完udevadm control --reload-rules加udevadm trigger然后重启验证一次别只看当前会话。5.7 翻车五preinstall 和手工 sysctl 互相覆盖现象手工写了97-oracledatabase-sysctl.confsysctl -a查出来kernel.shmmax还是旧值。原因oracle-database-preinstall-19c会安装自己的 sysctl 配置文件文件名排序在你写的文件之后加载时后加载的覆盖先加载的。解决ls /etc/sysctl.d/看全部文件确认哪个最后被加载要么统一只保留一份要么把自己的文件前缀改成更大数字改完sysctl --system再核对一遍关键值。6. 装完怎么验证四组命令确认真跑通了安装向导最后一步显示 successful不代表集群可用。我固定用四组命令做验收缺一组都不算完。第一组看集群整体状态# 所有节点与集群状态-all 会对每个节点执行 crsctl check cluster -all # 节点列表-s 显示状态-t 显示类型 olsnodes -s -t # 各类资源的状态表重点看 ora.asm、ora.LISTENER_SCAN1、ora.gsd crsctl stat res -tcrsctl check cluster -all每个节点都要返回CRS-4537: Cluster Ready Services is online出现CRS-4535就是有组件没起来。olsnodes -s -t里 Active 那列应该是Active如果某个节点是Inactive看/var/log/cluster/下的日志。crsctl stat res -t里 SCAN VIP、SCAN LISTENER、ASM 三类资源必须 INTERMEDIATE 以上OFFLINE的直接对着资源名crsctl status res 名称 -f查详情。第二组看 SCAN 和 VIP 的配置是否和计划一致# SCAN 配置确认三个 VIP 和域名 srvctl config scan # SCAN VIP 与节点对应关系 srvctl status scan # 各节点 VIP 状态 srvctl status vip -n pub19-node1srvctl config scan输出的 SCAN VIP 必须是三个域名后缀要和 DNS 里配的一致。少一个地址客户端连接就会出现“有时连得上有时连不上”的玄学问题。第三组看 ASM 磁盘组# ASM 实例里的磁盘组状态与冗余度 asmcmd lsdg # 用 grid 用户查 ASM 实例状态 srvctl status asm -aasmcmd lsdg里每个磁盘组的state要是MOUNTEDtype要和规划一致NORMAL 还是 EXTERNAL。如果磁盘组是DISMOUNTED先ls -l /dev/asm-disk*确认 UDEV 软链接还在再查 ASM 告警日志。第四组看数据库实例-- 两个实例都要是 OPEN且 INSTANCE_STATUS 一致 SELECT inst_id, instance_name, status, database_status FROM gv$instance;gv$instance里inst_id有 1 和 2、status都是OPEN才算真正跑通。只有一条记录说明另一个实例没起来去对应节点的数据库告警日志里找ORA-开头的行。验证项通过标准不通过先查集群服务每节点 CRS-4537/var/log/cluster 下的 crsd、cssd 日志节点成员olsnodes 全为 Active节点间 private 网络连通性SCAN三个 VIP 与域名一致DNS 委派与 GNS 配置ASM磁盘组 MOUNTEDUDEV 软链接与属主权限实例gv$instance 两条 OPEN各节点数据库告警日志从那以后我每次装完 19c RAC都不看向导最后那句 successful而是把这四组命令按顺序敲一遍输出全部对上才算交付有一次就是因为省了asmcmd lsdg这一步交付第二天才发现一个磁盘组的冗余度和规划不一致返工重配。希望这些顺序和检查项能帮到你少走一遍我踩过的回头路。本文还有配套的精品资源点击获取