¿Puedo ver las consultas históricas que se ejecutan en una base de datos de SQL Server?

38

Alguien estaba ejecutando una consulta en nuestra base de datos de SQL Server de forma remota y su sistema se bloqueó.

No tienen copia de seguridad de esa consulta y desean ver qué se ejecutó en el servidor.

¿Es posible encontrar esta consulta en un registro o en un historial en alguna parte?

usuario87094
fuente
No en un registro. ¿Ha ingresado en un sistema de control de versiones TFS o SourceSafe? ¿El resultado se establece en un txt para que pueda recrearse?
jl01
2
Para el diseño futuro, es posible que desee considerar agregar desencadenantes y tablas de auditoría / historial. Entonces sería capaz de utilizar la última hora / usuario actualizado.
Thomas Stringer

Respuestas:

40

Similarmente, Grant Fritchey tuvo el problema de haber cerrado SSMS y haber perdido la consulta en la que había estado trabajando ... escribió en un blog aquí: ¡Oh **********!

EDITAR

Para que esto sea un poco más detallado de una respuesta, el enlace mencionado anteriormente Grant proporciona una consulta para simplemente ir al caché en la instancia para extraer la consulta que acaba de ejecutar (o al menos intentar):

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

Algunas opciones más que se observaron en los comentarios del blog de Grant:

Shawn Melton
fuente
1
Ese es un buen artículo! ¡Gracias! Y siguiendo el artículo de Grant, puede ser útil recuperar archivos de consulta respaldados en SQL Server Management Studio .
Marian
Esta respuesta podría importarse si estableciera en qué versiones de sqlserver funciona. Recibo este error cuando intento ejecutarlo: sintaxis incorrecta cerca de '.'. en 2008.
Michael Potter
Podría ser importado? @MichaelPotter Copiar y pegar entre el navegador y otras herramientas comúnmente cambiará las comillas y otro texto, no tengo control sobre esa parte.
Shawn Melton
Lo sentimos, corrija mi pregunta ... s / importado / mejorado /
Michael Potter
17

2005+, seguimiento predeterminado al rescate.

La traza predeterminada se reinicia a 20 mb, pero SQL conserva el historial de 5 trazas. Con acceso al servidor, puede recuperar los archivos * .trc del directorio MSSQL \ Log. Si no puede acceder al servidor, lo siguiente le dará el nombre del archivo de rastreo predeterminado actual:

SELECT * FROM ::fn_trace_getinfo(default) 

Si el archivo actual es, por ejemplo, E: \ MSSQL.1 \ MSSQL \ LOG \ log_200.trc, los archivos anteriores deben ser log_199.trc, log_198.trc, etc. Obtenga el contenido de la traza con:

SELECT * FROM fn_trace_gettable('E:\MSSQL.1\MSSQL\LOG\log_199.trc', default)
Mark Storey-Smith
fuente
13

Es posible que pueda recuperar información de los planes de consulta en caché, verifique BOL para obtener información sobre sys.dm_exec_query_stats, o ejecutar esto desde el estudio de administración conectado a la misma base de datos:

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

Filtrar la salida con

WHERE text like '%something%'

para reducir los resultados.

SqlACID
fuente
9

Si la base de datos estaba en modo de recuperación completa, entonces podría existir la posibilidad de recuperar algunos datos y obtener información sobre lo que se hizo leyendo el registro de transacciones.

Lamentablemente, esto no es compatible de forma predeterminada, pero hay formas de hacerlo.

Puede intentar usar herramientas de terceros como ApexSQL Log o SQL Log Rescue (gratis pero solo SQL 2000).

Otra opción es intentar usar las funciones no documentadas DBCC LOG o fn_dblog. Esto es más complejo pero es gratis.

Stanley Norman
fuente
0

Si su base de datos está configurada con el modelo de recuperación completa, puede investigar sus copias de seguridad del registro de transacciones. Ver fn_dump_dblogpara más información.

Matthias Elflein
fuente
0

ApexSQL tiene una funcionalidad de ' ejecutadas' que le permite buscar y filtrar por fecha.

No estoy seguro de si extrae el historial del caché SSMS o si realmente lo rastrea por sí mismo. Podrías intentar instalarlo y esperar lo mejor.

bvh9000
fuente
Eso es solo para las cosas que ejecuta directamente en las ventanas de consulta, y debe activar el guardado.
Chris Bordeman