Domanda

Qualcuno era in esecuzione di una query sul nostro database di SQL Server remoto e il sistema si è bloccato.

Non hanno alcun backup di tale query e vogliono vedere ciò che è stato eseguito sul server.

E 'possibile trovare questa query in un registro o in un qualche storia?

È stato utile?

Soluzione

Simile Concessione Fritchey ha avuto il problema in cui aveva chiuso SSMS e ha perso la query stava lavorando su ... bloggato su qui: Oh **********!

Modifica

Per fare questo un po 'più in dettaglio di una risposta, la si fa riferimento linkato sopra concessione prevede una query semplicemente andare alla cache nell'istanza per tirare fuori la query si era 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 opzioni più notati nei commenti del blog di Grant:

Altri suggerimenti

2005 +, predefinita traccia per il salvataggio.

I rotoli di traccia di default oltre a 20 MB, ma SQL conserva la storia di 5 tracce. Con l'accesso al server è possibile recuperare i file * .TRC dalla directory MSSQL \ Log. Se non è possibile accedere al server, la seguente vi darà il nome del file di traccia predefinito corrente:

SELECT * FROM ::fn_trace_getinfo(default) 

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

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

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

Filtrare l'output con

WHERE text like '%something%'

per perfezionare i risultati.

Se database, era in modalità di recupero completo, allora ci potrebbe essere la possibilità di recuperare alcuni dati e ottenere intuizioni su ciò che è stato fatto con la lettura del registro delle transazioni.

Purtroppo questo non è supportata di default, ma ci sono modi per farlo.

Si può provare a utilizzare strumenti di terze parti come ad esempio ApexSQL Log o SQL Log Rescue (gratuito ma SQL 2000).

Un'altra opzione è quella di provare a utilizzare le funzioni non documentate DBCC log o fn_dblog. Questo è più complessa, ma il suo libero.

Se il database è impostato su modello di recupero completo è possibile indagare i backup del log delle transazioni. Vedere fn_dump_dblog per maggiori informazioni.

ApexSQL ha una funzionalità 'query eseguite', che ti permette di cercare e filtrare per data.

Io non sono sicuro se tira la storia dalla cache SSMS o addirittura registra da sé. Si potrebbe provare ad installarlo e sperare per il meglio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top