2012-06-12 43 views
5

我在我的審計觸發器中從sys.dm_tran_current_transaction捕獲transaction_id。我想知道的是transaction_id的唯一性。該文檔只說「當前快照的交易ID」。sys.dm_tran_current_transaction。 transaction_id的獨特之處

我只能假設這個「ID」將在稍後時間被重用,但我將不勝感激對此的一些確認。

+1

有趣的問題,這[維基百科頁面看起來相關](http://en.wikipedia.org/wiki/Microsoft_SQL_Server# Logging_and_Transaction) – Andomar

+0

我不認爲這個ID很可能會被重用,你會注意到的,transaction_id是一個bigint可以達到9,223,372,036,854,775,807。它似乎也只會增加。 – Zhenny

+2

@珍妮,請注意,該ID將被重複使用。在重新啓動SQL時重置transaction_id。 –

回答

1
+2

這並不表明交易id是唯一的或不唯一的。這與這個問題無關。 – usr

+0

我同意。數據類型是bigint的事實很有幫助,但似乎沒有任何文檔指出事務標識在數據庫的生命週期中是唯一的。 –

+2

服務器重新啓動後,Transaction_id在0時重新啓動。 – Pankaj

1

@ ABCDEFGHI的回答是不錯的,只是要添加到它;

  • TRANSACTION_ID是一個事務中一樣,
  • 明確的事務外,每批TRANSACTION_ID更新,
  • TRANSACTION_ID狀態,當服務器復位,所以你會遇到同樣的TRANSACTION_ID隨着時間的推移。

這是什麼導致您無法在審計表中使用transaction_id,因爲這種情況;插入TRANSACTION_ID = 42 SQL服務器

審計記錄重置 ...... 41個新批次執行... 審計記錄插入TRANSACTION_ID = 42

此外,您不能使用TRANSACTION_ID像一個時間戳(較高的值並不意味着稍後的變化_並且您不能說相同的ID意味着相同的事務