代码之家  ›  专栏  ›  技术社区  ›  Simon Gibbs

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

  •  1
  • Simon Gibbs  · 技术社区  · 16 年前

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

    4 回复  |  直到 12 年前
        1
  •  2
  •   JQuinn JQuinn    15 年前

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

    我们使用了一些变通方法:

    1. 无序,缓存大小较大 (25000)以减少集群间 表达
    2. 使用NTP进行时间同步 节点(它们仍然可以是 不正确,+/-纳秒,因此 (不能依赖于此)
    3. 对于审核样式日志,我们使用systimestamp (时间戳(6))作为唯一的 标识符-与事实共存 可能出现故障(这是 处理,取决于时间
    4. 顺序是必需的,并且可以 (尽量避免挤在一起。) 作为“缓存”的环境没有帮助)

    5. 其中一个有序序列是 必需-但不能有间隙-我们有自己的序列表,锁定记录,获取编号和 然后将记录锁定,直到 用户提交;这将导致 序列,以等待用户的 事务已完全提交- 尽可能避免这样做。

        2
  •  1
  •   SquareCog    16 年前

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

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

        3
  •  1
  •   Andrew not the Saint    16 年前

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

    事实上,即使对于非集群系统也是如此,因为SYSDATE有时会改变(节省时间、系统管理错误…)。

        4
  •  0
  •   Matthew Watson    16 年前

    我花了一点时间寻找答案,但没有找到答案,但是,鉴于sysdate只是从操作系统返回日期/时间,我怀疑Dmitry是正确的。