Есть ли способ перечислить открытые транзакции в базе данных SQL Server 2000?

100

Кто-нибудь знает способ составить список открытых транзакций в базе данных SQL Server 2000?

Я знаю, что могу запросить представление sys.dm_tran_session_transactionsо версиях базы данных SQL 2005 (и более поздних), однако это недоступно в SQL 2000.

Джеймс Уайзман
источник

Ответы:

157

Для всех баз данных запросить sys.sysprocesses

SELECT * FROM sys.sysprocesses WHERE open_tran = 1

Для текущей базы данных используйте:

DBCC OPENTRAN
gbn
источник
34

Вы можете получить всю информацию об активной транзакции с помощью запроса ниже

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

и он даст аналогичный результат ниже введите описание изображения здесь

и вы закрываете эту транзакцию с помощью справки ниже запроса KILL , ссылаясь на идентификатор сеанса

KILL 77
Риной Ашокан
источник
Вау, это очень приятно, мне нравится количество предоставленных данных, единственный минус в том, что вам нужно быть администратором, чтобы запускать его, DBCC OPENTRAN требует меньше разрешений. Но все же ... очень хорошо
Йогурту 05
Очень полезно, спасибо! Если он ответил на вопрос OP (SQL 2000), это должен быть принятый ответ. Проголосуйте за ...
Engineer
Отлично, получил то, что хотел.
Vipul
23

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

Информационное сообщение отображается, если в журнале нет активных транзакций.

DBCC OPENTRAN

кодирование
источник
0

Используйте это, потому что всякий раз, когда транзакция открывает более одной транзакции, ниже будет работать SELECT * FROM sys.sysprocesses WHERE open_tran <> 0

канти
источник