在一个Oracle集群(多台机器共同服务一个数据库)中,“sysdate”函数是否会始终返回一致的答案?即使服务器的操作系统时钟报告的值不一致?在Oracle集群中,sysdate会始终返回一致的答案?
回答
我强烈怀疑SYSDATE也是OS链接的。非常注意你需要使用它的原因。如果有任何实现增量跟踪事件的逻辑(例如,您正在执行增量导出),并且您必须确保没有项目被遗漏以及没有重复项,那么基于顺序标识而不是SYSDATE进行追踪。
事实上,即使对于非集群系统也是如此,因为SYSDATE有时可能会发生变化(节省时间,系统管理员错误...)。
使用NTP跨所有服务器(Oracle和其他)同步时间并确保不会发生。不一致的系统时钟是灾难的秘诀。
我会猜想 sysdate将返回您描述的情况下不一致的结果。
谢谢德米特里,我想知道这个人是否对你的猜测有更强烈的意见呢? – 2008-10-10 21:33:11
我花了一点时间寻找答案,但找不到一个,但是,鉴于sysdate只是从操作系统返回日期/时间,我怀疑dmitriy是正确的。
SYSDATE与节点OS相关;如果在集群中保证正确,那么每次调用SYSDATE时节点都必须同步。 在集群环境中,有序的序列非常昂贵;如果可能,最好避免。 有序序列将保证您的唯一性和顺序 - 但是,如果在从序列中选择并且在提交事务之前处理失败,您仍然可以获得空位。
我们用了几个解决方法:
- 一般而言,序列设置为 无序与大容量高速缓存 (25,000),以减少跨集群 通信。
- 使用NTP时间同步 节点(它们仍然可以 不正确,+/- 纳秒,所以你 不能依靠这一点)
- 对于审计风格的日志中,我们使用SYSTIMESTAMP (时间戳(6) )作为唯一 标识 - 与事实 ,有可能生活(虽然 可能性极小),该日志 可能出现乱序(这是 也有可能与正常 处理,取决于当 承诺发生在)
当需要有序 序列,并有可能 是空白 - 用一个有序序列 (尽量避免在群集 环境“缓存”没有帮助)
凡有序序列是 要求 - 但不能有差距 - 我们有我们自己的序列表,锁定记录,获取数字并保持记录锁定,直到用户提交 ;这将导致 其他人试图获得相同的 序列,直到用户的 事务完全提交 - 尽可能避免这样做。
- 1. Sympy求解不会返回答案
- 2. password_verify始终返回false,并且我无法在任何地方找到答案
- 3. dgtsv - LAPACK不返回答案
- 4. hh:mm:ss返回错误的答案在php
- 5. CLLocation distanceFromLocation返回错误的答案,然后正确的答案
- 6. Rails子集选择始终返回true
- 7. Backbone.js收集和sortedIndex始终返回0
- 8. JSON.Net始终返回{}
- 9. 正确的答案在返回之前,返回不正确
- 10. oracle sysdate在where子句中
- 11. SQL集团通过不返回准确的答案
- 12. Scalapack返回错误的答案
- 13. Python 3.5返回意外的答案
- 14. AVG(TIMESTAMPDIFF)mySQL返回错误的答案
- 15. 如果返回错误的答案(python)
- 16. 始终显示群集界限
- 17. 划分案例陈述和答案始终为零
- 18. scala spark mllib fpgrowth每次都会返回不同的答案
- 19. SQL内部连接不会返回正确的答案
- 20. Oracle - 选择内部的sysdate的格式返回
- 21. ClassLoader.getResourceAsStream在JBoss中7始终返回null
- 22. errno始终在VxWorks PPC中返回零
- 23. oracle sql sysdate
- 24. Java math.pow()返回错误答案
- 25. 模块函数不返回答案
- 26. _BitScanForward64在C++。exe中返回错误的答案(rubenvb-4.7.2-release)
- 27. Bind_Result始终返回0
- 28. mysql_num_rows始终返回1
- 29. selectedSegmentIndex始终返回0
- 30. LocationServices.FusedLocationApi.getLastLocation始终返回null
如果sysdate被同步,它将包含哪个服务器的时间? – 2009-07-14 14:33:44