Oracle RAC集群时间不一致怎么修?配置NTP服务同步时间
Oracle RAC集群时间不一致怎么修?配置NTP服务同步时间

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
先说一个核心结论:处理Oracle RAC集群的时间同步问题,最忌讳的就是“头痛医头,脚痛医脚”。手动执行ntpdate强行对齐,或者放任部分节点开着ntpd、部分节点关着——这些做法,恰恰是时间差越滚越大的根源。问题的本质在于,只要有一个节点的ntpd在运行且未按Oracle的规则配置,整个集群的ctssd就会自动退居observer mode,彻底丧失自适应同步能力。
检查 ctssd 是不是已经掉进 observer mode
动手调整任何配置之前,第一步永远是先诊断。你得先确认集群的时间同步机制是否已经“罢工”了。
- 执行命令
crsctl check ctss。如果返回结果是CTSS is in observer mode,那就意味着CTSS已经放弃了控制权,正处在“围观”状态——它以为NTP在干活,但实际情况往往是NTP自身也并不可靠。 - 同时,别忘了在所有节点上运行
date命令对比一下时间。差值超过±500毫秒就已经属于高风险;一旦超过1秒,ORA-00600 [kgxgncv1]这类内部错误,甚至实例拒绝启动的情况都可能发生。 - 最后,看一眼日志确认一下:
tail -20 $GRID_HOME/log/`hostname`/ctssd/ctssd.log。如果看到Switching to observer mode或者Failed to communicate with reference node这类信息,诊断就基本坐实了。
禁用 NTP 前必须清干净残留
很多修复尝试之所以失败,问题就出在“清理不彻底”。Oracle的判断逻辑非常死板:只要它发现/etc/ntp.conf这个文件存在,就认为NTP服务应该被启用,于是CTSS就必须退居二线。所以,清理工作必须做到位。
- 停服务:
systemctl stop ntpd(或者service ntpd stop)。 - 关自启:
systemctl disable ntpd,防止重启后服务自动拉起。 - 删配置:
rm -f /etc/ntp.conf。这里要特别注意,必须是删除(rm),而不是移动或重命名(mv)。因为即便文件被移走了,只要还在原路径,某些检查机制仍可能认为它存在。 - 删PID文件:
rm -f /var/run/ntpd.pid,清理掉可能的进程锁文件。 - 确认无残留:最后用
ps -ef | grep ntp检查一下,确保没有ntpd主进程还在运行(只剩下grep自身的进程可以忽略)。
重启 ctssd 并验证 active 状态
清理完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(例如Offset (in msec): 3)。 - 持续观察:建议用
watch -n 10 'crsctl check ctss'命令观察10分钟,确认offset的波动稳定在±10毫秒以内,没有出现大幅跳变。 - 如果状态依然显示为observer,那就要警惕了。这通常意味着某个节点漏删了
/etc/ntp.conf,或者环境中使用了chronyd(同样需要停用并删除/etc/chrony.conf)。
非要共存 NTP 和 CTSS?那得按 Oracle 规则硬配
有些生产环境,比如金融行业,出于合规要求必须对接统一的中心化NTP服务器。这种情况下,可以让CTSS保持在observer模式,但前提是NTP的配置必须严格遵守Oracle的规则,否则时间漂移照样会发生。
- 在
/etc/ntp.conf配置文件中,必须包含这两行:tinker stepout 0和disable kernel。 - 在
/etc/sysconfig/ntpd文件中,OPTIONS参数里必须带上-x(例如OPTIONS="-x -u ntp:ntp"),这个选项的作用是禁止时间的大步跳变。 - 绝对禁止使用
ntpdate或chronyc makestep这类命令进行手动强制校时。它们会造成瞬间超过128秒的时间跳变,会直接导致节点被CTSS“踢出群聊”。 - 验证NTP连通性与状态:运行
ntpq -p,在输出中,目标server的行首应该有*(表示主用)或+(表示备用),并且offset值应长期稳定在±5毫秒内。如果频繁出现disp(离散度)大于100,或者reach值为0,那很可能意味着UDP 123端口被防火墙拦截了。
说到底,这类问题的修复,难点从来不在具体的操作命令上,而在于所有节点配置的绝对一致性。少一个-x参数,多一行未被注释的server配置,或者某个节点忘记删除ntp.conf文件,整个集群的时间信任链就会断裂。修复完成后,千万别只看一次检查结果就掉以轻心,至少持续监控crsctl check ctss的输出半小时以上,确保状态真正稳定下来。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
SQL视图数据不一致如何排查_检查物理表锁与事务隔离
视图数据与物理表不一致?先别慌,按这四步走 排查视图数据与物理表不一致的问题,核心在于理清四个常见原因:事务隔离级别的差异、视图中非确定性函数的影响、底层物理表的锁阻塞,以及表结构变更后视图元数据未刷新。系统性地检查隔离级别设置、视图定义、锁状态和对象依赖关系,是解决问题的关键。 视图查出来的数据和
如何利用SQL子查询实现列转行操作_嵌套CASE WHEN逻辑分析
如何利用SQL子查询实现列转行操作:嵌套CASE WHEN逻辑分析 子查询里不能直接用CASE WHEN做列转行?先搞清执行顺序 很多朋友一看到“列转行”,下意识就想用CASE WHEN去解决。但这里有个根本性的误区:CASE WHEN本身并不改变行数,它只是在每一行内部做条件判断和值映射。真正的“
SQL如何判断记录是否为重复项_使用ROW_NUMBER标记录状态
SQL重复记录识别:ROW_NUMBER()的正确打开方式 先明确一个核心概念:ROW_NUMBER() 这个窗口函数,它本身并不具备“判断重复”的能力。它的本职工作,是按你设定的规则给每一行编个号。真正用来识别重复的,其实是“按特定字段分组后,组内编号大于1”这套组合逻辑。所以,问题的关键从来不是
SQL如何根据聚合结果反向筛选记录_利用存在性子查询
EXISTS子查询:先分组聚合再筛选原始记录的最稳妥方式 用 EXISTS 做聚合后反向筛选,比 HA VING 更灵活 开门见山,先说一个核心结论:当你需要“先按某列分组、算出聚合值(比如平均值、最大值),然后再找出满足该聚合条件的原始记录”时,EXISTS 子查询往往是那个最稳妥、最不会出错的选
SQL怎么进行批量字符串的修整清洗_利用TRIM与REGEXP组合
SQL字符串批量清洗:TRIM的局限与正则表达式的实战指南 TRIM 只能去首尾,别指望它删中间空格或特殊符号 一提到字符串清洗,很多人的第一反应就是TRIM()。但实际操作后往往会发现,事情没那么简单。比如,TRIM( hello world )确实能去掉首尾空格,得到 hello world
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

