29 мая 2011 г.

Как восстановить текст запроса SQL Server

Автор: Грант Фритчи.
Оригинал статьи: Oh ****!

Вы когда-нибудь случайно закрывали SQL Server Management Studio (SSMS)? Вам задавали вопрос “Сохранить изменения следующих элементов?” при закрытии SSMS?  И вы совершенно бездумно нажимали кнопку "Нет", хотя был открыт запрос, над которым вы работали? Ну что вы, я ни разу так не делал. Так поступает только идиот….


Ладно, признаюсь. Я только что так сделал. Глупо, но я потратил не менее получаса на запрос и теперь он потерян…. или не потерян? Я выполнил запрос и смотрел на результаты, когда закрыл SSMS. В начале меня охватила паника и я начал думать, как восстановить данные (я слышал, где-то есть какой-то файл). Затем мне в голову пришла мысль, я только что писал запросы к кэшу с использованием DMO. Почему бы не "вытянуть" текст своего запроса с помощью DMO? Сработало подобно заклинанию.
 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%';  

Мой запрос был гораздо сложнее, но это было все, что требовалось. Я отфильтровал мусор из кэша, выбрав только те запросы, которые выполнялись в пределах тех 15 минут, когда был закрыт SSMS, и подставил начало запроса, обобщенное табличное выражение (CTE). Этого было достаточно. Я восстановил свой запрос. Все было в порядке: потребовалось немного отформатировать запрос, но использовать его можно было прямо сейчас.

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

1 комментарий:

  1. Спасибо, пригодилось, восстановил запрос 8ми дневной давности, вызванный крешем ССМСтудии. думал скрипт уже не нужен будет :) оказался нужен :)

    ОтветитьУдалить