Kann ich sehen, wie historische Abfragen in einer SQL Server -Datenbank ausgeführt werden?

dba.stackexchange https://dba.stackexchange.com/questions/4043

  •  16-10-2019
  •  | 
  •  

Frage

Jemand führte eine Abfrage in unserer SQL Server -Datenbank aus der Ferne aus und sein System stürzte ab.

Sie haben keine Sicherung dieser Abfrage und möchten sehen, was auf dem Server ausgeführt wurde.

Ist es möglich, diese Abfrage in einem Protokoll oder irgendwo in einer Geschichte zu finden?

War es hilfreich?

Lösung

Ähnliche Grant Fritchey hatte das Problem, in dem er SSMS geschlossen und die Frage verloren hatte, an der er gearbeitet hatte ... über hier gebloggt: hier:Oh **********!

BEARBEITEN

Um dies ein bisschen detaillierter für eine Antwort zu machen, enthält der oben verwandte Linked Grant eine Abfrage, um einfach zum Cache der Instanz zu gehen, um die gerade ausgeführte Abfrage herauszuziehen (oder mindestens Versuch):

SELECT  dest.text
FROM    sys.dm_exec_query_stats AS deqs
        CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE   deqs.last_execution_time > '5/19/2011 11:00'
        AND dest.text LIKE 'WITH%';

Ein paar weitere Optionen, die in den Kommentaren von Grants Blog festgestellt wurden:

Andere Tipps

2005+, Standardverfolgung zur Rettung.

Die Standardverfolgung rollt bei 20 MB um, aber SQL behält die Geschichte von 5 Spuren bei. Mit Zugriff auf den Server können Sie die *.trc -Dateien aus dem MSSQL Log -Verzeichnis abrufen. Wenn Sie nicht auf den Server zugreifen können, erhalten Sie im Folgenden den Namen der aktuellen Standard -Trace -Datei:

SELECT * FROM ::fn_trace_getinfo(default) 

Wenn die aktuelle Datei beispielsweise e: mssql.1 mssql log log_200.trc ist, sollten die vorherigen Dateien log_199.trc, log_198.trc usw. sein. Holen Sie sich den Inhalt der Ablaufverfolgung mit:

SELECT * FROM fn_trace_gettable('E:\MSSQL.1\MSSQL\LOG\log_199.trc', default)

Du könnte In der Lage sein, Informationen aus zwischengespeicherten Abfrageplänen abzurufen, BOL nach Informationen zu sys.dm_exec_query_stats überprüfen oder diese aus dem Management Studio ausführen, das mit derselben Datenbank verbunden ist:

SELECT  d.plan_handle ,
        d.sql_handle ,
        e.text

FROM    sys.dm_exec_query_stats d
        CROSS APPLY sys.dm_exec_sql_text(d.plan_handle) AS e

Filtern Sie den Ausgang mit

WHERE text like '%something%'

um die Ergebnisse einzugrenzen.

Wenn die Datenbank im vollständigen Wiederherstellungsmodus wäre, besteht möglicherweise die Möglichkeit, einige Daten wiederherzustellen und Einblicke in das zu erhalten, was durch das Lesen von Transaktionsprotokollen getan wurde.

Leider wird dies standardmäßig nicht unterstützt, aber es gibt Möglichkeiten, dies zu tun.

Sie können versuchen, Drittanbieter -Tools wie zu verwenden, z. ApexSQL -Protokoll oder SQL Log Rescue (Nur frei, aber nur SQL 2000).

Eine andere Option besteht darin, die DBCC -Protokoll- oder FN_Dblog -Funktionen undokumentierte Funktionen zu verwenden. Dies ist komplexer, aber frei.

Wenn Ihre Datenbank auf das vollständige Wiederherstellungsmodell eingestellt ist, können Sie Ihre Transaktionsprotokollsicherungen untersuchen. Sehen fn_dump_dblog für weitere Informationen.

ApexSQL Hat eine Funktionalität von "ausgeführte Abfragen", mit der Sie nach Datum suchen und filtern können.

Ich bin mir nicht sicher, ob es die Geschichte aus dem SSMS -Cache abzieht oder es tatsächlich selbst im Auge behält. Sie könnten versuchen, es zu installieren und auf das Beste zu hoffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top