Восстановление данных SQL Server после случайного удаления (DELETE) или изменения (UPDATE)

Худший кошмар для DBA – это потеря данных по его собственной ошибке. Не редкость, когда случайно выполняется операция удаления (DELETE) или изменения (UPDATE) без указания фильтра WHERE, тогда в одночасье миллионы строк могут быть некорректно изменены.

Какие же варианты восстановления возможны в SQL Server, если с вами произошла подобная ситуация?

Вы можете восстановить данные из резервной копии, которую вы сделали прямо перед тем, как данные были изменены.

Общий сценарий восстановления:

  1. Восстановите БД из резервной копии поверх исходной
  2. В противном случае
    • Восстановите БД из резервной копии под другим именем
    • Найдите все строки, которые необходимо восстановить
    • Напишите сценарий, который восстановит нужные строки в исходной БД

К сожалению, сценарий, описанный выше, это идеальная картина. В реальной же жизни всё может пойти совсем ни так:

  • Ошибки обнаруживаются ни сразу, а спустя какое-то время
  • В базе данных произошёл большой набор изменений между созданием резервной копии и внесением в базу ошибочных данных
  • Последующие изменения, произведённые в БД, уже после вашей ошибки
  • Резервные копии не делаются регулярно или отсутствуют вовсе

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

ApexSQL Log – это тот инструмент восстановления SQL Server, который способен из данных журнала транзакций вернуть изменённые записи в исходное состояние.

Чтобы восстановить с помощью ApexSQL Log случайно удалённые или изменённые данные выполните следующие шаги:

  1. Запустите ApexSQL Log
  2. Подключитесь к БД
  3. В окне Select SQL logs to analyze укажите журнал транзакций и резервные копии журналов транзакций, которые вы хотите прочитать. Обратите внимания, что они должны образовывать полную цепочку событий, чтобы обеспечить восстановление всех данных. Добавление полной резервной копии БД может помочь в поиске нужных данных и способно ускорить этот поиск.

  4. В окне Filter setup вы можете указать дополнительные параметры, чтобы сузить поиск: время, тип операции, название таблицы, имя пользователя и другие.

  5. После того, как вы установили все опции, нажмите кнопку открыть (Open)

 

Все транзакции будут представлены в виде таблицы, вы по-прежнему можете указать дополнительные условия, чтобы отсеять ненужные записи с помощью фильтров (Filter) в левой панели.

Для выполнения восстановления данных, выберите транзакции, которые вы хотите вернуться и нажмите кнопку Create undo script на вкладке Actions.

Теперь достаточно выполнить этот сценарий в вашей БД и все случайно изменённые или удалённые данные будут возвращены.

Так что помните, если вы случайно удалили или изменили данные, вы все еще можете восстановить их с помощью ApexSQL Log

Переводчик: Алексей Князев

November 20, 2015