DBCC OPENTRAN (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

帮助识别可能阻止日志截断的活动事务。 如果在指定数据库的事务日志中存在最早的活动事务以及最早的分布式和非分布式复制事务,DBCC OPENTRAN 将显示与之相关的信息。 仅当日志中存在活动事务或数据库包含复制信息时,才显示结果。 如果日志中没有活动事务,则显示信息性消息。

注意

非 SQL Server 发布服务器不支持 DBCC OPENTRAN

Transact-SQL 语法约定

语法

DBCC OPENTRAN
[
    ( [ database_name | database_id | 0 ] )
    { [ WITH TABLERESULTS ]
      [ , [ NO_INFOMSGS ] ]
    }
]

参数

database_name | database_id | 0

显示其中的最早事务信息的数据库名称或 ID。 如果未指定,或者指定为 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.

权限

要求具有 sysadmin 固定服务器角色或 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(用户 ID)”结果无意义,将在 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