Восстановление удаленных данных в SQL Server


6 0

У нас на работе парень (извинюсь, но он из Индии) запустил update без указания секции where прямо на боевой базе данных. Результат - записи всей таблицы обновились, хотя ему нужно были изменить только одну. Ну со всеми бывает, надеюсь, что будет редко и меня обойдет.

Самое обидное, что он делал все по правилам - открыл транзакцию, запустил обновление, увидел, что изменено 11 тысяч строк вместо одной и почему-то проигнорировал и закомитил данные. Только потом увидел свой косяк.

Всего 11 тысяч строк, но в достаточно важной таблице.  Восстанавливать базу из резервной копии - слишком долго. Нужно за просить последнюю копию у админов, получить разрешение на копирование  300 гигабайт PCI ограниченных данных, восстановить где-то на сервере и складировать данные. Нереально. Проще обновить все затертые данные случайным мусором и сказать, что во всем виноват Билл Гейтс.

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

Потом решили копать в сторону репликации. Как раз три дня назад мы сделали полный снимок и инициализировали заново один из серверов, потому что репликация глюкнула. Я точно не знаю причин, почему сделали инициализацию заново, потому что меня не было на работе, да мне и все равно, главное, что нам повезло. Залезли в папку, где находятся файлы с последнего снапшота и скопировали файлы .bcp (по идее это означает Bulk Copy, но тут я могу ошибаться). Скопировали файлы на локальный диск одного из серверов баз и используя утилиту командной строки bcp скормили это все серверу. SQL Sever загрузил данные в новую таблицу и мы из этой таблицы скопировали затертые данные в боевую базу данных. Из 11 тысяч записей в репликационных данных мы нашли почти все записи, кроме новых строк, которые создали с момента полной копии. 

Восстановить новые записи, которые были созданы уже после последней полной копии можно через просмотр записей в журнале, который храниться на дистрибуторе  в базе данных distribution. Просто выполняем команду sp_browsereplcmds и она показывает все, что нужно. Только отфильтруй записи по таблице, указав параметр article_id. 

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


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

andrii.pruchai

14 Aпреля 2014

Индус работает или уже нет?
как надо натупить чтобы уволили? Вообще есть какая то система наказания за невнимательность и т.п.?


Михаил Фленов

14 Aпреля 2014

Ну это у него первый такой сильный косяк, так то он вполне не плохо соображает. Редкие косяки у нас прощают, потому что все могут ошибаться, это нормально, главное, чтобы он сделал вывод и работал над косяками.


15 Aпреля 2014

Михаил, скажите, вы когда скролите страницу, то как считаете- опускаете страницу или ее поднимаете?


Михаил Фленов

16 Aпреля 2014

Сролю вниз - по движению руки в Windows компьютерах по тач паду.


infanterrible

19 Aпреля 2014

Весело у вас там))


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне