1

私のアプリケーション (SQL Server 2000 で SQL Native Client を使用する C++) は、常にハング状態になります。これは、トランザクションがテーブルのどこかでコミットされずに残っており、開いているトランザクションの結果として、そのテーブルの SELECT クエリがブロックされているためだと思います。

残念ながら、ハングしているトランザクションがコード内のどこにあるかを判断するのに本当に苦労しています。コミットされていないトランザクションで実行されたクエリを SQL Server に表示させる方法はありますか?

4

1 に答える 1

4

管理者 (sa) 権限がある場合は、sp_Who または sp_Who2 を実行して、Spid ごとにすべてのサーバー アクティビティを表示できます。

Exec sp_Who2 [SpidNumber]  

興味のある 1 つのセッションだけを見るには...

開いているトランザクションを直接表示するには、次を実行します

DBCC OPENTRAN (T-SQL) 指定されたデータベース内の最も古いアクティブなトランザクションと、最も古い分散および非分散レプリケート トランザクションに関する情報を表示します。結果は、アクティブなトランザクションがある場合、またはデータベースに複製情報が含まれている場合にのみ表示されます。アクティブなトランザクションがない場合は、情報メッセージが表示されます。

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

ただし、Sql Server は、ユーザー セッションが終了したときに、開いているトランザクションを自動的にロールバックする必要があります。

于 2008-12-01T17:43:21.950 に答える