Мне сказали, что это хорошая практика - хранить файлы данных SQL Server и файлы журналов на физически отдельных дисках, потому что это позволит вам восстановить данные до точки отказа, если диск с данными выйдет из строя.
Итак ... предположим, что mydata.mdf находится на диске D :, а мой mydata_log.ldf находится на диске E :, и сейчас 16:45, а диск D: только что ужасно умер.
Итак - у меня есть полная резервная копия прошлой ночи (mydata.bak). У меня есть ежечасные резервные копии журналов транзакций, которые возвращают данные до 16:00 ... но это означает, что я потеряю 45 минут обновлений.
У меня все еще есть mydata_log.ldf на диске E :, который должен содержать КАЖДУЮ транзакцию, которая была зафиксирована вплоть до того момента, когда диск вышел из строя.
Как мне воссоздать базу данных и восстановить данные из файла резервной копии и журнала транзакций в реальном времени, чтобы не потерять обновления? Это возможно?
Чтобы завершить ответ имтиаза:
Первое, что нужно сделать, это немедленно попытаться сделать резервную копию хвоста журнала. Даже с поврежденной базой данных (подозрительный статус) вы сможете сделать резервную копию хвоста журнала.
Пример:
РЕЗЕРВНЫЙ ЖУРНАЛ db_name TO DISK = 'C: \ TESTS \ db_name_log.trn' WITH INIT, NO_TRUNCATE;
Восстановить полную резервную копию (опция БЕЗ ВОССТАНОВЛЕНИЯ) + восстановить резервную копию журнала 16:00 (опция БЕЗ ВОССТАНОВЛЕНИЯ) + восстановить хвостовую резервную копию (опция ВОССТАНОВЛЕНИЕ) -> вы можете восстановить базу данных до последней точки отказа.
Вам необходимо иметь резервную копию файла журнала (в зависимости от вашей версии sql). Если вы можете сделать резервную копию хвоста, то все готово! Если вы не можете этого сделать, вам придется столкнуться с потерей данных и увеличить частоту резервного копирования журналов. Я делаю резервную копию каждые 5 минут из-за требований бизнеса.
Из BooksOnline: BACKUP LOG database_name TO WITH CONTINUE_AFTER_ERROR
Если база данных повреждена, например, если база данных не запускается, резервное копирование хвостового журнала будет успешным только в том случае, если файлы журнала не повреждены, база данных находится в состоянии, которое поддерживает резервное копирование хвостового журнала, и база данных не содержит никаких незаполненные изменения.
сначала вам нужно создать резервную копию журнала хвоста (чтобы предотвратить потерю данных), выполнив команду ниже
BACKUP LOG <database_name> TO <backup_device>
WITH NORECOVERY, NO_TRUNCATE;
Затем восстановите, выполнив команду ниже
RESTORE DATABASE <database_name> FROM <backup_device>
WITH NORECOVERY;