Резервное копирование и восстановление баз данных являются важными задачами для разработчиков и администраторов баз данных в SQL Server. Хотя существуют стандартные шаги для реализации резервного копирования и восстановления, важно иметь более глубокое понимание этих процессов, чтобы справиться с нестандартными ситуациями и предложить гибкие решения.
В этой статье мы обсудим некоторые общие вопросы, связанные с резервным копированием и восстановлением в SQL Server, и предоставим примеры для иллюстрации концепций.
Разрывает ли полное или дифференциальное резервное копирование цепочку журнала транзакций?
При восстановлении базы данных стандартные шаги включают восстановление полного резервного копирования, за которым следует дифференциальное резервное копирование, а затем резервные копии журнала транзакций. Но что произойдет, если дифференциальное резервное копирование отсутствует?
В этом случае мы все равно можем восстановить базу данных до момента, когда было сделано последнее резервное копирование журнала транзакций. Отсутствие дифференциального резервного копирования не разрывает цепочку журнала транзакций. Мы можем восстановить базу данных, используя только полное и резервные копии журнала транзакций, независимо от наличия дифференциальных резервных копий или их отсутствия.
Вот пример:
--Восстановление полного резервного копирования
RESTORE DATABASE TestDB
FROM DISK = 'E:\Backup\TestDBFull_1.bak'
WITH NORECOVERY, REPLACE
--Восстановление резервных копий журнала
RESTORE LOG TestDB
FROM DISK = 'E:\Backup\TestDBLog_1.trn'
WITH NORECOVERY
RESTORE LOG TestDB
FROM DISK = 'E:\Backup\TestDBLog_2.trn'
WITH NORECOVERY
RESTORE LOG TestDB
FROM DISK = 'E:\Backup\TestDBLog_3.trn'
WITH NORECOVERY
RESTORE LOG TestDB
FROM DISK = 'E:\Backup\TestDBLog_4.trn'
WITH RECOVERY
Как видим, база данных успешно восстанавливается без использования дифференциального резервного копирования.
Можно ли использовать дифференциальное или резервное копирование журнала транзакций с полными резервными копиями COPY_ONLY?
Полные резервные копии COPY_ONLY используются, когда нам нужно сделать резервную копию без влияния на последовательность восстановления резервных копий. Однако можно ли восстановить базу данных, используя полную резервную копию COPY_ONLY вместе с дифференциальными и резервными копиями журнала транзакций?
Ответ – нет. Невозможно использовать дифференциальные резервные копии с полной резервной копией COPY_ONLY для восстановления. Однако резервные копии журнала транзакций, сделанные после полной резервной копии COPY_ONLY, могут быть использованы с резервной копией COPY_ONLY для восстановления базы данных.
Опасность резервного копирования на диск ‘NUL’
Резервное копирование журнала транзакций на несуществующий диск, например, ‘NUL’, является рискованной практикой. Хотя оно обрезает файл журнала транзакций, оно не сохраняет резервную копию журнала транзакций нигде. Это прерывает цепочку журнала и делает невозможным восстановление следующей резервной копии журнала.
Рекомендуется избегать резервного копирования на диск ‘NUL’ для освобождения места в файле журнала транзакций. Если нет другого варианта, крайне важно сделать полную резервную копию сразу после завершения этой операции, чтобы поддерживать целостность цепочки журнала.
Заключение
Процессы резервного копирования и восстановления являются важными задачами для администраторов баз данных и разработчиков, работающих с SQL Server. Понимание деталей этих процессов и осторожность в нестандартных случаях крайне важны для избегания ошибок и обеспечения целостности данных.