2009-04-02 7 views
16

In SQL Server 2005 können Sie leicht feststellen, wann jemand das letzte Mal eine Datenbank abgefragt hat.Wie finden Sie den letzten Zugriff auf eine Datenbank?

+0

Dies ist sehr ähnliche Frage zu Ihrem Ergebnis einfach als ein einziger Wert zu erhalten: http: // Stackoverflow. com/questions/525558/how-can-a-tables-last-modified-return-in-sql-server-2005/525587 # 525587 – MicSim

Antwort

0

Nicht einfach, aber wenn Sie die Protokollierungsfunktion von SQL Server aktivieren, können Sie die Protokolle mithilfe von Software untersuchen, um festzustellen, wann die letzte Abfrage war und was sie war.

-Adam

1

Sie müssen Auditierung haben oder ein SQL-Server-Trace vor der Zeit einzurichten.

0

SQL Server kann Ereignisinformationen für Anmeldeversuche protokollieren, und Sie können anzeigen, indem Sie das Fehlerprotokoll überprüfen. Aktivieren Sie die Überwachungsebene von SQL Server.

folgendermaßen vor Auditierung aller/erfolgreichen mit Enterprise Manager in SQL Server zu aktivieren:

eine Servergruppe erweitern. Klicken Sie mit der rechten Maustaste auf einen Server, und klicken Sie dann auf Eigenschaften. Klicken Sie auf der Registerkarte Sicherheit unter Audit-Ebene auf alle/success usw. (erforderliche Option ).

Sie müssen die Server für diese Einstellung stoppen und neu starten

16
SELECT 
last_user_seek = MAX(last_user_seek), 
last_user_scan = MAX(last_user_scan), 
last_user_lookup = MAX(last_user_lookup), 
last_user_update = MAX(last_user_update) 
FROM 
sys.dm_db_index_usage_stats 
WHERE 
[database_id] = DB_ID() 

Eine Einschränkung nehmen mit dieser Methode ist, dass die Informationen in der DMV werden gelöscht und auf Null gesetzt, wenn Sie SQL Server neu starten.

4

Gefunden bei MySQLtips - arbeitete für mich.

select d.name, x1 = 
(select X1= max(bb.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) bb) 
FROM master.dbo.sysdatabases d 
left outer join 
sys.dm_db_index_usage_stats s 
on d.dbid= s.database_id 
group by d.name 
4

Um auf James Allens Antwort erweitern:

SELECT d.name, 
last_user_seek = MAX(last_user_seek), 
last_user_scan = MAX(last_user_scan), 
last_user_lookup = MAX(last_user_lookup), 
last_user_update = MAX(last_user_update) 
FROM sys.dm_db_index_usage_stats AS i 
JOIN sys.databases AS d ON i.database_id=d.database_id 
GROUP BY d.name 

Verwenden Sie diese modifizierte Version, wenn Sie pro Datenbankkontext keine wollen und wünschen den Datenbanknamen am Anfang der Ergebnismenge aufzunehmen.

+0

Sie können dies auch ohne den JOIN tun: SELECT DB_NAME (database_id), last_user_seek = MAX (letzter_benutzer_sek), last_user_scan = MAX (letzter_benutzer_scan), last_user_lookup = MAX (last_user_lookup), last_user_update = MAX (last_user_update) FROM sys.dm_db_index_usage_stats GROUP BY datenbank_id ORDER BY DB_NAME (database_id) –

0

ähnlich Methoden oben, aber für eine bestimmte Datenbank-ID (in diesem Beispiel ist es 6)

select max(LastAccess) 
from (
    SELECT last_user_seek as LastAccess FROM sys.dm_db_index_usage_stats WHERE last_user_seek is not null and [database_id]=6 
    union 
    SELECT last_user_lookup as LastAccess FROM sys.dm_db_index_usage_stats WHERE last_user_seek is not null and [database_id]=6 
    union 
    SELECT last_user_seek as LastAccess FROM sys.dm_db_index_usage_stats WHERE last_user_seek is not null and [database_id]=6 
    union 
    SELECT last_user_update as LastAccess FROM sys.dm_db_index_usage_stats WHERE last_user_seek is not null and [database_id]=6 
) UserAccess 
Verwandte Themen