- ベストアンサー
どのプログラムがどのDBを使用しているか、という情報を取得したい
sqlserver と vb.net(+バッチファイル) にてコーディングしています。 vbからバッチファイルを呼び出し、その中でDBのデタッチを行っているのですが、 「データベース '(DB名)' は現在使用中なので、デタッチできません。」 とのメッセージが出て、デタッチできません。 デタッチは、vbプログラムの中で SqlConnection を close・dispose した直後に行っています。 原因追究をしたいのですが、どのプログラムがどのDBを使用しているか 、という情報を取得することはできるでしょうか。 ご回答よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 やはりExpressでしたか。SQLプロファイラはExpressにはついていませんが、フリーのがあるので、ご参考までに。 少し遅いけど十分使えます。 http://www.atmarkit.co.jp/fdotnet/dotnettips/744sqlexpressprofiler/sqlexpressprofiler.html それ以外の情報(動的管理ビューやは利用状況モニタ)は2005では使えます。
その他の回答 (2)
- jamshid6
- ベストアンサー率88% (591/669)
バージョンとエディションを書かないとアドバイスが難しいですが。。 ・SQL Serverプロファイラを流しっぱなしにして、実行してみる ・デタッチ直前にsysprocessesやsys.dm_exec_sessionsの内容を拾う ・利用状況モニタで監視する まあどれかでやるのでしょうね。 「プログラム名」はSQL Server側は認識できません。 「どの端末からどのIDを使ったどの方法でのアクセスか」までです。
- YEND77
- ベストアンサー率56% (21/37)
sp_who/sp_who2とかでもできるかと思うけど、、、 master..sysprocesses を使うほうがプログラミングしやすいかな。。。 master..sysprocesses を 自分のやりたい内容に合わせて select して 出てきた spid を dbcc inputbuffer(spid) なんてやれば 細かい内容が取得できると思います。
補足
>バージョンとエディションを書かないとアドバイスが難しいですが。。 うっかりしていました、すいません! SqlServer2005ExpressEdition です。 ご回答の内容は、今の知識ではわからない部分が大きいので 色々とググってみます。 ありがとうございます。