Поделиться через


DBCC OPENTRAN (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Помогает определить активные транзакции, которые могут препятствовать усечению журнала. DBCC OPENTRANотображает сведения о самой старой активной транзакции и старейших распределенных и нераспространенных реплика транзакций, если таковые есть, в журнале транзакций указанной базы данных. Результаты отображаются только при наличии активной транзакции, которая приведена в журнале, или в случае, если в базе данных имеются сведения о репликации. Если в журнале нет активных транзакций, отображается информационное сообщение.

Примечание.

DBCC OPENTRAN не поддерживается для издателей, отличных от SQL Server.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Примечание.

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

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.

Разрешения

Необходимо быть членом предопределенной роли сервера sysadmin или предопределенной роли базы данных db_owner .

Примеры

А. Возврат самой старой активной транзакции

В следующем примере сведения о транзакциях извлекаются для текущей базы данных. Полученные результаты могут отличаться от приведенных ниже.

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