• ベストアンサー

どのプログラムがどのDBを使用しているか、という情報を取得したい

sqlserver と vb.net(+バッチファイル) にてコーディングしています。 vbからバッチファイルを呼び出し、その中でDBのデタッチを行っているのですが、 「データベース '(DB名)' は現在使用中なので、デタッチできません。」 とのメッセージが出て、デタッチできません。 デタッチは、vbプログラムの中で SqlConnection を close・dispose した直後に行っています。 原因追究をしたいのですが、どのプログラムがどのDBを使用しているか 、という情報を取得することはできるでしょうか。 ご回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

#2です。 やはりExpressでしたか。SQLプロファイラはExpressにはついていませんが、フリーのがあるので、ご参考までに。 少し遅いけど十分使えます。 http://www.atmarkit.co.jp/fdotnet/dotnettips/744sqlexpressprofiler/sqlexpressprofiler.html それ以外の情報(動的管理ビューやは利用状況モニタ)は2005では使えます。

その他の回答 (2)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

バージョンとエディションを書かないとアドバイスが難しいですが。。 ・SQL Serverプロファイラを流しっぱなしにして、実行してみる ・デタッチ直前にsysprocessesやsys.dm_exec_sessionsの内容を拾う ・利用状況モニタで監視する まあどれかでやるのでしょうね。 「プログラム名」はSQL Server側は認識できません。 「どの端末からどのIDを使ったどの方法でのアクセスか」までです。

stolichnaya
質問者

補足

>バージョンとエディションを書かないとアドバイスが難しいですが。。 うっかりしていました、すいません! SqlServer2005ExpressEdition です。 ご回答の内容は、今の知識ではわからない部分が大きいので 色々とググってみます。 ありがとうございます。

  • YEND77
  • ベストアンサー率56% (21/37)
回答No.1

sp_who/sp_who2とかでもできるかと思うけど、、、 master..sysprocesses を使うほうがプログラミングしやすいかな。。。 master..sysprocesses を 自分のやりたい内容に合わせて select して 出てきた spid を dbcc inputbuffer(spid) なんてやれば 細かい内容が取得できると思います。

関連するQ&A