適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 資料庫
有助於識別可能阻礙記錄截斷的使用中交易。
DBCC OPENTRAN 顯示在指定資料庫的交易記錄內,最早的使用中交易以及最早的分散式和非分散式複寫交易 (如果有的話) 的相關資訊。 只有在記錄內有使用中的交易或資料庫包含複寫資訊時,才會顯示結果。 如果記錄內沒有使用中的交易,就會顯示參考用訊息。
注意
不支援非 SQL Server 發行者使用 DBCC OPENTRAN。
語法
DBCC OPENTRAN
[
( [ database_name | database_id | 0 ] )
{ [ WITH TABLERESULTS ]
[ , [ NO_INFOMSGS ] ]
}
]
引數
database_name | database_id |0
要顯示最早交易資訊之資料庫的名稱或識別碼。 若未指定,或指定 0,就會使用目前的資料庫。 資料庫名稱必須符合識別碼的規則。
TABLERESULTS
指定可載入資料表的表格式格式結果。 請利用這個選項來建立結果資料表,這些結果可插入資料表以進行比較。 未指定這個選項時,會將結果格式化以方便閱讀。
NO_INFOMSGS
隱藏所有參考訊息。
備註
請利用 DBCC OPENTRAN 來判斷開啟的交易是否在交易記錄內。 當您使用 BACKUP LOG 陳述式時,只能截斷記錄非使用中的部分;開啟的交易可以防止記錄徹底截斷。 要識別未完成的交易,請使用 取得 sp_who 會話 ID。
結果集
沒有開啟的交易時,DBCC OPENTRAN 會傳回下列結果集:
No active open transactions.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
權限
需要 系統管理員 固定伺服器角色或 db_owner 固定資料庫角色中的成員資格。
範例
A. 傳回最早的使用中交易
下列範例會取得目前資料庫的交易資訊。 結果可能各不相同。
CREATE TABLE T1(Col1 INT, Col2 CHAR(3));
GO
BEGIN TRAN
INSERT INTO T1 VALUES (101, 'abc');
GO
DBCC OPENTRAN;
ROLLBACK TRAN;
GO
DROP TABLE T1;
GO
結果集如下所示。
Transaction information for database 'master'.
Oldest active transaction:
SPID (server process ID) : 52
UID (user ID) : -1
Name : user_transaction
LSN : (518:1576:1)
Start time : Jun 1 2004 3:30:07:197PM
SID : 0x010500000000000515000000a065cf7e784b9b5fe77c87709e611500
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
注意
「UID (使用者識別碼)」結果沒有意義,而且將會在 SQL Server 的未來版本中移除。
B. 指定 WITH TABLERESULTS 選項
下列範例會將 DBCC OPENTRAN 命令的結果載入暫存資料表中。
-- Create the temporary table to accept the results.
CREATE TABLE #OpenTranStatus (
ActiveTransaction VARCHAR(25),
Details sql_variant
);
-- Execute the command, putting the results in the table.
INSERT INTO #OpenTranStatus
EXEC ('DBCC OPENTRAN WITH TABLERESULTS, NO_INFOMSGS');
-- Display the results.
SELECT * FROM #OpenTranStatus;
GO