在Oracle集群(一个人多机协同工作,以服务于一个数据库)将“SYSDATE”功能总是返回一致的答案吗? 即使服务器的操作系统时钟报告不一致的值?
Answer 1:
我强烈怀疑SYSDATE是OS联了。 要非常警惕的,为什么你需要使用它的原因。 如果有,它实现事件的增量跟踪(例如,你在做增量出口),你必须确保没有物品遗漏以及不重复任何逻辑,立足于顺序ID而不是SYSDATE跟踪。
事实上,这是即使对于非集群系统真的如SYSDATE有时可以改变(节省时间,系统管理员错误...)。
Answer 2:
SYSDATE是相关的节点操作系统; 如果它是整个集群保证正确的,那么节点将在每次叫SYSDATE时间同步。 在集群环境中,排序的序列是昂贵的; 如果可能的话,最好避免。 有序序列将保证你的独特性和秩序 - 然而,你仍然可以得到的差距,如果从序列中选择后提交事务之前处理失败。
我们用了几个解决方法:
- 通常,序列被设定为无序与大容量高速缓存(25,000),以减少群集间的通信。
- 使用NTP时间同步的节点(他们仍然可以是不正确的,+ / - 纳秒,所以你不能依靠这一点)
- 对于审计风格的日志中,我们使用SYSTIMESTAMP(时间戳(6))作为唯一标识符 - 并且与事实有可能(尽管可能性极小),该日志可能出现无序生活(这也可以进行正常的处理,根据提交发生时上)
当需要一个有序序列,并且可以有差距 - 使用一个有序序列(尽量避免在集群环境中的“缓存”没有帮助)
当需要一个有序序列 - 但可以有没有间隙 - 我们有自己的序列表,锁记录,获取该号码,然后保持记录锁定,直到用户提交; 这将导致其他人试图获得相同的序列等到用户的交易完全承诺 - 避免如果在所有可能这样做。
Answer 3:
使用NTP同步您所有服务器(Oracle和其他规定),并确保不会发生。 不一致的系统时钟是一个灾难。
我猜想 ,SYSDATE会在你所描述的情况下返回不一致的结果。
Answer 4:
我花了很多时间(点点)寻找一个答案,但无法找到一个,但是,考虑到SYSDATE是刚刚从操作系统返回的日期/时间,我怀疑德米特里是正确的。
文章来源: In an Oracle cluster will sysdate always return a consistent answer?