我们有一个在 z/OS 上运行的 DB2,并且一些表使用时间戳作为主键。
我的观点是,在同一纳秒内调用 CURRENT TIMESTAMP 的两个事务可能会返回完全相同的时间戳。
我的同事认为同一个数据库上的 CURRENT TIMESTAMP 函数总是唯一的。
这里的 DB2文档不是很清楚。
是否有来自 IBM 的官方声明来证明其中一个论点?我发现只有一个针对 UNIX DB2 的声明,它可能不适用于 z/OS。
谢谢你。
在某些情况下,它不会是唯一的。他们是:
来源:http: //publib.boulder.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2.doc.sqlref/xfbb68.htm#xfbb68
如果你想要一个唯一的时间戳,你应该使用GENERATE_UNIQUE() 。这里的好例子:http: //www.mainframesupport.dk/tips/tip0925.html
不能保证 CURRENT TIMESTAMP 将返回唯一值。
当使用 CURRENT TIMESTAMP 填充定义为唯一的列时,我在 z/os 环境中看到了许多 DB/2 SQL INSERT 语句在重复键上失败的示例。
曾几何时,CURRENT TIMESTAMP 具有足够精细的“粒度”,碰撞的概率非常小。这导致相当多的应用程序将它们视为唯一标识符。这些年来,处理器速度更快,并行度也大大提高。任何期望今天来自 CURRENT TIMESTAMP 的唯一值的进程都可能会定期崩溃和烧毁。
你的同事有点落后于时代(在几个层面上)。