故障排查:Oracle RAC 19c节点2 root.sh执行失败,从CRS-1705投票文件缺失到权限错误的完整诊断

📅 2026/7/14 23:57:33 👁️ 阅读次数 📝 编程学习
故障排查:Oracle RAC 19c节点2 root.sh执行失败,从CRS-1705投票文件缺失到权限错误的完整诊断

1. 问题现象与初步分析

最近在VMware虚拟化环境(Linux 7.6)中部署Oracle RAC 19c时,遇到了一个典型问题:节点2的root.sh脚本执行失败,导致集群启动失败。具体报错信息包括CRS-1705(投票文件缺失)、CRS-2883、CRS-4406及PRVG-2032/PRVH-0116(文件权限/属主错误)等一系列复合错误。

从日志中可以看到,root.sh脚本在执行到第17步"StartCluster"时开始报错。关键错误信息是CRS-1705,提示"Found 0 configured voting files but 1 voting files are required",即系统找不到配置的投票文件,但集群需要至少1个投票文件才能正常运行。这个错误直接导致了后续的集群启动失败。

2. 深入分析投票文件问题

2.1 投票文件的作用

投票文件(Voting Files)是Oracle RAC集群中的关键组件,主要用于:

  • 集群成员资格判定
  • 脑裂(Split Brain)防护
  • 故障检测和恢复

在19c版本中,Oracle推荐将投票文件放在ASM磁盘组中。每个投票文件通常需要至少1GB的空间,且Oracle建议配置奇数个投票文件(通常为3个)以实现高可用。

2.2 为什么节点2找不到投票文件

根据错误日志和实际排查,我们发现节点2找不到投票文件的原因可能有:

  1. ASM磁盘组在节点2上未被正确识别
  2. 共享存储配置存在问题
  3. 节点间的配置不同步
  4. 权限问题导致无法访问投票文件

通过检查两个节点的ASM磁盘状态,我们发现节点1可以正常识别所有ASM磁盘,而节点2缺少部分磁盘的识别。这解释了为什么投票文件在节点1可用而在节点2不可用。

3. 文件权限与属主问题分析

除了投票文件问题,错误日志中还显示了几个关键的文件权限和属主问题:

3.1 /etc/oracleafd.conf文件问题

PRVG-2032 : Group of file "/etc/oracleafd.conf" did not match the expected value on node "rac2". [Expected = "oinstall(54321)" ; Found = "asmadmin(54329)"]

这个错误表明/etc/oracleafd.conf文件的组属性不正确。Oracle期望这个文件的组为oinstall(54321),但实际发现是asmadmin(54329)。

3.2 cmdllroot.sh文件问题

PRVH-0116 : Path "/u01/app/19.3.0/grid/crs/install/cmdllroot.sh" with permissions "rw-r--r--" does not have execute permissions for the owner, file's group, and others on node "rac2". PRVG-2031 : Owner of file "/u01/app/19.3.0/grid/crs/install/cmdllroot.sh" did not match the expected value on node "rac2". [Expected = "grid(54322)" ; Found = "root(0)"] PRVG-2032 : Group of file "/u01/app/19.3.0/grid/crs/install/cmdllroot.sh" did not match the expected value on node "rac2". [Expected = "oinstall(54321)" ; Found = "root(0)"]

这里有三个问题:

  1. 文件缺少执行权限(只有读权限)
  2. 文件属主应该是grid用户,但实际是root
  3. 文件组应该是oinstall,但实际是root

4. 系统性解决方案

4.1 解决共享存储识别问题

  1. 在节点2上执行以下命令重新扫描ASM磁盘:
# 以root用户执行 oracleasm scandisks oracleasm listdisks
  1. 检查所有共享磁盘在两个节点上是否都能被识别:
# 在两个节点上都执行 ls -l /dev/oracleasm/disks/
  1. 如果发现有节点2上多出来的无效ASM磁盘(如原始内容中提到的ASMDISK_OCR),可以删除:
oracleasm deletedisk -v ASMDISK_OCR

4.2 修正文件权限和属主

  1. 修正/etc/oracleafd.conf文件的组属性:
chown :oinstall /etc/oracleafd.conf
  1. 修正cmdllroot.sh文件的权限和属主:
chmod 755 /u01/app/19.3.0/grid/crs/install/cmdllroot.sh chown grid:oinstall /u01/app/19.3.0/grid/crs/install/cmdllroot.sh

4.3 重新配置共享磁盘(VMware环境特有问题)

在某些VMware环境中,特别是使用Workstation Pro时,可能会遇到共享磁盘配置问题。可以尝试以下步骤:

  1. 在root.sh失败后,不要关闭安装界面
  2. 进入节点2的虚拟机设置,移除所有共享磁盘
  3. 重新添加共享磁盘(不需要重启操作系统)
  4. 在节点2上重新执行root.sh

5. 验证与后续步骤

完成上述修复后,应该验证集群状态:

  1. 检查集群资源状态:
crsctl status res -t
  1. 检查投票文件状态:
crsctl query css votedisk
  1. 检查ASM磁盘组状态:
asmcmd lsdg

如果一切正常,应该能看到集群资源都处于ONLINE状态,投票文件被正确识别,ASM磁盘组可访问。

6. 经验总结与预防措施

在实际部署Oracle RAC时,以下几点可以帮助避免类似问题:

  1. 共享存储验证:在安装前确保所有节点都能正确识别所有共享磁盘
  2. 权限一致性检查:使用cluvfy工具预先检查权限和配置一致性
  3. 安装顺序:确保先完成节点1的安装,再添加节点2
  4. 环境准备:严格按照Oracle文档准备操作系统环境和参数
  5. 日志监控:安装过程中实时监控日志文件,及时发现并解决问题

我在多个RAC部署项目中遇到过类似问题,发现VMware环境下的共享磁盘配置特别容易出问题。建议在虚拟化环境中部署RAC时,特别注意存储配置的稳定性和一致性。