Как проверить активные транзакции в SQL Server 2014?

Я использую SQL Server 2014 и хочу знать, как проверить мои активные транзакции?

Ответ 1

  1. Запрос с sys.sysprocesses

    SELECT * FROM sys.sysprocesses WHERE open_tran = 1
    
  2. DBCC OPENTRAN: помогает определить активные транзакции, которые могут препятствовать усечению журнала. DBCC OPENTRAN отображает информацию о самой старой активной транзакции и самых старых распределенных и нераспределенных реплицированных транзакциях, если таковые имеются, в журнале транзакций указанной базы данных. Результаты отображаются только в том случае, если в журнале существует активная транзакция или база данных содержит информацию о репликации. Информационное сообщение отображается, если в журнале нет активных транзакций.

  3. sys.dm_tran_active_transactions

Возвращает информацию о транзакциях для экземпляра SQL Server. Синтаксис

enter image description here

Хотите знать о транзакции?

Транзакция - это единица работы. Если транзакция успешно, все изменения данных, сделанные во время транзакции зафиксированы и становятся постоянной частью базы данных.

Найти больше в документах

Ответ 2

Перевод запроса 3., который Tharif комментирует.

select transaction_id, name, transaction_begin_time
 ,case transaction_type 
    when 1 then '1 = Read/write transaction'
    when 2 then '2 = Read-only transaction'
    when 3 then '3 = System transaction'
    when 4 then '4 = Distributed transaction'
end as transaction_type 
,case transaction_state 
    when 0 then '0 = The transaction has not been completely initialized yet'
    when 1 then '1 = The transaction has been initialized but has not started'
    when 2 then '2 = The transaction is active'
    when 3 then '3 = The transaction has ended. This is used for read-only transactions'
    when 4 then '4 = The commit process has been initiated on the distributed transaction'
    when 5 then '5 = The transaction is in a prepared state and waiting resolution'
    when 6 then '6 = The transaction has been committed'
    when 7 then '7 = The transaction is being rolled back'
    when 8 then '8 = The transaction has been rolled back'
end as transaction_state
,case dtc_state 
    when 1 then '1 = ACTIVE'
    when 2 then '2 = PREPARED'
    when 3 then '3 = COMMITTED'
    when 4 then '4 = ABORTED'
    when 5 then '5 = RECOVERED'
end as dtc_state 
,transaction_status, transaction_status2,dtc_status, dtc_isolation_level, filestream_transaction_id
from sys.dm_tran_active_transactions

Ответ 3

Если вы хотите узнать больше информации об активных сессиях, таких как  идентификатор сеанса, имя хоста, имя входа, идентификатор транзакции, имя транзакции, время начала транзакции, идентификатор базы данных, имя базы данных, которое вы можете использовать ниже sql запроса

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

и вы получите в результате что-то вроде enter image description here

Ответ 4

или используйте команду DBCC

DBCC OPENTRAN