DBCC OPENTRAN (Transact-SQL)

如果在指定数据库内存在最早的活动事务和最早的分布式和非分布式复制事务,则显示与之有关的信息。仅当存在活动事务或数据库包含复制信息时,才显示结果。如果没有活动事务,就显示信息性消息。

注意注意

非 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 执行完毕。如果 DBCC 输出了错误消息,请与系统管理员联系。

注意注意

“UID (user 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