【问题标题】:How can I check if the system time of the DB server is correct?如何检查数据库服务器的系统时间是否正确?
【发布时间】:2020-07-16 15:43:58
【问题描述】:

我从服务台收到了一个错误案例,这是由于应用程序服务器 (JBoss) 和 DB(Oracle) 服务器上的系统时间不同造成的。结果,超时撒谎了。 这种情况不会经常发生,但是对于未来,如果应用服务器能够在数据库服务器上的糟糕时间引发更深层次的问题之前发出警报会更好。

当然,我可以简单地阅读

Select CURRENT_TIMESTAMP

,并将其与本地时间进行比较。但是发送查询和获取结果的时间很可能会花一些明显的时间,我会认为好的时间是坏的,反之亦然。

我还可以检查从发送查询到返回结果的时间。但是这种方式在没有滞后的良好网络的情况下可以正常工作。而如果DB服务器上的时间出现故障,很有可能是DB服务器周围的网络不正常。 DB服务器上的队列可以使发送和接收的时间明显不相等。

您知道在数据库服务器上检查时间的最佳方法是什么? 限制:5秒的精确度 误报

也许我正在发明自行车,而 JBoss 和/或 Oracle 有一些工具可以做到这一点? (我没找到)

【问题讨论】:

  • 为什么不用DB上的NTP服务器和JBoss服务器来同步时间?
  • 1.大多数劳动人民只做大结构的一小部分,往往甚至不能影响外部结构。 2. 手动检查安装的确定性远不如软件检查。 3. 与时间服务器的连接管理可能会中断。 4. 电脑上乱七八糟的东西会弄错时间。
  • 我不能保证这会奏效,但您对“无滞后时间”解决方案的最大希望是将 Oracle 中的 CURRENT_TIMESTAMPSYSTIMESTAMP 进行比较。 SYSTIMESTAMP 是 Oracle 服务器上的时间,CURRENT_TIMESTAMP 是您的应用服务器上的时间。像SELECT CASE WHEN SYSTIMESTAMP = CURRENT_TIMESTAMP THEN 'Good' ELSE 'Bad' END FROM DUAL 这样的东西。如果您可以容忍一秒钟的差异,那么它将变为SELECT CASE WHEN SYSTIMESTAMP BETWEEN CURRENT_TIMESTAMP - INTERVAL '1' SECOND AND CURRENT_TIMESTAMP + INTERVAL '1' SECOND THEN 'Good' ELSE 'Bad' END FROM DUAL
  • Ntp 是唯一的解决方案。系统时钟可能落后
  • 来自docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm CURRENT_TIMESTAMP 返回会话时区中的当前日期和时间,数据类型为 TIMESTAMP WITH TIME ZONE。时区偏移量反映了 SQL 会话的当前本地时间。

标签: sql-server oracle jboss


【解决方案1】:

让应用服务器上运行的程序获取当前时间,然后查询数据库时间(CURRENT_TIMESTAMP),查询返回后应用服务器获取当前时间。

确认数据库时间在应用服务器上的两个时间之间(您需要的任何容差)。您可以单独检查从数据库获得响应所需的时间,但这应该是微不足道的。

如果环境是某种形式的 VM,则最有可能在 VM 从暂停状态启动或恢复时出现问题。在某些情况下,时钟可能运行得快或慢,因此记录时间可以让您从任一方向寻找趋势并采取先发制人的行动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2021-01-20
    • 2023-04-10
    相关资源
    最近更新 更多