2009-06-01 59 views
7

Estoy diseñando una aplicación y estoy buscando la mejor manera de saber quién está actualmente conectado al servidor SQL. Utilizaré el Monitor de actividad integrado en SSMS, que muestra una lista de todos los procesos que acceden al servidor, muy bueno.Cómo saber quién está conectado a SQL Server

Sin embargo, si en mi código .NET utiliza una conexión separada cada vez que accedo a la base de datos, ¿cómo podré saber quién está conectado actualmente? Si un usuario solo mira una pantalla y no recupera datos de la base de datos en ese momento, entonces ¿no aparecerían correctamente?

+0

¿Cuál es el motivo por el que quieres hacer esto? ¿Quién mirará esta información? –

+0

El administrador de la base de datos lo verá para saber qué usuarios aún están conectados y poder eliminar todos los procesos para ese usuario, muy similar al monitor de actividad en SSMS. –

+0

En .NET incluso después de cerrar mi conexión de base de datos, aún aparece en el monitor de actividad como inactiva. ¿Eso es normal? –

Respuesta

10

Tal vez, tal vez no. Tiene razón en que al iniciar sesión en su aplicación no es necesario que el usuario inicie sesión en la base de datos; de hecho, ese concepto no existe realmente. Activity Montitor (y, de manera útil, sp_who2) mostrará solo las conexiones activas, aquellas que se usan activamente.

Esa imagen cambia si utiliza conexiones agrupadas ("agrupadas = verdaderas", creo, en su cadena de conexión). Haga eso, y una conexión de cliente "cerrada" permanecerá activa, y verá esa conexión en el monitor. This article tiene más detalles sobre eso.

Si yo fuera usted, diseñaría una forma diferente de rastrear usuarios activos, uno que no dependa de conexiones agrupadas.

2

Su afirmación es correcta, los usuarios que no realizan acciones de base de datos no serían visibles. Realmente necesitará almacenar algún tipo de información de "Usuarios iniciados" manualmente.

2

Estás en la correcta. Si está codificado correctamente, la conexión se creará cuando se guarden o recuperen datos, y se cerrará inmediatamente después.

Suponiendo que está más interesado en quién está conectado a la aplicación que en el servidor de la base de datos, puede conservar la información de sesión en la base de datos, incluidos los identificadores de usuario. Luego, simplemente puede consultar la base de datos de la sesión para descubrir quién está en línea. Puede haber mejores soluciones dependiendo de las tecnologías de desarrollo que esté utilizando.

2

creo que estás buscando sp_who o sp_who2

14

En el servidor MSSQL puede ejecutar el siguiente comando ...

exec sp_who2 

esto le dará una gran cantidad de información, incluyendo quién está conectado , nombre de la aplicación, comando actual, etc., etc.

Gracias

6

Los sys.dm_exec_sessions DMV se pueden utilizar para encontrar sesiones conectadas. Puede unirlo a sys.dm_exec_requests para obtener información de solicitud si se está ejecutando activamente, o para obtener información específica de la conexión a la que puede unirse sys.dm_exec_connections. Session_id se usa para todas las combinaciones.

Yo personalmente usaría el DMV sobre los procedimientos sp_who almacenados más antiguos. Como han señalado otros, si la conexión se cierra, no la verá, por lo que si desea rastrear entre las conexiones, debería considerar otro método para almacenar en caché la información de conexión.

Cuestiones relacionadas