Compartir a través de


DBCC OPENTRAN (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Ayuda a identificar las transacciones activas que pueden evitar el truncamiento del registro. DBCC OPENTRAN muestra información acerca de la transacción activa más antigua y las transacciones distribuidas y no distribuidas replicadas más antiguas, si las hubiera, dentro del registro de transacciones de la base de datos especificada. Solo se presentan resultados si hay una transacción activa que existe en el registro o si la base de datos contiene información de replicación. Si no hay transacciones activas en el registro, se muestra un mensaje informativo.

Nota

DBCC OPENTRAN no se admite para publicadores que no sean de SQL Server.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

database_name | database_id | 0

El nombre o el id. de la base de datos de la que se va a presentar la información de la transacción más antigua. Si no se especifica o se especifica 0, se utiliza la base de datos actual. Los nombres de las bases de datos deben cumplir las reglas de los identificadores.

TABLERESULTS

Especifica los resultados en un formato tabular que se puede cargar en una tabla. Utilice esta opción para crear una tabla de resultados que se pueda insertar en una tabla y hacer comparaciones. Cuando no se especifica esta opción, se da formato a los resultados de modo que sean legibles.

NO_INFOMSGS

Suprime todos los mensajes de información.

Observaciones

Use DBCC OPENTRAN para determinar si hay alguna transacción abierta dentro del registro de transacciones. Cuando usa la instrucción BACKUP LOG, solo puede truncar la parte inactiva del registro; una transacción abierta puede evitar que el registro se trunque completamente. Para identificar una transacción abierta, use sp_who para obtener el identificador del proceso del sistema.

Conjuntos de resultados

DBCC OPENTRAN devuelve el siguiente conjunto de resultados cuando no hay transacciones abiertas:

No active open transactions.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Permisos

Debe pertenecer al rol fijo de servidor sysadmin o al rol fijo de base de datos db_owner .

Ejemplos

A. Devolución de la transacción activa más antigua

En el ejemplo siguiente se obtiene información de transacción para la base de datos actual. Los resultados pueden variar.

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

El conjunto de resultados es el siguiente:

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.

Nota

El resultado "UID (user ID)" no tiene ningún sentido y se quitará en una versión futura de SQL Server.

B. Especificación de la opción WITH TABLERESULTS

El ejemplo siguiente carga los resultados del comando DBCC OPENTRAN en una tabla temporal.

-- 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