Можно ли увидеть, какие запросы были выполнены в незафиксированной транзакции? - PullRequest
1 голос
/ 01 декабря 2008

Мое приложение (C ++ с использованием собственного клиента SQL с SQL Server 2000) постоянно находится в состоянии зависания. Я полагаю, что это потому, что транзакция оставлена ​​незафиксированной где-то в таблице, а запрос SELECT для этой таблицы в результате открытой транзакции блокируется.

К сожалению, у меня действительно возникают проблемы с определением местоположения зависшей транзакции в моем коде. Есть ли способ заставить SQL Server указывать, какие запросы были выполнены для незафиксированной транзакции?

1 Ответ

4 голосов
/ 01 декабря 2008

если у вас есть admin (sa) proviliges, вы можете запустить sp_Who или sp_Who2 чтобы показать всю активность сервера, по Spid, Run

Exec sp_Who2 [SpidNumber]  

чтобы увидеть только один интересующий вас сеанс ...

Чтобы напрямую увидеть открытые транзакции, запустите

DBCC OPENTRAN (T-SQL) Отображает информацию о самой старой активной транзакции и о самых старых распределенных и нераспределенных реплицированных транзакциях, если таковые имеются, в указанной базе данных. Результаты отображаются только при наличии активной транзакции или если база данных содержит информацию о репликации. Информационное сообщение отображается, если нет активных транзакций.

Syntax
DBCC OPENTRAN 
    (    {'database_name' | database_id}
    )    [    WITH TABLERESULTS [, NO_INFOMSGS]
        ]

Сервер Sql должен, однако, автоматически откатывать любую открытую транзакцию, когда пользовательский сеанс завершается.

...