z/OS上的DB2 CURRENT TIMESTAMP是否返回唯一值?

tec*_*lis 2 db2 timestamp unique zos

我们在z/OS上运行DB2,一些表使用时间戳作为主键.

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

我的同事认为同一数据库上的CURRENT TIMESTAMP函数始终是唯一的.

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

是否有IBM的正式声明,证明了这一个或另一个论点?我发现只有UNIX DB2的声明,它可能不适用于z/OS.

谢谢.

MrG*_*MrG 6

有些情况下它不会是唯一的.他们是:

  1. 日期时间特殊寄存器以内部格式存储.当在单个SQL语句中隐式或显式指定这些寄存器中的两个或多个时,它们表示相同的时间点.
  2. 如果使用日期时间特殊寄存器的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


Nea*_*alB 5

无法保证CURRENT TIMESTAMP将返回唯一值.

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

曾几何时,CURRENT TIMESTAMP具有足够精细的"粒度",使得碰撞的概率非常小.这导致相当多的应用程序将它们视为唯一标识符.多年来,处理器速度更快,并行性大幅提升.任何期望今天来自CURRENT TIMESTAMP的唯一值的进程很可能会定期崩溃和刻录.

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