DBCC OPENTRAN (Transact-SQL)
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體
有助於識別可能阻礙記錄截斷的使用中交易。 DBCC OPENTRAN
顯示在指定資料庫的交易記錄內,最早的使用中交易以及最早的分散式和非分散式複寫交易 (如果有的話) 的相關資訊。 只有在記錄內有使用中的交易或資料庫包含複寫資訊時,才會顯示結果。 如果記錄內沒有使用中的交易,就會顯示參考用訊息。
注意
不支援非 SQL Server 發行者使用 DBCC OPENTRAN
。
Syntax
DBCC OPENTRAN
[
( [ database_name | database_id | 0 ] )
{ [ WITH TABLERESULTS ]
[ , [ NO_INFOMSGS ] ]
}
]
注意
若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件。
引數
database_name | database_id | 0
要顯示最早交易資訊之資料庫的名稱或識別碼。 若未指定,或指定 0,就會使用目前的資料庫。 資料庫名稱必須符合識別碼的規則。
TABLERESULTS
指定可載入資料表的表格式格式結果。 請利用這個選項來建立結果資料表,這些結果可插入資料表以進行比較。 未指定這個選項時,會將結果格式化以方便閱讀。
NO_INFOMSGS
隱藏所有參考訊息。
備註
請利用 DBCC OPENTRAN
來判斷開啟的交易是否在交易記錄內。 當您使用 BACKUP LOG
陳述式時,只能截斷記錄非使用中的部分;開啟的交易可以防止記錄徹底截斷。 若要識別開啟的交易,請利用 sp_who
來取得系統處理序識別碼。
結果集
沒有開啟的交易時,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