2009-06-11 31 views

回答

8

運行

DBCC OPENTRAN 
19

XACT_STATE()報告會話的事務狀態,指示會話是否有活動的事務,以及交易是否有能力承諾。它返回三個值:

  • 1,會話具有活動事務。會話可以執行任何操作,包括寫入數據和提交事務。
  • 0,該會話沒有活動事務。
  • -1,會話有一個活動事務,但發生了一個錯誤,導致該事務被分類爲一個不可提交的事務。會話不能提交事務或回滾到保存點;它只能請求完整的事務回滾。會話在回滾事務之前不能執行任何寫入操作。會話只能執行讀取操作,直到它回退事務。事務回滾後,會話可以執行讀取和寫入操作,並可以開始新的事務。

@@ TRANCOUNT返回當前連接的活動事務數。

  • 0,不是在事務
  • 1,在一個事務
  • N,在嵌套事務
+1

+1非常好解釋..如何執行完整的事務回滾,如您所說'會話不能提交事務或回滾到保存點;它只能請求完整的事務回滾。「 。你什麼意思是完全回滾? – 2015-02-05 14:03:24

5
SELECT 
    trans.session_id AS [SESSION ID], 
    ESes.host_name AS [HOST NAME],login_name AS [Login NAME], 
    trans.transaction_id AS [TRANSACTION ID], 
    tas.name AS [TRANSACTION NAME],tas.transaction_begin_time AS [TRANSACTION BEGIN TIME], 
    tds.database_id AS [DATABASE ID],DBs.name AS [DATABASE NAME] 
FROM sys.dm_tran_active_transactions tas 
JOIN sys.dm_tran_session_transactions trans 
ON (trans.transaction_id=tas.transaction_id) 
LEFT OUTER JOIN sys.dm_tran_database_transactions tds 
ON (tas.transaction_id = tds.transaction_id) 
LEFT OUTER JOIN sys.databases AS DBs 
ON tds.database_id = DBs.database_id 
LEFT OUTER JOIN sys.dm_exec_sessions AS ESes 
ON trans.session_id = ESes.session_id 
WHERE ESes.session_id IS NOT NULL 

--db名稱將只有當SELECT @@ TRANCOUNT命令執行時纔會獲得。NULL

執行上面的代碼......將給予其交易occures會議細節..

0

歸納起來,有以下幾種方法:

  1. SELECT @@ TRANCOUNT
  2. DBCC OPENTRAN
  3. SELECT XACT_STATE()
  4. sp_lock的
  5. SELECT * FROM sys.dm_tran_active_transactions
相關問題