В этом руководстве вы узнаете о дифференциальном резервном копировании SQL Server, а также о том, как создавать и восстанавливать дифференциальную резервную копию.
- Введение в дифференциальное резервное копирование SQL Server
- Дифференциальные резервные копии против полных резервных копий
- Создание дифференциальной резервной копии
- Заявление о РЕЗЕРВНОМ КОПИРОВАНИИ БАЗЫ ДАННЫХ
- Пример создания дифференциальных резервных копий
- Восстановить дифференциальную резервную копию
- Краткое содержание
Введение в дифференциальное резервное копирование SQL Server
Дифференциальная резервная копия основана на последней полной резервной копии. Другими словами, вы можете создать дифференциальную резервную копию только тогда, когда у вас есть хотя бы одна полная резервная копия.
Дифференциальная резервная копия фиксирует все изменения с момента последней полной резервной копии. И эта полная резервная копия называется базой для дифференциальной резервной копии.
На следующем рисунке показано, как работают дифференциальные и полные резервные копии:
На этом рисунке у нас есть две полные резервные копии и три дифференциальные резервные копии.
Первая полная резервная копия содержит идентификатор 1, а вторая полная резервная копия содержит идентификаторы 1, 2 и 3.
Первое и второе дифференциальные резервные копии выполняются после первого полного резервного копирования. Таким образом, первое дифференциальное резервное копирование содержит идентификатор 2, а второе дифференциальное резервное копирование содержит идентификаторы 2 и 3.
Третья дифференциальная резервная копия сделана после второй полной резервной копии. Поэтому она содержит только идентификатор 4.
Дифференциальные резервные копии против полных резервных копий
Дифференциальное резервное копирование имеет следующие преимущества по сравнению с полным резервным копированием:
- Скорость — создание дифференциальной резервной копии может быть гораздо быстрее по сравнению с созданием полной резервной копии, поскольку дифференциальная резервная копия сохраняет только те данные, которые изменились с момента последнего полного резервного копирования.
- Хранилище — для дифференциального резервного копирования требуется меньше места, чем для полного резервного копирования.
- Меньший риск потери данных — поскольку для дифференциального резервного копирования требуется меньше места на диске, вы можете чаще создавать дифференциальные резервные копии, что снижает риск потери данных.
Однако восстановление из дифференциальной резервной копии занимает больше времени, чем восстановление из полной резервной копии, поскольку необходимо выполнить восстановление как минимум из двух файлов резервных копий:
- Сначала выполните восстановление из последней полной резервной копии.
- Затем выполните восстановление из дифференциальной резервной копии.
Создание дифференциальной резервной копии
Заявление о РЕЗЕРВНОМ КОПИРОВАНИИ БАЗЫ ДАННЫХ
Для создания дифференциальной резервной копии используется оператор BACKUP DATABASE с опцией DIFFERENTIAL следующим образом:
BACKUP DATABASE database_name TO DISK = path_to_backup_file WITH DIFFERENTIAL;
В этом синтаксисе:
- Сначала укажите имя базы данных(database_name), резервную копию которой вы хотите создать, после ключевых слов BACKUP DATABASE.
- Во-вторых, укажите путь к файлу резервной копии(path_to_backup_file) в предложении TO DISK.
Пример создания дифференциальных резервных копий
Следующий пример иллюстрирует, как создать несколько дифференциальных резервных копий базы данных HR.
Сначала переключитесь на главный сервер и удалите базу данных HR:
USE master; DROP DATABASE IF EXISTS HR;
Во-вторых, создайте базу данных HR с таблицей People, содержащей одну строку:
CREATE DATABASE HR; GO USE HR; GO CREATE TABLE People( Id int IDENTITY PRIMARY KEY, FirstName varchar(50) NOT NULL, LastName varchar(50) NOT NULL ); INSERT INTO People(FirstName, LastName) VALUES('John', 'Doe');
В-третьих, создайте полную резервную копию базы данных отдела кадров:
BACKUP DATABASE HR TO DISK = 'D:\backup\hr.bak' WITH INIT, NAME = 'HR-Full Database Backup';
Первая полная резервная копия содержит одну строку с идентификатором 1.
В-четвертых, вставьте еще одну строку в таблицу People:
INSERT INTO People(FirstName, LastName) VALUES('Jane', 'Doe')
В-пятых, создайте первую дифференциальную резервную копию базы данных HR:
BACKUP DATABASE HR TO DISK = N'D:\backup\hr.bak' WITH DIFFERENTIAL , NAME = N'HR-Differential Database Backup';
Файл резервной копии теперь имеет две резервные копии: одну полную резервную копию и одну дифференциальную резервную копию. Другая резервная копия содержит строку с идентификатором 2.
В-шестых, вставьте еще одну строку в таблицу People:
INSERT INTO People(FirstName, LastName) VALUES('Dach', 'Keon');
В-седьмых, создайте вторую дифференциальную резервную копию:
BACKUP DATABASE HR TO DISK = N'D:\backup\hr.bak' WITH DIFFERENTIAL , NAME = N'HR-Differential Database Backup';
Вторая дифференциальная резервная копия содержит строки с идентификаторами 2 и 3, поскольку она фиксирует изменения с момента последнего полного резервного копирования.
В-восьмых, создайте вторую полную резервную копию:
BACKUP DATABASE HR TO DISK = 'D:\backup\hr.bak' WITH NOINIT, NAME = 'HR-Full Database Backup';
Вторая полная резервная копия содержит строки с идентификаторами 1, 2 и 3.
Девятое, вставьте еще одну строку в таблицу People:
INSERT INTO People(FirstName, LastName) VALUES('Dach', 'Keon');
В-десятых, создайте третью дифференциальную резервную копию:
BACKUP DATABASE HR TO DISK = N'D:\backup\hr.bak' WITH DIFFERENTIAL , NAME = N'HR-Differential Database Backup';
Третья дифференциальная резервная копия содержит строку с идентификатором 4.
Наконец, проверьте файл резервной копии:
RESTORE HEADERONLY FROM DISK = N'D:\backup\hr.bak';
Выход:
Файл резервной копии содержит пять резервных копий: две полные резервные копии и три дифференциальные резервные копии.
Восстановить дифференциальную резервную копию
Чтобы восстановить базу данных HR из файла резервной копии, можно восстановить вторую полную резервную копию и последнюю дифференциальную резервную копию.
Сначала удалите базу данных HR:
USE master; DROP DATABASE IF EXISTS HR;
Во-вторых, восстановите базу данных HR из второй полной резервной копии:
RESTORE DATABASE HR FROM DISK = N'D:\backup\hr.bak' WITH FILE = 4, NORECOVERY;
Обратите внимание, что номер файла второй полной резервной копии — 4. Параметр NORECOVERY переводит базу данных в состояние восстановления.
Если вы используете SSMS, база данных HR будет выглядеть следующим образом:
HR(Restoring...)
В состоянии восстановления база данных недоступна.
Другими словами, используйте опцию NORECOVERY, если у вас есть еще резервные копии для восстановления. Однако, если у вас больше нет резервных копий для восстановления, вам нужно использовать опцию RECOVERY.
В-третьих, восстановите базу данных HR из последней дифференциальной резервной копии:
RESTORE DATABASE HR FROM DISK = N'D:\backup\hr.bak' WITH FILE = 5, RECOVERY;
FILE=5 указывает SQL Server использовать последнюю дифференциальную резервную копию. А опция RECOVERY указывает, что у вас больше нет резервных копий для восстановления.
Наконец, выберите данные из таблицы «Люди» в базе данных HR:
USE HR; SELECT * FROM people;
Выход:
Если в выводе вы видите 4 строки, база данных была успешно восстановлена из дифференциальной резервной копии.
Краткое содержание
- Дифференциальная резервная копия фиксирует изменения с момента последней полной резервной копии. И дифференциальная резервная копия всегда основана на полной резервной копии.
- Используйте оператор BACKUP DATABASE с опцией DIFFERENTIAL для создания дифференциальной резервной копии.
- Всегда сначала восстанавливайте данные из полной резервной копии, а затем из дифференциальной резервной копии.