post icon

Como saber cuando fue el último acceso a una Base de Datos SQL Server

Conocer cuando fue la ultima vez que se accedió a una base de datos en SQL Server no es una tarea fácil de resolver, ya que no hay un valor que sirva específicamente para eso, si es que no llevamos un sistema de auditoría a la par.

Otra manera es ver el registro del transaction log de la base de datos, aunque la misma es muy dificil de interpretar, a parte que son funciones de SQL Server no documentadas por Microsoft y para peor de todo están almacenadas en un formato propietario.

Para ver el log de transacciones pueden ejecutar 2 comandos

USE BASEDATOS;
DBCC LOG ('NOMBRE_DE_LA_BD', 3);

Y el otro modo es utilizando una función de SQL Server no documentada.

SELECT * FROM ::fn_dblog(NULL, NULL); 
-- esta muestra el log de la bd en que estemos posicionada

Verán que esto es bastante dificil de interpretar, investigando un poco he visto un script creado por Willy Taveras donde utiliza un artificio bastante interesante para obtener esta información. El script es como sigue:

SELECT name, ultimoAcceso =(
select X1= max(LA.xx)
from ( select xx =
max(last_user_seek)
where max(last_user_seek)is not null
union all
select xx = max(last_user_scan)
where max(last_user_scan)is not null
union all
select xx = max(last_user_lookup)
where max(last_user_lookup) is not null
union all
select xx =max(last_user_update)
where max(last_user_update) is not null) LA)
FROM master.dbo.sysdatabases sd
left outer join sys.dm_db_index_usage_stats s
on sd.dbid= s.database_id
group by sd.name;

Es muy probable que más de uno más adelante pregunte como pueden ver los que están conectados en ese preciso momento, así que ya lo agregaré al post, y son 2 funciones (una es una extensión de la otra)

EXECUTE SP_WHO;
EXECUTE SP_WHO2;

Comentarios desde Facebook:

Responder