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

38

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

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

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

user87094
источник
Не в журнале. Проверено в системе контроля версий TFS или SourceSafe? Результат отправляется в txt, чтобы его можно было воссоздать?
01
2
Для будущего дизайна вы можете рассмотреть возможность добавления триггеров и таблиц аудита / истории. Тогда можно будет использовать последнее обновление времени / пользователя.
Томас Стрингер

Ответы:

40

У аналогичного Гранта Фричи была проблема, когда он закрыл 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%';

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

Шон Мелтон
источник
1
Это хорошая статья! Благодарность! А после статьи Гранта может оказаться полезным восстановление резервных файлов запросов в SQL Server Management Studio .
Мариан
Этот ответ можно импортировать, если в нем указано, на каких версиях sqlserver он работает. Я получаю эту ошибку, когда пытаюсь ее запустить: неправильный синтаксис рядом с '.'. 2008.
Майкл Поттер
Может быть импортирован? @MichaelPotter Копирование и вставка между браузером и другими инструментами обычно изменяет кавычки и другой текст, я не могу контролировать эту часть.
Шон Мелтон,
Извините, пожалуйста, исправьте мой вопрос ... s / импортировано / улучшено /
Майкл Поттер
17

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)
Марк Стори-Смит
источник
13

Вы можете получить информацию из кэшированных планов запросов, проверить 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%'

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

SqlACID
источник
9

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

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

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

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

Стэнли Норман
источник
0

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

Матиас Эльфляйн
источник
0

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

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

bvh9000
источник
Это только для вещей, которые вы непосредственно выполняете в окнах запросов, и вы должны включить сохранение.
Крис Бордеман