必须先执行crsctl check ctss确认CTSS是否退为observer模式;若是,则彻底清理所有节点的NTP/chrony配置及服务,删除/etc/ntp.conf和/etc/chrony.conf(仅重命名无效),停用并禁启服务,删PID文件,重启ctssd后通过watch持续观察10分钟,确保offset稳定在±10ms内。

Oracle RAC时间不同步,不能靠date -s硬调、不能只启部分节点的chronyd、也不能留着空的/etc/ntp.conf——只要有一个节点的系统时间同步服务配置不一致或残留未清,ctssd就会退为observer mode,整个集群失去自适应同步能力,时间差会持续扩大,最终触发ORA-00600 [kgxgncv1]或CRS-4535。
crsctl check ctss 显示 observer mode 怎么办
这是最该先确认的状态,不是“有没有NTP”,而是“CTSS是否还在干活”。执行crsctl check ctss,若返回CTSS is in observer mode,说明ctssd已放弃控制权,正依赖外部时间服务(但很可能并不可靠)。
- 立刻在所有节点运行
date -u +%s.%N取3次平均,计算最大差值:超过500ms即高风险,超1s可能无法启动实例 - 查日志:
tail -20 $GRID_HOME/log/`hostname`/ctssd/ctssd.log,重点找Switching to observer mode或Failed to communicate with reference node - 别急着改NTP配置,先确认是不是
ctssd本身已失能——它才是RAC内生时间同步的主控
为什么删了ntpd还进不了active mode
Oracle判断逻辑极死板:/etc/ntp.conf存在 = NTP启用 = CTSS必须让权。移动或重命名不算清除,mv /etc/ntp.conf /etc/ntp.conf.bak仍会被识别为存在。
- 停服务:
systemctl stop chronyd(或ntpd),再systemctl disable chronyd - 删配置:
rm -f /etc/ntp.conf /etc/chrony.conf(两个都得删,别漏掉chrony.conf) - 删PID:
rm -f /var/run/chronyd.pid /var/run/ntpd.pid - 确认无残留:
ps -ef | grep -E "(chronyd|ntpd)",只应剩grep自身进程
重启ctssd后offset还是跳变
清理完NTP残留后,CTSS不会自动切回active,必须人工重启并观察收敛性。
- 执行:
crsctl stop res ora.ctssd -init && crsctl start res ora.ctssd -init - 等2–3分钟,再跑
crsctl check ctss:正常应返回CTSS is in Active mode和类似Offset (in msec): 7的数值 - 用
watch -n 10 'crsctl check ctss'持续观察10分钟,确保offset无跳变、波动始终在±10ms内 - 若仍显示
observer,立即检查是否某节点漏删了/etc/chrony.conf(尤其容易忽略)
非要对接统一NTP服务器怎么办
合规场景下允许NTP与CTSS共存,但前提是NTP只校准硬件时钟,不干预系统时钟——否则CTSS仍会fallback。
-
/etc/chrony.conf中必须含makestep和rtcsync(前者允许首次大步校准,后者把时间写回RTC) -
/etc/ntp.conf中必须有tinker stepout 0和disable kernel两行 -
/etc/sysconfig/ntpd中OPTIONS必须含-x,且不能含-g(-g允许首次跳变,会触发CTSS退场)
真正难的不是操作步骤,而是所有节点必须完全一致:配置文件是否存在、服务是否真停、PID是否真删、ctssd是否真收敛——少一个环节,就卡在observer mode里出不来。


















