Худший кошмар для DBA – это потеря данных по его собственной ошибке. Не редкость, когда случайно выполняется операция удаления (DELETE) или изменения (UPDATE) без указания фильтра WHERE, тогда в одночасье миллионы строк могут быть некорректно изменены.
Какие же варианты восстановления возможны в SQL Server, если с вами произошла подобная ситуация?
Вы можете восстановить данные из резервной копии, которую вы сделали прямо перед тем, как данные были изменены.
Общий сценарий восстановления:
- Восстановите БД из резервной копии поверх исходной
- В противном случае
- Восстановите БД из резервной копии под другим именем
- Найдите все строки, которые необходимо восстановить
- Напишите сценарий, который восстановит нужные строки в исходной БД
К сожалению, сценарий, описанный выше, это идеальная картина. В реальной же жизни всё может пойти совсем ни так:
- Ошибки обнаруживаются ни сразу, а спустя какое-то время
- В базе данных произошёл большой набор изменений между созданием резервной копии и внесением в базу ошибочных данных
- Последующие изменения, произведённые в БД, уже после вашей ошибки
- Резервные копии не делаются регулярно или отсутствуют вовсе
В качестве альтернативного сценария восстановления можно воспользоваться данными из журнала транзакций и резервных копий журнала транзакций.
ApexSQL Log – это тот инструмент восстановления SQL Server, который способен из данных журнала транзакций вернуть изменённые записи в исходное состояние.
Чтобы восстановить с помощью ApexSQL Log случайно удалённые или изменённые данные выполните следующие шаги:
- Запустите ApexSQL Log
- Подключитесь к БД
- В окне Select SQL logs to analyze укажите журнал транзакций и резервные копии журналов транзакций, которые вы хотите прочитать. Обратите внимания, что они должны образовывать полную цепочку событий, чтобы обеспечить восстановление всех данных. Добавление полной резервной копии БД может помочь в поиске нужных данных и способно ускорить этот поиск.
- В окне Filter setup вы можете указать дополнительные параметры, чтобы сузить поиск: время, тип операции, название таблицы, имя пользователя и другие.
- После того, как вы установили все опции, нажмите кнопку открыть (Open)
Все транзакции будут представлены в виде таблицы, вы по-прежнему можете указать дополнительные условия, чтобы отсеять ненужные записи с помощью фильтров (Filter) в левой панели.
Для выполнения восстановления данных, выберите транзакции, которые вы хотите вернуться и нажмите кнопку Create undo script на вкладке Actions.
Теперь достаточно выполнить этот сценарий в вашей БД и все случайно изменённые или удалённые данные будут возвращены.
Так что помните, если вы случайно удалили или изменили данные, вы все еще можете восстановить их с помощью ApexSQL Log
Переводчик: Алексей Князев
November 20, 2015