2

我们有一个在 z/OS 上运行的 DB2,并且一些表使用时间戳作为主键。

我的观点是,在同一纳秒内调用 CURRENT TIMESTAMP 的两个事务可能会返回完全相同的时间戳。

我的同事认为同一个数据库上的 CURRENT TIMESTAMP 函数总是唯一的。

这里的 DB2文档不是很清楚。

是否有来自 IBM 的官方声明来证明其中一个论点?我发现只有一个针对 UNIX DB2 的声明,它可能不适用于 z/OS。

谢谢你。

4

2 回答 2

6

在某些情况下,它不会是唯一的。他们是:

  1. 日期时间特殊寄存器以内部格式存储。当在单个 SQL 语句中隐式或显式指定这些寄存器中的两个或多个时,它们表示相同的时间点
  2. 如果使用 datetime 特殊寄存器的 SQL 语句位于触发器范围内的用户定义函数或存储过程中,则DB2 使用触发 SQL 语句的时间戳来确定特殊寄存器值。

来源: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

于 2011-11-16T16:56:09.080 回答
5

不能保证 CURRENT TIMESTAMP 将返回唯一值。

当使用 CURRENT TIMESTAMP 填充定义为唯一的列时,我在 z/os 环境中看到了许多 DB/2 SQL INSERT 语句在重复键上失败的示例。

曾几何时,CURRENT TIMESTAMP 具有足够精细的“粒度”,碰撞的概率非常小。这导致相当多的应用程序将它们视为唯一标识符。这些年来,处理器速度更快,并行度也大大提高。任何期望今天来自 CURRENT TIMESTAMP 的唯一值的进程都可能会定期崩溃和烧毁。

你的同事有点落后于时代(在几个层面上)。

于 2011-11-16T19:53:30.503 回答