В этом руководстве вы узнаете о различных типах резервного копирования SQL Server, включая полное резервное копирование, дифференциальное резервное копирование и резервное копирование журнала транзакций.
Что такое резервная копия?
Резервная копия — это образ этой базы данных на момент полного резервного копирования.
При резервном копировании базы данных вы копируете ее на устройство резервного копирования, например, диск. Позже вы можете использовать файлы резервной копии для восстановления базы данных в ее исходное состояние.
Важно, чтобы у вас была хорошая стратегия резервного копирования для удовлетворения потребностей бизнеса. Планирование стратегии резервного копирования начинается со стратегии восстановления.
Вот важные вопросы, которые определяют стратегию восстановления:
- Какой максимальный объем потери данных, измеренный во времени, может быть допустим?
- Каковы приемлемые сроки восстановления базы данных в случае аварии?
Первый вопрос определит необходимые вам типы резервного копирования, а второй вопрос касается использования решения высокой доступности.
Зачем делать резервное копирование?
Обычно резервное копирование базы данных выполняется для восстановления ее исходного состояния непосредственно перед аварией, например:
- Сбой оборудования
- Повреждение базы данных
- Ошибки пользователя
Также вы можете использовать резервную копию для копирования базы данных с одного сервера на другой. Например, вы делаете резервную копию базы данных на производственном сервере и восстанавливаете ее на тестовом сервере.
Где хранить резервные копии
В идеале резервную копию следует хранить на отдельном устройстве, отличном от SQL Server.
Следовательно, вы никогда не должны хранить резервную копию на том же сервере SQL Server. Причина в том, что если сервер выйдет из строя, вы потеряете как данные, так и их резервную копию.
Какие базы данных нуждаются в резервном копировании
Необходимо создать резервную копию как пользовательских баз данных, так и системных баз данных(за исключением системной базы данных tempdb).
Типы резервного копирования
SQL Server позволяет создавать резервную копию на уровне базы данных; резервная копия на уровне таблиц не поддерживается. База данных SQL Server имеет следующие типы резервных копий:
- Полное резервное копирование
- Дифференциальное резервное копирование
- Резервное копирование журнала транзакций
Предположим, у нас есть таблица в базе данных с четырьмя записями:
Полное резервное копирование
Полная резервная копия содержит копию всей базы данных, включая использованные страницы данных и файлы журнала, записанные во время резервного копирования. Полная резервная копия не обрезает журнал транзакций.
Для восстановления базы данных всегда нужна полная резервная копия. Другими словами, вы не сможете восстановить дифференциальную резервную копию или резервную копию журнала транзакций без полной резервной копии.
Полное резервное копирование может вызвать значительный объем дискового ввода-вывода. Поэтому его следует выполнять в то время, когда рабочая нагрузка низкая.
На следующем рисунке показаны полные резервные копии:
На этом снимке у нас две полные резервные копии:
- Первая полная резервная копия содержит запись с идентификатором 1
- Вторая полная резервная копия содержит записи с идентификаторами 1, 2 и 3.
Для выполнения полного резервного копирования используется оператор BACKUP DATABASE со следующим базовым синтаксисом:
BACKUP DATABASE database_name TO DISK = path_to_backup_file;
В этом синтаксисе вы указываете имя базы данных, для которой вы хотите выполнить полное резервное копирование, после ключевых слов BACKUP DATABASE и путь к файлу резервной копии в предложении TO DISK.
Дифференциальное резервное копирование
Дифференциальная резервная копия содержит только данные, которые были изменены с момента последнего полного резервного копирования. В остальном дифференциальная резервная копия идентична полной резервной копии.
На следующем рисунке показаны дифференциальные резервные копии:
На этом рисунке у нас есть две полные резервные копии и три дифференциальные резервные копии:
- Первая дифференциальная резервная копия содержит запись с идентификатором 2, которая вставлена после первой полной резервной копии.
- Вторая дифференциальная резервная копия содержит записи с идентификаторами 2 и 3, которые вставлены после первой полной резервной копии.
- Третья дифференциальная резервная копия содержит запись с идентификатором 4, которая вставлена после второй полной резервной копии.
Для выполнения дифференциального резервного копирования используйте оператор BACKUP DATABASE с опцией DIFFERENTIAL следующим образом:
BACKUP DATABASE database_name TO DISK = path_to_backup_file WITH DIFFERENTIAL;
Резервное копирование журнала транзакций
Резервная копия журнала транзакций содержит все изменения, внесенные в базу данных. Резервная копия журнала транзакций требуется при использовании полной или неполных моделей восстановления, поскольку им необходимо усекать журнал.
Обратите внимание, что два последующих резервных копирования журнала транзакций не содержат избыточных данных. Кроме того, резервное копирование журнала транзакций не влияет на производительность, поэтому его можно выполнять при высокой рабочей нагрузке.
Для выполнения резервного копирования журнала транзакций модель восстановления базы данных должна быть либо FULL, либо BULK_LOGGED.
На следующем рисунке показано резервное копирование журнала транзакций:
На этом рисунке показаны две полные резервные копии и три резервные копии журнала транзакций:
- Первая резервная копия журнала транзакций содержит запись с идентификатором 2
- Вторая резервная копия журнала транзакций содержит запись с идентификатором 3
- Третья резервная копия журнала транзакций содержит запись с идентификатором 4.
Обратите внимание, что полное резервное копирование не очищает журналы транзакций. Поэтому журнал транзакций скопирует все записи, которые не были скопированы ни одним из предыдущих резервных копий журнала транзакций.
Для выполнения резервного копирования журнала транзакций используется оператор BACKUP LOG следующим образом:
BACKUP LOG database_name TO DISK = path_to_backup_file;
Краткое содержание
- SQL Server предоставляет три типа резервного копирования: полное резервное копирование, дифференциальное резервное копирование и резервное копирование журнала транзакций.
- Полное резервное копирование создает резервную копию всей базы данных и активной части журналов транзакций. Журнал транзакций при этом не очищается.
- Дифференциальное резервное копирование основано на полном резервном копировании. Дифференциальное резервное копирование сохраняет изменения с момента последнего полного резервного копирования и активную часть журналов транзакций в конце резервного копирования.
- Резервная копия журнала транзакций содержит журналы транзакций, которые еще не были скопированы до последней записи, существующей на момент окончания резервного копирования.