记一次Oracle RAC一节点重启后出现故障的处理

本文讲述了客户在重启RAC节点后遇到的故障,通过排查发现系开发人员误改oracle目录属主导致服务无法写入文件。修复过程包括识别问题、更改文件权限并恢复正常。关键教训在于文件权限管理在RAC环境中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为存储的相关操作,客户需要手动重启rac节点,然而,这个重启导致了接下来的事故。。。。

由于是远程跟我沟通,我回复rac环境下可以重启一个节点,客户就自信重启了,出现的故障如下所示:

[grid@hxdb01 ~]$  srvctl start nodeapps -n hxdb01
PRKH-1010 : 无法与 CRS 服务通信。
PRKH-3003 : 尝试与 CSS 守护程序通信时失败

[grid@hxdb01 ~]$ crsctl start cluster

CRS-2672: Attempting to start 'ora.gpnpd' on 'hxdb01'
CRS-5017: The resource action "ora.gpnpd start" encountered the following error: 
Start action for daemon aborted. For details refer to "(:CLSN00107:)" in "/u01/app/grid/11.2/log/hxdb01/agent/ohasd/oraagent_grid//oraagent_grid.log".
CRS-2674: Start of 'ora.gpnpd' on 'hxdb01' failed
CRS-2679: Attempting to clean 'ora.gpnpd' on 'hxdb01'
CRS-2681: Clean of 'ora.gpnpd' on 'hxdb01' succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'hxdb01'
CRS-5017: The resource action "ora.gpnpd start" encountered the following error: 
Start action for daemon aborted. For details refer to "(:CLSN00107:)" in "/u01/app/grid/11.2/log/hxdb01/agent/ohasd/oraagent_grid//oraagent_grid.log".
CRS-2674: Start of 'ora.gpnpd' on 'hxdb01' failed
CRS-2679: Attempting to clean 'ora.gpnpd' on 'hxdb01'
CRS-2681: Clean of 'ora.gpnpd' on 'hxdb01' succeeded
CRS-4000: Command Start failed, or completed with errors.
[grid@hxdb01 ~]$  crsctl query crs activeversion
Oracle Cluster Registry initialization failed accessing Oracle Cluster Registry device: PROC-26: Error while accessing the physical storage
ORA-29701: unable to connect to Cluster Synchronization Service

一开始发给我这样的报错以为是rac抉择盘 或 ASM磁盘出现故障导致不能加入rac集群,客户那边DBA通过各种查资料及搜索问题,无果,因为这套rac环境是我做的,公司就派我到现场解决;

来到客户现场,检查过基础环境确认没问题,开始查报错,看日志,网络上相关的报错解决非常详细,但经过操作之后完全没用,无奈,只能再次从日志寻找疑点。

gpnpd.log日志中:有一条报错引起了注意:/u01/app/grid/11.2/gpnp/init/hxdb01.pid 写入失败,如下图所示:
这里写图片描述
既然是不能写,第一时间想到文件权限,ll一下这个文件,发现hxdb01.pid属主为root,并且发现整个目录的属主都是root, 这绝对是认为修改的,于是想到了上次开发人员在上线导数据的时候误改了oracle整个目录的属主为root,虽然后来还原了,但有关rac服务的部分目录没有改回来,直到现在是第一次重启节点,导致rac相关服务不能对文件作写操作,以至于不能启动集群服务。

问题找到了,解决就简单多了:

在 /u01/app/grid/11.2/gpnp/目录下,
将 hxdb01 、 init 、  profiles 、 wallets 四个目录的属主由“root” 改为 “grid” ,
重启服务器后 rac恢复正常。
<think>好的,用户现在的问题是关于Oracle RAC节点故障的重新启动处理方法,需要详细的处理步骤。先看下用户提供的引用内容,以及之前的对话历史,确保回答准确且符合用户需求。 首先,用户之前的问题是关于单节点故障处理,现在进步询问具体的重启步骤。之前的回答已经涵盖了故障检测、自动重启、手工排查和数据致性验证,但现在需要更具体的步骤指南。 引用1提到Oracle RAC和MySQL的自动重启机制,但用户现在专注于Oracle RAC,所以需要重点放在Clusterware和CRS的相关操作。引用2是关于删除和添加节点的命令,可能在处理节点替换时有用,但当前问题是重启,可能需要参考这个步骤来调整节点列表或重新配置。引用3提到了重启节点资源无法启动的问题,说明可能存在配置或资源冲突,需要检查日志和资源状态。 用户的需求是明确的步骤,所以需要结构化回答,分步骤说明如何处理节点故障后的重启。可能需要包括检查集群状态、隔离故障节点、日志分析、手动启动资源、修复后的重新加入等步骤。 还要注意用户之前的回答中提到的自动重启机制和手工介入部分,需要结合起来。比如,在自动重启失败的情况下,如何手动干预。同时,要确保引用的内容被正确使用,比如引用2中的命令可能在节点删除时使用,但当前问题可能涉及节点恢复,所以需要调整说明。 另外,用户可能遇到的情况包括节点无法自动恢复,需要手动重启集群服务,或者存在资源冲突导致节点无法正常加入集群。因此,步骤中需要包括检查资源状态、清理残留锁、重新配置节点等操作。 需要确保每个步骤都有对应的命令示例,比如使用crsctl检查状态,srvctl启动实例,以及通过日志分析定位问题。同时,提醒用户验证数据致性,如引用3中提到的问题,可能需要在重启后使用工具检查数据完整性。 最后,生成的相关问题要围绕用户可能进步询问的方向,比如如何预防单点故障、日志分析工具使用、资源冲突解决等,帮助用户扩展知识。</think>以下是Oracle RAC节点故障重启的详细处理步骤,结合故障检测、日志分析和手动干预流程: --- ### **步骤1:确认集群状态** 通过以下命令检查集群整体健康状态: ```bash # 查看集群资源状态 crsctl status res -t # 检查节点存活状态 olsnodes -s ``` - 若故障节点显示为`UNKNOWN`或`INACTIVE`,说明集群已检测到异常[^2]。 - 若节点状态为`OFFLINE`,需进步排查网络或存储问题。 --- ### **步骤2:隔离故障节点** 若节点因硬件/网络问题无法恢复,需手动隔离以防止资源争用: ```bash # 强制关闭故障节点上的集群服务 crsctl stop crs -f # 从集群配置中临时移除节点(需在正常节点执行) crsctl delete node -n <故障节点名> ``` 注:此操作需谨慎,避免误删节点配置[^2]。 --- ### **步骤3:分析日志定位原因** 关键日志文件路径及排查点: 1. **集群日志**:`$GRID_HOME/log/<节点名>/alert<节点名>.log` - 检查`CRS-1001`/`CRS-0215`等错误代码,确认通信超时或资源锁冲突[^3]。 2. **数据库告警日志**:`$ORACLE_BASE/diag/rdbms/<DB_NAME>/<实例名>/trace/alert_<实例名>.log` - 关注`ORA-29740`(实例驱逐)或`ORA-600`(内部错误)。 3. **操作系统日志**:`/var/log/messages`(Linux)或系统事件查看器(Windows) - 检查硬件故障(如磁盘I/O错误)或网络中断录。 --- ### **步骤4:手动重启节点服务** 若自动恢复失败,按顺序执行以下操作: ```bash # 1. 清理残留资源锁 crsctl delete resource ora.<资源名>.db -f # 2. 重启集群服务 crsctl start crs # 3. 启动数据库实例 srvctl start instance -d <DB_NAME> -i <实例名> ``` - 若启动失败,尝试重置节点资源: ```bash crsctl modify resource ora.<资源名>.db -attr "AUTO_START=always" ``` --- ### **步骤5:修复后重新加入集群** 若节点已修复且日志无异常: ```bash # 重新添加节点到集群(在正常节点执行) crsctl add node -n <故障节点名> # 同步集群配置 $GRID_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=<GRID_HOME> CLUSTER_NODES=<节点列表> ``` 完成后通过`srvctl status nodeapps -n <节点名>`验证服务状态[^2]。 --- ### **关键注意事项** 1. **脑裂防护**:确保表决磁盘(Voting Disk)和OCR(Oracle Cluster Registry)的冗余性,避免单点故障引发集群分裂。 2. **超时参数调整**:若频繁误判故障,可调整`misscount`参数(默认30秒): ```bash crsctl set css misscount 60 ``` 3. **数据致性验证**:使用`DBV`或`RMAN VALIDATE`检查数据文件完整性,确保无损坏块[^1]。 --- ### 相关问题 1. **如何通过日志快速定位Oracle RAC节点通信故障?** 2. **Oracle RAC中表决磁盘(Voting Disk)损坏应如何恢复?** 3. **在哪些场景下需要手动清理OCR中的残留资源锁?**
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范一刀

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值