2009-09-03 2 views
1

Мне было интересно, как вы можете восстановить данные из вашего файла журнала. Я использую sql 2005 (полная резервная копия).SQL Server LOG Восстановление данных

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

может ли кто-нибудь сказать мне, как я могу это сделать?

ответ

3

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

Первое, что нужно сделать, это сделать резервную копию журнала транзакций.

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

См. Это MSDN Article о том, как это сделать.

Я предлагаю вам оставить существующую базу данных на своем месте и восстановить резервные копии в новой базе данных. Затем вы можете написать несколько сценариев для перевода необходимых данных обратно в свою базу данных.

1

Ваши данные могут быть восстановлены только в случае: 1) база данных использует полную модель восстановления; 2) у вас есть полная резервная копия, которую вы делаете перед случайным удалением; 3) вы еще не восстановили или не создали резервную копию этой базы данных еще.

Если это правильно, вы должны: 1) сделать резервную копию журнала транзакций; 2) восстановить базу данных из полной резервной копии с опцией NORECOVERY; 3) восстановить журнал транзакций, используя опцию STOPAT.

2

Прежде всего, ваша база данных должны быть в полной модели восстановления, и вы должны иметь полную цепочку резервных копий журнала транзакций - серия журнальных записей, имеющую непрерывную последовательность последовательностей лога чисел (LSNS)

цепочка резервного копирования журнала запускается при создании полной резервной копии базы данных или модели восстановления с SIMPLE на FULL и выполняется полная резервная копия. После этого резервные копии журналов транзакций создаются на регулярной основе.Цепь резервного копирования журнала может быть разорвана только два способов:

  • Перезаписи резервного набора
  • Переключения с ПОЛНОГО Простом НАВАЛОЧНЫХ LOGGED модели восстановления

Разорвать цепь резервного копирования журнала может привести к пропуску сделка информация

Вы можете восстановить в момент времени с помощью:

  • SQL Server Management Studio, как показано в ссылке Robin условии
  • Использование T-SQL и вариант STOPAT

Синтаксис

RESTORE LOG database_name 
FROM <backup_device> 
WITH STOPAT = time, RECOVERY… 
  • Используйте инструмент третьей партии, такие как ApexSQL Вход который может не только восстановить конкретный момент времени, но выборочно откатить только выбранные вами транзакции

Вы можете использовать fi й шаги для всех перечисленных вариантов здесь: Restore a database to a point in time

Отказ от ответственности: Я работаю ApexSQL в качестве инженера по поддержке

0

Для восстановления файлов журнала транзакций до определенного момента времени база данных должна работать при полной модели восстановления , Таким образом, во-первых, вы должны восстановить последнюю полную резервную копию базы данных:

RESTORE DATABASE *database* FROM DISK = 'D:/Full.bak' WITH NORECOVERY, REPLACE 

Следующим шагом является восстановление последней дифференциальной резервной копии базы данных:

RESTORE DATABASE *database* FROM DISK = 'D:/Diff.bak' WITH NORECOVERY 

А затем восстановить все резервные копии журнала транзакций, которые сделали с момента последнего дифференциальное резервное копирование в правильной последовательности

RESTORE LOG *database* FROM DISK = 'D:/log1.bak' WITH NORECOVERY 
RESTORE LOG *database* FROM DISK = 'D:/log2.bak' WITH NORECOVERY 
RESTORE LOG *database* FROM DISK = 'D:/log3.bak' WITH NORECOVER 

Последнее резервное копирование журнала транзакций, которое необходимо восстановить, представляет собой резервную копию журнала транзакций, выполненную после t он произошел с опцией stopat. После опции stopat вы должны установить время, в которое хотите восстановить базу данных.

RESTORE LOG *database* FROM DISK = 'D:/log4.bak' WITH STOPAT = '2015-11-26 16:22:40.000', RECOVERY 
Смежные вопросы