Posso vedere le query storiche eseguite su un database di SQL Server?


38

Qualcuno stava eseguendo una query sul nostro database SQL Server in remoto e il suo sistema si è bloccato.

Non hanno il backup di quella query e vogliono vedere cosa è stato eseguito sul server.

È possibile trovare questa query in un registro o in una cronologia da qualche parte?


Non in un registro. Hai effettuato il check-in in un sistema di controllo della versione TFS o SourceSafe? Il risultato è impostato su un txt in modo che possa essere ricreato?
jl01

2
Per la progettazione futura potresti prendere in considerazione l'aggiunta di trigger e tabelle di audit / cronologia. Quindi sarebbe in grado di utilizzare l'ultimo orario / utente aggiornato.
Thomas Stringer,

Risposte:


40

Simile Fritchey ha avuto il problema di aver chiuso SSMS e di aver perso la domanda su cui stava lavorando ... ha scritto un blog qui: Oh **********!

MODIFICARE

Per rendere questo un po 'più dettagliato di una risposta, il link sopra indicato Grant fornisce una query per andare semplicemente nella cache sull'istanza per estrarre la query che hai appena eseguito (o almeno tentare di):

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%';

Alcune altre opzioni che sono state annotate nei commenti del blog di Grant:


1
Questo è un bell'articolo! Grazie! E in seguito all'articolo di Grant, potrebbe essere utile recuperare i file di query di backup in SQL Server Management Studio .
Marian,

Questa risposta potrebbe essere importata se affermasse su quali versioni di sqlserver funziona. Ottengo questo errore quando provo a eseguirlo: sintassi errata vicino a ".". il 2008.
Michael Potter,

Potrebbe essere importato? @MichaelPotter Copia e incolla tra il browser e altri strumenti cambierà comunemente virgolette e altro testo, non ho alcun controllo su quella parte.
Shawn Melton,

Scusa, per favore correggi la mia domanda ... s / importata / migliorata /
Michael Potter

17

2005+, traccia predefinita per il salvataggio.

La traccia predefinita passa a 20 MB, ma SQL conserva la cronologia di 5 tracce. Con l'accesso al server è possibile recuperare i file * .trc dalla directory MSSQL \ Log. Se non riesci ad accedere al server, quanto segue ti darà il nome del file di traccia predefinito corrente:

SELECT * FROM ::fn_trace_getinfo(default) 

Se il file corrente è ad esempio E: \ MSSQL.1 \ MSSQL \ LOG \ log_200.trc, i file precedenti dovrebbero essere log_199.trc, log_198.trc ecc. Ottieni il contenuto della traccia con:

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

13

Si potrebbe essere in grado di recuperare le informazioni dai piani di query memorizzati nella cache, controllare BOL per informazioni su sys.dm_exec_query_stats, o eseguire questo da Management Studio collegato alla stessa base di dati:

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

Filtra l'output con

WHERE text like '%something%'

per restringere i risultati.


9

Se il database era in modalità di recupero completo, potrebbe esserci la possibilità di recuperare alcuni dati e ottenere informazioni dettagliate su ciò che è stato fatto leggendo il registro delle transazioni.

Sfortunatamente questo non è supportato di default ma ci sono modi per farlo.

Puoi provare a utilizzare strumenti di terze parti come ApexSQL Log o SQL Log Rescue (gratuito ma solo SQL 2000).

Un'altra opzione è provare a utilizzare le funzioni non documentate DBCC LOG o fn_dblog. Questo è più complesso ma è gratuito.


0

Se il database è impostato sul modello di recupero completo, è possibile esaminare i backup del registro delle transazioni. Vedi fn_dump_dblogper maggiori informazioni.


0

ApexSQL ha una funzionalità "Query eseguite" che consente di cercare e filtrare per data.

Non sono sicuro se estrae la cronologia dalla cache SSMS o se ne tiene traccia da sola. Potresti provare a installarlo e sperare per il meglio.


Questo è solo per le cose che esegui direttamente nelle finestre delle query e devi attivare il salvataggio.
Chris Bordeman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.