¿Puedo ver histórico ejecutar consultas en una base de datos SQL Server?
-
16-10-2019 - |
Pregunta
Alguien corría una consulta en la base de datos de SQL Server de forma remota y su sistema se bloqueó.
No tienen ninguna copia de seguridad de esa consulta y quieren ver lo que se ejecuta en el servidor.
¿Es posible encontrar esta consulta en un registro o en un algún lugar de la historia?
Solución
Al igual subvención Fritchey tuvo el problema por el que había cerrado SSMS y perdió la consulta que había estado trabajando en blogs sobre ... aquí: Oh **********!
Editar
Para hacer esto un poco más de detalle de una respuesta, al que se hace referencia vinculado anteriormente subvención proporciona una consulta simplemente ir a la memoria caché en la instancia de sacar la consulta que solo había ejecutado (o al menos intento):
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%';
A pocas opciones más que se observaron en los comentarios del blog de Subvención:
- puntos Jamie Thomson donde SSMS en realidad tiene una "recuperación" área bajo su perfil de Windows, similar a la recuperación Word o Excel.
- Otras notas individuales en los comentarios sobre el paquete de herramientas de SSMS , pero este complemento es gratuito sólo para SQL Server 2008. A partir de SQL Server 2012 sólo se paga, pero tiene muchas características le puede resultar útil.
Otros consejos
2005+, predeterminado traza al rescate.
Los rollos de rastreo por omisión en más de 20 MB, pero SQL conserva la historia de 5 rastros. Con el acceso al servidor se podía recuperar los archivos * .trc desde el directorio MSSQL \ Log. Si no puede acceder al servidor, la siguiente información le dará el nombre del archivo de rastreo por defecto 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 debe ser log_199.trc, log_198.trc etc., obtiene el contenido de la traza con:
SELECT * FROM fn_trace_gettable('E:\MSSQL.1\MSSQL\LOG\log_199.trc', default)
podría ser capaz de recuperar la información de los planes de consulta en caché, compruebe BOL para obtener información sobre sys.dm_exec_query_stats, o ejecutar este estudio de gestió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 acotar los resultados.
Si la base de datos estaba en modo de recuperación completa es posible que haya una oportunidad para recuperar algunos datos y obtener ideas sobre lo que se hizo mediante la lectura de registro de transacciones.
Por desgracia, este no es compatible de forma predeterminada, pero hay maneras de hacer esto.
Puedes probar a utilizar herramientas de terceros, como ApexSQL Log o SQL Entrar rescate (libre, pero SQL 2000 solamente).
Otra opción es tratar de usar funciones no documentadas DBCC LOG o fn_dblog. Esto es más complejo, pero es gratis.
Si su base de datos se establece en modelo de recuperación completa se puede investigar las copias de seguridad de registro de transacciones.
Ver fn_dump_dblog
para más información.
ApexSQL tiene una funcionalidad 'consultas ejecutadas' que le permite buscar y filtrar por fecha.
No estoy seguro de si se tira de la historia de la caché SSMS o en realidad no pierde de vista que por sí mismo. Se podría tratar de instalarlo y esperar lo mejor.