В Microsoft SQL Server для сохранения ваших данных в случае выхода сервера из строя вы можете (обязаны) делать бэкап баз данных. В Microsoft SQL Server существуют следующие типы бэкапов:

  • Полный бэкап (Full Backup)
  • Дифференциальный бэкап (Differential Backup)
  • Бэкап журнала транзакций (Transaction Log Backup)
  • Бэкап только для копирования (Copy-Only Backup)
  • Бэкап файлов и файловых групп (File and Filegroup Backup)

Как правило простой обыватель зачастую сталкивается только с первыми тремя типами.

Теперь давайте рассмотрим каждый вариант поподробнее. Главное запомните, что при запуске бэкапа вы делаете резервную копию на определённую точку времени, всё что записано далее не включается в этот бэкап.

Полный бэкап (Full Backup)

Microsoft SQL Server full backup

При использовании Полного бэкапа (Full Backup) создаётся полная резервная копия базы данных, включающая все данные (mdf) и также весь лог транзакций (ldf). Т.е. для восстановления полностью базы данных вам понадобится только один файл.

Полный бэкап (Full Backup) также является отправной точкой для Дифференциального бэкапа (Differential Backup) и Бэкапа журнала транзакций (Transaction Log Backup). Т.е. чтобы сделать бэкап другого типа вам сперва придётся сделать Полный бэкап (Full Backup).

Используя Полный бэкап (Full Backup) вы упрощаете себе процесс восстановления, так как нужно восстановить один файл. Но нужно понимать, что, если у вас база данных большого объёма будет не выгодно делать Полный бэкап (Full Backup), так как это займёт много времени.

BACKUP DATABASE [YourDatabaseName]
TO DISK = 'C:\Backups\YourDatabase_Full.bak'
WITH INIT;
RESTORE DATABASE [YourDatabaseName]
FROM DISK = 'C:\Backups\YourDatabase_Full.bak';

Дифференциальный бэкап (Differential Backup)

Microsoft SQL Server Differential backup

Дифференциальный бэкап (Differential Backup) включает в себя только те данные, которые были записаны в базу данных после создания Полного бэкапа (Full Backup). Зачастую имеет намного меньший размер бэкапа чем Полный бэкап (Full Backup).

Используется для того, чтобы быстрее выполнять повседневный бэкап. Обычно Полный бэкап (Full Backup) выполняется раз в неделю, а Дифференциальный бэкап (Differential Backup) каждый день.

Для восстановления Дифференциального бэкапа (Differential Backup) нужно сперва восстановить Полный бэкап (Full Backup). Причём вы не сможете восстановить Дифференциальный бэкап (Differential Backup), который был создан до Полного бэкапа (Full Backup).

BACKUP DATABASE [YourDatabaseName]
TO DISK = 'C:\Backups\YourDatabase_Diff.bak'
WITH DIFFERENTIAL, INIT;
RESTORE DATABASE [YourDatabaseName] FROM DISK =  'C:\Backups\YourDatabase_Full.bak'  WITH NORECOVERY;
RESTORE DATABASE [YourDatabaseName] FROM DISK =  'C:\Backups\YourDatabase_Diff.bak'  WITH RECOVERY;

Microsoft SQL Server diff recovery

Бэкап журнала транзакций (Transaction Log Backup)

Microsoft SQL Server Log backup

Этот тип бэкапа включает только резервные копии логов транзакций, в которые записываются все изменения базы данных. Использование Бэкапа журнала транзакций (Transaction Log Backup) даёт вам возможность восстановится на конкретное время. Например, если вы делаете Бэкап журнала транзакций (Transaction Log Backup) каждые пять минуть, то при потере сервера вы максимум потеряете данные за пять минут, что не так уж и плохо.

В организациях где очень важно не потерять данные просто не имеет права не использовать этот тип бэкапа. Так как этот тип бэкапа самый быстрый.

Для того чтобы восстановить Бэкап журнала транзакций (Transaction Log Backup) вам сперва необходимо восстановить Полный бэкап (Full Backup) и самый последний Дифференциальный бэкап (Differential Backup), если он есть.

BACKUP LOG [YourDatabaseName]
TO DISK = 'C:\Backups\YourDatabase_Log.trn'
WITH INIT;
RESTORE DATABASE [YourDatabaseName] FROM DISK =  'C:\Backups\YourDatabase_Full.bak'  WITH NORECOVERY;
RESTORE DATABASE [YourDatabaseName] FROM DISK =  'C:\Backups\YourDatabase_Diff.bak'  WITH NORECOVERY;
RESTORE LOG [YourDatabaseName] FROM DISK =  'C:\Backups\YourDatabase_Log.trn'  WITH RECOVERY;

Microsoft SQL Server Log recovery

Бэкап только для копирования (Copy-Only Backup)

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

Мы уже говорили, что если вы делаете Полный бэкап (Full Backup) то он становится отправной точкой для всех будущих Дифференциальных бэкапов (Differential Backup) и Бэкапов журнала транзакций (Transaction Log Backup).

Обычно используется для передачи бэкапа другим лицам или просто для проверки восстановления базы данных.

BACKUP DATABASE [YourDatabaseName]
TO DISK = 'C:\Backups\YourDatabase_CopyOnly.bak'
WITH COPY_ONLY, INIT;
RESTORE DATABASE [YourDatabaseName]
FROM DISK = 'C:\Backups\YourDatabase_CopyOnly.bak'
WITH REPLACE;

Бэкап файлов и файловых групп (File and Filegroup Backup)

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

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

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

BACKUP DATABASE [YourDatabaseName] FILEGROUP = 'FG1'
TO DISK = 'C:\Backups\YourDatabase_FG1.bak'
WITH INIT;

BACKUP LOG [YourDatabaseName]
TO DISK = 'C:\Backups\YourDatabase_Log.trn'
WITH INIT;
RESTORE DATABASE [YourDatabaseName] FILEGROUP =  'FG1'  FROM DISK =  'C:\Backups\YourDatabase_FG1.bak'  WITH RECOVERY;

RESTORE LOG [YourDatabaseName] FROM DISK =  'C:\Backups\YourDatabase_Log.trn'  WITH RECOVERY;