Im Anschluss an meinem last question:Gruppierung sys.dm_exec_connections von Datenbank (es ist nicht ganz wie sys.sysprocesses)
Ich habe einigen Code geschrieben, um eine SQL Server-Datenbank zu aktualisieren. Bevor ich die Datenbank aktualisieren, plane ich mit der folgenden Aussage Zugriff auf die Datenbank zu begrenzen:
ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Bevor Sie diesen Code ausgeführt wird, gebe ich dem Benutzer die Möglichkeit zu deaktivieren. Als ich den Benutzer aufforderte, dachte ich, es wäre schön, die Liste der aktiven Verbindungen zu zeigen (kontinuierlich in einem festgelegten Intervall abgefragt); Bereitstellung eines Tools zur Identifizierung von Anwendungen/Benutzern, die sie vom Server booten möchten, bevor sie fortfahren.
In SQL 2000 können Sie die Tabelle sys.sysprocesses
verwenden, um alle Verbindungen zu sehen, die für eine Datenbank gelten. Dies schließt Verbindungen ein, die keine aktive Anforderung haben (wie wenn Sie ein Query Analyzer-Fenster öffnen und eine Datenbank auswählen).
jedoch unter Verwendung von:
sys.dm_exec_connections
sys.dm_exec_sessions
; undsys.dm_exec_requests
Ich kann nicht herausfinden, einen Weg, um das gleiche Ergebnis zu erzielen. Es scheint, dass diese Ansichten Verbindungen nur über eine Anforderung an eine Datenbank binden. Gibt es eine Möglichkeit, das Verhalten von sys.sysprocesses
nachzuahmen? Ich würde es vorziehen, diese Tabelle nicht für SQL Server 2005/2008-Datenbanken zu verwenden.
Oh gut, sysprocesses ist es ... – Mitkins
Ich löschte einen Kommentar zu einem anderen Thread, weil jemand darauf hingewiesen, dass sys.sysprocesses obsolet werden sollte. Und dann habe ich herausgefunden, dass Sie bis SQL 2008 immer noch sys.sysprocesses verwenden müssen. In SQL Server 2012 finden Sie die Spalte database_id in der Tabelle sys.dm_exec_sessions. 'select database_id, db_name (database_id), des. * aus sys.dm_exec_sessions as des' – hot2use