Подтвердить что ты не робот

Как проверить, что есть транзакция, которая еще не установлена ​​в SQL Server 2005?

Кто-нибудь знает команду для проверки наличия в SQL Server 2005 незафиксированной транзакции?

4b9b3361

Ответ 2

XACT_STATE() сообщает о состоянии транзакции сеанса, указывая, имеет ли сеанс активную транзакцию, и может ли транзакция быть совершена. Он возвращает три значения:

  • 1, сеанс имеет активную транзакцию. Сессия может выполнять любые действия, включая запись данных и совершение транзакции.
  • 0, транзакция не активна для сеанса.
  • -1, сеанс имеет активную транзакцию, но произошла ошибка, которая привела к тому, что транзакция была классифицирована как неудобная транзакция. Сессия не может выполнить транзакцию или откат назад к точке сохранения; он может запросить только полный откат транзакции. Сессия не может выполнять какие-либо операции записи, пока она не вернет транзакцию. Сессия может выполнять операции чтения только до тех пор, пока она не вернет транзакцию. После того, как транзакция будет отменена, сеанс может выполнять операции чтения и записи и может начать новую транзакцию.

@@TRANCOUNT Возвращает количество активных транзакций для текущего соединения.

  • 0, а не в транзакции
  • 1, в транзакции
  • n, вложенной транзакции

Ответ 3

бег

DBCC OPENTRAN

Ответ 4

SELECT
    trans.session_id AS [SESSION ID],
    ESes.host_name AS [HOST NAME],login_name AS [Login NAME],
    trans.transaction_id AS [TRANSACTION ID],
    tas.name AS [TRANSACTION NAME],tas.transaction_begin_time AS [TRANSACTION BEGIN TIME],
    tds.database_id AS [DATABASE ID],DBs.name AS [DATABASE NAME]
FROM sys.dm_tran_active_transactions tas
JOIN sys.dm_tran_session_transactions trans
ON (trans.transaction_id=tas.transaction_id)
LEFT OUTER JOIN sys.dm_tran_database_transactions tds
ON (tas.transaction_id = tds.transaction_id )
LEFT OUTER JOIN sys.databases AS DBs
ON tds.database_id = DBs.database_id
LEFT OUTER JOIN sys.dm_exec_sessions AS ESes
ON trans.session_id = ESes.session_id
WHERE ESes.session_id IS NOT NULL

- Имя базы данных будет получено только при выполнении команды SELECT @@TRANCOUNT. В противном случае NULL

выполнить приведенный выше код... Дает информацию о сеансе, в которой происходит транзакция.

Ответ 5

sp_who2 sp_lock

Ответ 6

Подводя итог, существует несколько методов:

  • SELECT @@trancount
  • DBCC OPENTRAN
  • SELECT XACT_STATE()
  • sp_lock
  • SELECT * FROM sys.dm_tran_active_transactions