Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 посмотреть транзакции/команды в стадии отката  [new]
Alexander Us
Member

Откуда:
Сообщений: 1153
Подскажите плз,

как посмотреть какие транзакции/команды находятся в стадии отката?
1 июн 16, 17:32    [19246885]     Ответить | Цитировать Сообщить модератору
 Re: посмотреть транзакции/команды в стадии отката  [new]
msLex
Member

Откуда:
Сообщений: 8702
select 
	st.session_id
	, st.transaction_id
from sys.dm_tran_active_transactions at
inner join sys.dm_tran_session_transactions st on at.transaction_id = st.transaction_id
where 
	transaction_state = 7


к session_id (он же spid) прикручивайте что хотите
1 июн 16, 17:44    [19246943]     Ответить | Цитировать Сообщить модератору
 Re: посмотреть транзакции/команды в стадии отката  [new]
Alexander Us
Member

Откуда:
Сообщений: 1153
msLex,

спасибо,

к сожалению выборка из sys.dm_tran_session_transactions зависает до тех пор, пока не откатится пользовательская транзакця.
1 июн 16, 18:09    [19247078]     Ответить | Цитировать Сообщить модератору
 Re: посмотреть транзакции/команды в стадии отката  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Alexander Us, странно... а with(nolock)
+
SELECT DTST.[session_id],
DES.[login_name] AS [Login Name],
DB_NAME (DTDT.database_id) AS [Database],
DTDT.[database_transaction_begin_time] AS [Begin Time],
-- DATEDIFF(ms,DTDT.[database_transaction_begin_time], GETDATE()) AS [Durationms],
CASE DTAT.transaction_type
WHEN 1 THEN 'Read/write'
WHEN 2 THEN 'Read-only'
WHEN 3 THEN 'System'
WHEN 4 THEN 'Distributed'
END AS [Transaction Type],
CASE DTAT.transaction_state
WHEN 0 THEN 'Not fully initialized'
WHEN 1 THEN 'Initialized, not started'
WHEN 2 THEN 'Active'
WHEN 3 THEN 'Ended'
WHEN 4 THEN 'Commit initiated'
WHEN 5 THEN 'Prepared, awaiting resolution'
WHEN 6 THEN 'Committed'
WHEN 7 THEN 'Rolling back'
WHEN 8 THEN 'Rolled back'
END AS [Transaction State],
DTDT.[database_transaction_log_record_count] AS [Log Records],
DTDT.[database_transaction_log_bytes_used] AS [Log Bytes Used],
DTDT.[database_transaction_log_bytes_reserved] AS [Log Bytes RSVPd],
DEST.[text] AS [Last Transaction Text],
DEQP.[query_plan] AS [Last Query Plan]
FROM sys.dm_tran_database_transactions DTDT
INNER JOIN sys.dm_tran_session_transactions DTST
ON DTST.[transaction_id] = DTDT.[transaction_id]
INNER JOIN sys.[dm_tran_active_transactions] DTAT
ON DTST.[transaction_id] = DTAT.[transaction_id]
INNER JOIN sys.[dm_exec_sessions] DES
ON DES.[session_id] = DTST.[session_id]
INNER JOIN sys.dm_exec_connections DEC
ON DEC.[session_id] = DTST.[session_id]
LEFT JOIN sys.dm_exec_requests DER
ON DER.[session_id] = DTST.[session_id]
CROSS APPLY sys.dm_exec_sql_text (DEC.[most_recent_sql_handle]) AS DEST
OUTER APPLY sys.dm_exec_query_plan (DER.[plan_handle]) AS DEQP
1 июн 16, 18:22    [19247126]     Ответить | Цитировать Сообщить модератору
 Re: посмотреть транзакции/команды в стадии отката  [new]
Mr. X
Guest
Alexander Us,

а старый конь sp_who (field cmd) ?
1 июн 16, 18:43    [19247199]     Ответить | Цитировать Сообщить модератору
 Re: посмотреть транзакции/команды в стадии отката  [new]
Alexander Us
Member

Откуда:
Сообщений: 1153
buser, увы.

Ни так:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
select * from  sys.dm_tran_session_transactions

Ни так:
select * from  sys.dm_tran_session_transactions with(nolock)

Только:
 DBCC OPENTRAN() 
работает, но с него мало информации.

Клиент делает большие вставки из .NET через SqlBulkCopy с использованием транзакций.
Иногда они откатываются и надо их отловить.

select @@version
Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 
	Feb 20 2014 20:04:26 
	Copyright (c) Microsoft Corporation
	Developer Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: )


Модель восстановления базы: полная, уровень совместимости, 100 (sql 2008)
1 июн 16, 18:50    [19247225]     Ответить | Цитировать Сообщить модератору
 Re: посмотреть транзакции/команды в стадии отката  [new]
Alexander Us
Member

Откуда:
Сообщений: 1153
Alexander Us,

всем спасибо за замечательные примеры и советы.

Оказалось, что зависание выборки из sys.dm_tran_session_transactions происходит
если для прерывания транзакции используется кнопка стоп в Visual Studio (при отладке VB.NET проекта).
2 июн 16, 10:33    [19248718]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить