2012-06-12 21 views
5

私は、監査トリガーでsys.dm_tran_current_transactionからtransaction_idを取得しています。私が知りたいのは、transaction_idの一意性です。ドキュメントには、「現在のスナップショットのトランザクションID」だけが記載されています。sys.dm_tran_current_transaction。トランザクションIDをユニークにする方法

私はこの「ID」が後で再利用されると仮定することができますが、私はこれについていくつかの確認をいただきたいと思います。

+1

興味深い質問、この[ウィキペディアページは関連性があります](http://en.wikipedia.org/wiki/Microsoft_SQL_Server# Logging_and_Transaction) – Andomar

+0

私はあなたが気付くだろうIDが再利用されるとは思わない。 bigintは最大9,223,372,036,854,775,807になることができます。それはまた増分だけのようです。 – Zhenny

+2

@ Zhenny、IDは再利用されるのでご注意ください。 transaction_idはSQLの再起動時にリセットされます。 –

答えて

1
+2

これは、トランザクションIDが一意であるか一意でないことを示していません。この質問とは無関係です。 – usr

+0

私は同意します。データ型がbigintであるという事実は有用ですが、トランザクションIDがデータベースの存続期間中一意であることを示す文書は存在しません。 –

+2

Transaction_idは、サーバーの再起動後に0で再開します。 – Pankaj

1

ABCDEFGHIの答え@良いですが、ちょうどそれに追加します。 TRANSACTION_IDがトランザクション内で同じである

  • 、明示的なトランザクション外
  • 、各バッチのTRANSACTION_ID更新、サーバーのリセットは、あなたのように、時間をかけて同じTRANSACTION_IDが発生します
  • TRANSACTION_IDがリセットされます。

これは、このシナリオのために、監査テーブルでtransaction_idを使用できないことにつながります。 TRANSACTION_ID = 42 SQL Serverとの挿入

監査レコードは、41個の新しいバッチが 監査レコードがTRANSACTION_IDで挿入...実行も= 42

は、あなたが(タイムスタンプのようにTRANSACTION_ID使用することはできません... リセット値が大きいほど後の変更を意味するものではありません。同じIDが同じトランザクションを意味するとは言えません。

関連する問題