Есть ли способ перечислить открытые транзакции в базе данных 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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.