Ich entwerfe eine Anwendung und suche nach dem besten Weg zu sagen, wer gerade im SQL-Server angemeldet ist. Ich verwende den in SSMS integrierten Aktivitätsmonitor, der eine Liste aller Prozesse anzeigt, die auf den Server zugreifen - sehr cool.
Wenn ich jedoch in meinem .NET-Code bei jedem Zugriff auf die Datenbank eine separate Verbindung verwende, wie kann ich dann feststellen, wer gerade angemeldet ist? Wenn ein Benutzer gerade einen Bildschirm anschaut und in diesem Moment keine Daten von der Datenbank abruft, würden sie nicht korrekt angezeigt?
Vielleicht, vielleicht nicht. Sie haben Recht, wenn Sie in Ihrer Anwendung angemeldet sind, muss kein Benutzer in der Datenbank angemeldet sein - dieses Konzept existiert tatsächlich nicht. Aktivität Monitor (und sinnvollerweise sp_who2) zeigt nur aktive Verbindungen an - diese Verbindungen werden aktiv verwendet.
Dieses Bild ändert sich, wenn Sie gepoolte Verbindungen verwenden ("Pooled = true", glaube ich, in Ihrer Verbindungszeichenfolge). Tun Sie das, und eine "geschlossene" Client-Verbindung bleibt aktiv, und Sie werden diese Verbindung im Monitor sehen. Dieser Artikel enthält weitere Details dazu.
Wenn ich Sie wäre, würde ich eine andere Methode zur Verfolgung aktiver Benutzer erstellen, die nicht auf gepoolten Verbindungen beruht.
Im MSSQL-Server können Sie den folgenden Befehl ausführen ...
%Vor%Dies wird Ihnen viele Informationen geben, einschließlich, wer angemeldet ist, den Anwendungsnamen, den aktuellen Befehl usw., usw.
Danke
Die DMV sys.dm_exec_sessions kann verwendet werden, um verbundene Sitzungen zu finden. Sie können es zu sys.dm_exec_requests hinzufügen, um Anforderungsinformationen abzurufen, wenn es aktiv ausgeführt wird, oder um verbindungsspezifische Informationen abzurufen, die Sie zu sys.dm_exec_connections hinzufügen können. Die Session-ID wird für alle Joins verwendet.
Ich würde persönlich DMVs über die älteren sp_who gespeicherten Prozeduren verwenden. Andere haben darauf hingewiesen, dass die Verbindung nicht geschlossen wird, wenn die Verbindung geschlossen wird. Wenn Sie also zwischen den Verbindungen nachverfolgen möchten, müssen Sie eine andere Methode zum Zwischenspeichern der Verbindungsinformationen in Erwägung ziehen.
Sie haben Recht. Bei korrekter Codierung wird die Verbindung beim Speichern oder Abrufen von Daten erstellt und unmittelbar danach geschlossen.
Wenn Sie sich mehr dafür interessieren, wer in der Anwendung angemeldet ist, als wer am Datenbankserver angemeldet ist, können Sie Sitzungsinformationen in der Datenbank beibehalten, einschließlich Benutzer-IDs. Dann könnten Sie einfach die Sitzungsdatenbank abfragen, um herauszufinden, wer online ist. Abhängig von den von Ihnen verwendeten Entwicklungstechnologien kann es bessere Lösungen geben.
Tags und Links .net sql-server