2008-10-08 78 views

回答

1

我强烈怀疑SYSDATE也是OS链接的。非常注意你需要使用它的原因。如果有任何实现增量跟踪事件的逻辑(例如,您正在执行增量导出),并且您必须确保没有项目被遗漏以及没有重复项,那么基于顺序标识而不是SYSDATE进行追踪。

事实上,即使对于非集群系统也是如此,因为SYSDATE有时可能会发生变化(节省时间,系统管理员错误...)。

1

使用NTP跨所有服务器(Oracle和其他)同步时间并确保不会发生。不一致的系统时钟是灾难的秘诀。

我会猜想 sysdate将返回您描述的情况下不一致的结果。

+0

谢谢德米特里,我想知道这个人是否对你的猜测有更强烈的意见呢? – 2008-10-10 21:33:11

0

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

2

SYSDATE与节点OS相关;如果在集群中保证正确,那么每次调用SYSDATE时节点都必须同步。 在集群环境中,有序的序列非常昂贵;如果可能,最好避免。 有序序列将保证您的唯一性和顺序 - 但是,如果在从序列中选择并且在提交事务之前处理失败,您仍然可以获得空位。

我们用了几个解决方法:

  1. 一般而言,序列设置为 无序与大容量高速缓存 (25,000),以减少跨集群 通信。
  2. 使用NTP时间同步 节点(它们仍然可以 不正确,+/- 纳秒,所以你 不能依靠这一点)
  3. 对于审计风格的日志中,我们使用SYSTIMESTAMP (时间戳(6) )作为唯一 标识 - 与事实 ,有可能生活(虽然 可能性极小),该日志 可能出现乱序(这是 也有可能与正常 处理,取决于当 承诺发生在)
  4. 当需要有序 序列,并有可能 是空白 - 用一个有序序列 (尽量避免在群集 环境“缓存”没有帮助)

  5. 凡有序序列是 要求 - 但不能有差距 - 我们有我们自己的序列表,锁定记录,获取数字并保持记录锁定,直到用户提交 ;这将导致 其他人试图获得相同的 序列,直到用户的 事务完全提交 - 尽可能避免这样做。