web-dev-qa-db-ja.com

sys.sysprocessesの代替品を見つけるのに助けが必要

SQL 2016データ移行アシスタント(アップグレードアドバイザー)は、古いシステムテーブル参照の使用を停止する必要があると言っています。つまり、sysdatabasesとsysprocessesの使用を停止する必要があります。

Sysprocessesからのデータに基づいてセッション情報をログに記録するコードがあります。そのログには、spid(session_id)のデータベースIDが含まれています。

私はオンラインで検索しており、可能な代替品は2つしか見つかりませんでした。以下で説明する理由により、どちらも完全には機能しません。

オプション1(sys.dm_tran_locks)-sys.dm_exec_sessionsにリンクすると、このオプションはかなり確実に機能するように見えますが、session_idのデータベースコンテキストがmasterまたはtempdbの場合は結果を返さないことに気付きました。つまり、masterまたはtempdbを使用しているsession_idのresource_database_idを確実にフェッチできなくなります。少なくとも2つのコンテキストから選択できるので、それだけを想定することもできません。

オプション2(sys.dm_exec_requests)-このオプションは、アクティブに実行されているsession_idでのみ機能します。アイドル/一時停止されたsession_idはリストに表示されません。

一時停止している、またはマスターデータベースコンテキストを使用しているsession_idのdbidを取得できない場合、ログにギャップがあります。

Sys.sysprocessesを使用せずにこの情報を確実にフェッチする他の方法はありますか?

4
Alf47

残念ながら、マイクロソフトは代替品がないことを認識しています。詳細については、これらのコネクト項目に賛成投票して監視できます。

sysprocessesの廃止-DMVはすべての列を完全には置き換えません-by Tony Rogerson SQL

master.dbo.sysprocessesに代わる実際の手段はありません-GV1973による

3
Brent Ozar

システムテーブルのシステムビューへのマッピング: https://msdn.Microsoft.com/en-us/library/ms187997.aspx

Sys.dm_exec_sessionsとsys.dm_exec_requestsの組み合わせには、必要なものがほとんど含まれている可能性があります。

クエリを投稿すると、SQL2016に準拠したバージョンを作成できるようになります。

0
Gareth Lyons