2009-04-19 3 views
0

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; und
  • sys.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.

Antwort

0

Er ... Ich empfahl diese für Ihre andere Frage.

Leider habe ich herausgefunden, dass Sie noch sysprocesses verwenden müssen

Es wird als Fehler in Microsoft Connect 144515 angemeldet ist festgelegt werden, I found it here

Ich persönlich noch sysprocesses verwenden, weil ich bin es ist bequem, aber faul und luddite, das kann ...

+0

Oh gut, sysprocesses ist es ... – Mitkins

+0

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

Verwandte Themen