快速顯示資料庫中最早的活動事務資訊(SPID、開始時間、LSN、用戶 ID)。語法:DBCC OPENTRAN [ ( database_name ) ] [ WITH NO_INFOMSGS ]。
CREATE TABLE T_Product(PKID int, PName Nvarchar(50));
GO
BEGIN TRAN
INSERT INTO T_Product VALUES (101, N'嫦娥四號');
GO
DBCC OPENTRAN;
ROLLBACK TRAN;
GO
DROP TABLE T_Product;
GO
輸出關鍵欄位:SPID=54、Start Time=2010-12-24 14:05:29。
SELECT session_id, transaction_id, is_user_transaction, is_local
FROM sys.dm_tran_session_transactions
WHERE is_user_transaction = 1;
SELECT s.text
FROM sys.dm_exec_connections c
CROSS APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) s
WHERE session_id = 54;
SELECT transaction_begin_time,
CASE transaction_type
WHEN 1 THEN 'Read/Write'
WHEN 2 THEN 'Read-Only'
WHEN 3 THEN 'System'
WHEN 4 THEN 'Distributed'
END AS tran_type,
CASE transaction_state
WHEN 0 THEN 'Not initialized'
WHEN 1 THEN 'Initialized, not started'
WHEN 2 THEN 'Active'
WHEN 3 THEN 'Ended (read-only)'
WHEN 4 THEN 'Commit initiated (distributed)'
WHEN 5 THEN 'Prepared, awaiting resolution'
WHEN 6 THEN 'Committed'
WHEN 7 THEN 'Rolling back'
WHEN 8 THEN 'Rolled back'
END AS tran_state
FROM sys.dm_tran_active_transactions
WHERE transaction_id = 489743;
DBCC OPENTRAN 獲取 SPID。transaction_id 與 SQL 文本。KILL SPID 釋放資源。KILL 會回滾未提交工作,可能造成資料不一致,務必先評估影響。using (TransactionScope) 確保事務正確結束;大批次拆分小事務;啟用連線池正確釋放連線。