Могу ли я увидеть, как исторические запросы выполняются в базе данных SQL Server?

dba.stackexchange https://dba.stackexchange.com/questions/4043

  •  16-10-2019
  •  | 
  •  

Вопрос

Кто-то удаленно выполнял запрос к нашей базе данных SQL Server, и его система вышла из строя.

У них нет резервной копии этого запроса, и они хотят увидеть, что было запущено на сервере.

Можно ли найти этот запрос где-нибудь в журнале или истории?

Это было полезно?

Решение

Подобный Грант Фриччи была проблемой, где он закрыл SSM и потерял запрос, над которым он работал ... В блогах здесь:Ой **********!

РЕДАКТИРОВАТЬ

Чтобы сделать это немного более подробно о ответе, указанный выше грант, связанный выше, предоставляет запрос просто перейти к кэшу на экземпляре, чтобы вывести только что только что выполнил запрос (или, по крайней мере, попытка):

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

Еще несколько вариантов, которые были отмечены в комментариях блога Гранта:

Другие советы

2005+, след по умолчанию на помощь.

Трассировка по умолчанию переворачивается на 20 МБ, но SQL сохраняет историю 5 следов. С доступом к серверу вы можете получить файлы *.trc из каталога MSSQL log. Если вы не можете получить доступ к серверу, следующее даст вам имя текущего файла трассировки по умолчанию:

SELECT * FROM ::fn_trace_getinfo(default) 

Если текущий файл, например, e: mssql.1 mssql log log_200.trc, предыдущие файлы должны быть log_199.trc, log_198.trc и т. Д. Получить содержимое трассировки с:

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

Ты мощь иметь возможность получить информацию из планов кэшированного запроса, проверьте BOL для получения информации о SYS.DM_EXEC_QUERY_STATS или запустите это из студии управления, подключенной к той же базе данных:

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

Отфильтровать вывод с помощью

WHERE text like '%something%'

Чтобы сузить результаты.

Если база данных находилась в режиме полного восстановления, может быть шанс восстановить некоторые данные и получить представление о том, что было сделано путем чтения журнала транзакций.

К сожалению, это не поддерживается по умолчанию, но есть способы сделать это.

Вы можете попробовать использовать сторонние инструменты, такие как ApexSQL Log или же SQL Log Rescue (бесплатно, но только SQL 2000).

Другой вариант - попробовать использовать функции без документов dbcc log или fn_dblog. Это более сложно, но это бесплатно.

Если для вашей базы данных настроена модель полного восстановления, вы можете изучить резервные копии журнала транзакций.Видеть fn_dump_dblog для получения дополнительной информации.

ApexSQL имеет функциональность «выполненных запросов», которая позволяет искать и фильтровать по дате.

Я не уверен, что это вытаскивает историю из кеша SSMS или фактически отслеживает ее само по себе. Вы можете попытаться установить его и надеяться на лучшее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top