2

z/OS で実行されている DB2 があり、一部のテーブルはタイムスタンプを主キーとして使用しています。

私の意見では、同じナノ秒で CURRENT TIMESTAMP を呼び出す 2 つのトランザクションがまったく同じ Timestamp を返す可能性があるということです。

私の同僚は、同じデータベースの CURRENT TIMESTAMP 関数は常に一意であると考えています。

ここにある DB2 の資料はあまり明確ではありません。

いずれかの論文を証明する IBM からの公式声明はありますか? z/OS には当てはまらない可能性がある、UNIX DB2 のステートメントしか見つかりませんでした。

ありがとうございました。

4

2 に答える 2

6

一意でない場合があります。彼らです:

  1. 日時特殊レジスターは内部形式で保管されます。これらのレジスタの2つ以上が単一の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

于 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 に答える