it-swarm.it

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

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?

40
user87094

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

[~ ~ #] modifica [~ ~ #]

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:

44
user507

2005+, traccia predefinita al 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)
18

È possibile potrebbe essere in grado di recuperare informazioni dai piani di query memorizzati nella cache, controllare BOL per informazioni su sys.dm_exec_query_stats o eseguirlo da Management Studio collegato allo stesso database:

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.

14
SqlACID

Se il database era in modalità di recupero completo, potrebbe esserci la possibilità di recuperare alcuni dati e ottenere informazioni 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.

9
Stanley Norman

ApexSQL ha una funzionalità 'Query eseguite' che ti permette 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.

0
bvh9000

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

0
Matthias Elflein