Чи можу я бачити, як історичні запити працюють на базі даних SQL Server?


38

Хтось виконував запит у нашій базі даних SQL Server віддалено, і їх система вийшла з ладу.

У них немає резервної копії цього запиту і хочуть побачити, що було запущено на сервері.

Чи можна знайти цей запит десь у журналі чи історії?


Не в журналі. Перевірено в системі управління версіями TFS або SourceSafe? Результат відкладений до txt, щоб його можна було відтворити?
jl01

2
Для майбутнього дизайну ви можете розглянути можливість додавання тригерів та таблиць аудиту / історії. Тоді зможе використовувати останній оновлений час / користувача.
Томас Стрінгер

Відповіді:


40

Подібний Грант Фрітчі мав випуск, коли він закрив SSMS і втратив запит, над яким працював ... про що тут розміщував: Oh **********!

EDIT

Щоб зробити це трохи детальніше відповіді, посилання, пов’язане вище 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 може бути корисною.
Маріан

Цю відповідь можна імпортувати, якби в ній було вказано, на яких версіях sqlserver він працює. Я отримую цю помилку, коли я намагаюся її запустити: Неправильний синтаксис біля '.'. на 2008.
Майкл Поттер

Можна імпортувати? @MichaelPotter Копіювання та вставка між браузером та іншими інструментами зазвичай змінюватимуть цитати та інший текст, я не маю контролю над цією частиною.
Шон Мелтон

Вибачте, виправте моє запитання ... s / імпорт / покращений /
Майкл Поттер

16

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

звузити результати.


9

Якщо база даних перебуває в повному режимі відновлення, можливо, є можливість відновити деякі дані та отримати розуміння того, що було зроблено, читаючи журнал транзакцій.

На жаль, це не підтримується за замовчуванням, але є способи зробити це.

Можна спробувати скористатися сторонніми інструментами, такими як ApexSQL Log або SQL Log Rescue (безкоштовно, але лише SQL 2000).

Інший варіант - спробувати використовувати незадокументовані функції DBCC LOG або fn_dblog. Це складніше, але безкоштовно.


0

Якщо ваша база даних встановлена ​​на повну модель відновлення, ви можете дослідити резервні копії журналу транзакцій. Див. Для fn_dump_dblogотримання додаткової інформації.


0

ApexSQL має функцію "Виконані запити", яка дозволяє шукати та фільтрувати за датою.

Я не впевнений, чи він витягує історію з кешу SSMS чи насправді відстежує її самостійно. Ви можете спробувати встановити його і сподіватися на найкраще.


Це лише для речей, які ви безпосередньо виконуєте у вікнах запитів, і ви повинні ввімкнути збереження.
Кріс Бордеман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.