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

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

4 ответов


  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

интересно, о сделке ?

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

найти больше в docs


перевод 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

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

DBCC OPENTRAN

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

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