Кто-то выполнял запрос к нашей базе данных SQL Server удаленно, и его система зависала.
У них нет резервной копии этого запроса и они хотят увидеть, что было запущено на сервере.
Можно ли найти этот запрос в журнале или в истории где-нибудь?
Кто-то выполнял запрос к нашей базе данных SQL Server удаленно, и его система зависала.
У них нет резервной копии этого запроса и они хотят увидеть, что было запущено на сервере.
Можно ли найти этот запрос в журнале или в истории где-нибудь?
Ответы:
У аналогичного Гранта Фричи была проблема, когда он закрыл SSMS и потерял запрос, над которым работал ... написал здесь: О, **********!
РЕДАКТИРОВАТЬ
Чтобы сделать это немного более подробным ответом, ссылка, на которую ссылается выше Grant, предоставляет запрос, чтобы просто перейти в кэш экземпляра, чтобы извлечь запрос, который вы только что выполнили (или, по крайней мере, попытались):
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 или фактически отслеживает ее сам. Вы можете попробовать установить его и надеяться на лучшее.