DB2 CURRENT TIMESTAMP в z / OS возвращает уникальные значения? - PullRequest
2 голосов
/ 16 ноября 2011

У нас DB2 работает в z / OS, и в некоторых таблицах временная метка используется в качестве первичного ключа.

Мое мнение таково, что две транзакции, вызывающие CURRENT TIMESTAMP в одну наносекунду, могут иметьточно такая же временная метка.

Мой коллега считает, что функция CURRENT TIMESTAMP в одной и той же базе данных всегда уникальна.

Документация по DB2 здесь не очень понятна.

Есть ли официальное заявление IBM, которое подтверждает тот или иной тезис?Я нашел только утверждение для UNIX DB2, которое может быть неприменимо для z / OS.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 16 ноября 2011

Бывают случаи, когда он не будет уникальным.Это:

  1. Datetime специальные регистры хранятся во внутреннем формате.Когда два или более из этих регистров неявно или явно указаны в одном операторе SQL, они представляют один и тот же момент времени .
  2. Если оператор SQL, в котором используется специальный регистр datetimeв пользовательской функции или хранимой процедуре, находящейся в области действия триггера, 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

5 голосов
/ 16 ноября 2011

Нет гарантии, что CURRENT TIMESTAMP вернет уникальное значение.

Я видел много примеров сбоя операторов SQL / INSERT DB / 2 в среде z / os при дублировании ключа, когда CURRENT TIMESTAMP использовался для заполнения столбца, определенного как уникальный.У CURRENT TIMESTAMP была достаточно тонкая «гранулярность», чтобы вероятность столкновения была чрезвычайно мала.Это привело к тому, что многие приложения рассматривали их как уникальные идентификаторы.Процессоры работают быстрее, и параллелизм значительно увеличился за эти годы.Любой процесс, который ожидает уникальные значения от CURRENT TIMESTAMP сегодня, вероятно, будет аварийно завершать работу и работать на регулярной основе.

Ваш коллега немного отстает от времени (на нескольких уровнях).

...