Восстановление случайно изменённых данных без наличия резервной копии

Сценарий из жизни: вы выполнили инструкцию UPDATE без указания условия WHERE и теперь все ваши данные перезаписаны на некорректные значения. Каким способом теперь вернуть изменённые данные?

Если вы регулярно делаете резервные копии, то восстановить данные не составит проблемы, достаточно выполнить:

  • Либо, восстановление из резервной копии, поверх текущей БД
  • Либо, если кроме ваших изменений в БД произошли ещё какие-то операции или вы не можете позволить себе временно перевести БД в режим offline:
    1. Восстановите БД из резервной копии на тестовый сервер
    2. Выгрузите с помощью SQL Server Management Studio Export data нужные данные
    3. Загрузите их в вашу исходную БД

Но даже если у вас нет актуальной резервной копии базы данных, вы всё ещё можете вернуть ваши исходные данные, так как все операции UPDATE попадают в журнал транзакций.

Если после изменений журнал транзакций не был усечён (shrunk или truncated), то вы можете воспользоваться программой ApexSQL Log

ApexSQL Log – это как раз тот инструмент, который с помощью журнала транзакций позволит откатить ваше изменение. А дальше вы уже сможете выполнить ваш сценарий обновления, указав нужный фильтр WHERE.

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

  1. Запустите ApexSQL Log

  2. Подключитесь к базе данных

  3. На шаге Filter setup в разделе Time range укажите диапазон времени, когда произошло изменение (UPDATE)

  4. Укажите Update row на шаге Filter setup в разделе Operations tab

  5. Выберите таблицу или таблицы, которые были некорректно изменены (Filter setup -> Tables)

  6. По возможности, укажите приложение (Applications) из которого произошло изменение и пользователя (Users), который сделал эти изменения
  7. Нажмите открыть (Open)
  8. Чтобы создать скрипт отмены (Undo script):

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

    2. В контекстном меню Create undo script на таблице со списком транзакций вы можете создать сценарий только для выбранных операций
  9. Выполните полученный сценарий в вашей БД.

После выполнения сценария все ваши случайно изменённые данные вернутся в исходное состояние.

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

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

November 20, 2015