Хтось виконував запит у нашій базі даних SQL Server віддалено, і їх система вийшла з ладу.
У них немає резервної копії цього запиту і хочуть побачити, що було запущено на сервері.
Чи можна знайти цей запит десь у журналі чи історії?
Хтось виконував запит у нашій базі даних SQL Server віддалено, і їх система вийшла з ладу.
У них немає резервної копії цього запиту і хочуть побачити, що було запущено на сервері.
Чи можна знайти цей запит десь у журналі чи історії?
Відповіді:
Подібний Грант Фрітчі мав випуск, коли він закрив 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%';
Ще кілька варіантів, які були відмічені в коментарях до блогу Гранта:
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 чи насправді відстежує її самостійно. Ви можете спробувати встановити його і сподіватися на найкраще.