在 Oracle 集群中,sysdate 是否始终返回一致的答案?

In an Oracle cluster will sysdate always return a consistent answer?

提问人:Simon Gibbs 提问时间:10/8/2008 最后编辑:AmroSimon Gibbs 更新时间:7/2/2012 访问量:1756

问:

在 Oracle 集群中(多台计算机协作为一个数据库提供服务),“sysdate”函数是否始终返回一致的答案?即使服务器的操作系统时钟报告的值不一致?

函数 PLSQL 集群计算 OracleInternals

评论

0赞 Joeri Sebrechts 7/14/2009
如果 sysdate 已同步,它将包含哪个服务器的时间?

答:

1赞 SquareCog 10/10/2008 #1

使用 NTP 在所有服务器(Oracle 和其他服务器)之间同步时间,并确保不会发生这种情况。不一致的系统时钟是灾难的根源。

我猜 sysdate 会在您描述的场景中返回不一致的结果。

评论

0赞 Simon Gibbs 10/11/2008
谢谢德米特里,我想知道给你投票的人是否对你的猜测有更强烈的看法?
0赞 Matthew Watson 10/11/2008 #2

我花了(一点点)时间寻找这个问题的答案,但找不到答案,但是,鉴于 sysdate 只是从操作系统返回日期/时间,我怀疑 dmitriy 是正确的。

1赞 Andrew not the Saint 10/15/2008 #3

我强烈怀疑 SYSDATE 也与操作系统相关。要非常注意你需要使用它的原因。如果有任何实现事件增量跟踪的逻辑(例如,您正在执行增量导出),并且必须确保没有遗漏和重复项,请基于顺序 ID 而不是 SYSDATE 进行跟踪。

事实上,即使对于非集群系统也是如此,因为 SYSDATE 有时会发生变化(节省时间、sysadmin 错误......

2赞 JQuinn 7/14/2009 #4

SYSDATE 与节点操作系统相关;如果保证在整个群集中正确无误,则每次调用 SYSDATE 时都必须同步节点。 在聚类环境中,有序序列的成本很高;如果可能的话,最好避免。 有序序列将保证您的唯一性和顺序 - 但是,如果在从序列中选择并在提交事务之前处理失败,您仍然可能会获得间隙。

我们使用一些解决方法:

  1. 通常,序列设置为 无序且缓存大小较大 (25,000) 以减少集群间 通信。
  2. 使用 NTP 进行时间同步 节点(它们仍然可以是 不正确,+/- 纳秒,所以你 不能依赖这个)
  3. 对于审核样式日志,我们使用 systimestamp (timestamp(6)) 作为唯一 标识符 - 并接受事实 这是可能的(虽然 极不可能)日志 可能会出现无序(这是 也可以与正常 处理,取决于时间 发生提交)
  4. 订购的 序列是必需的,并且可以 be gaps - 使用有序序列 (尽量避免在集群中 环境作为“缓存”无济于事)

  5. 其中有序序列是 必需的 - 但不能有间隙 - 我们有自己的序列表,锁定记录,获取编号和 然后保持记录锁定,直到 用户提交;这将导致 其他所有人都试图得到同样的待遇 序列等到用户的 交易已完全提交 - 如果可能的话,避免这样做。