【发布时间】: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_TIMESTAMP与SYSTIMESTAMP进行比较。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