Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД_ресторан_5семестр.doc
Скачиваний:
0
Добавлен:
23.01.2026
Размер:
1.76 Mб
Скачать
  1. Процедура дифференциального резервного копирования

Данный бэкап фиксируют только изменения, произошедшие с момента последнего полного бэкапа. Изоляция файлов достигается за счет хранения в отдельной папке D:\Backup\DIFF.

CREATE OR ALTER PROCEDURE dbo.sp_Restaurant_BackupDiff

AS

BEGIN

SET NOCOUNT ON;

DECLARE @BackupPath NVARCHAR(500);

SET @BackupPath = N'D:\Backup\DIFF\DataBase_Restaurant_DIFF_' +

REPLACE(CONVERT(NVARCHAR(20), GETDATE(), 120), ':', '-') + '.bak';

PRINT 'ДИФФЕРЕНЦИАЛЬНОЕ РЕЗЕРВНОЕ КОПИРОВАНИЕ';

PRINT 'Файл: ' + @BackupPath;

BEGIN TRY

BACKUP DATABASE [DataBase_Restaurant]

TO DISK = @BackupPath

WITH DIFFERENTIAL,

FORMAT,

INIT,

NAME = N'Restaurant - Differential Backup',

STATS = 5,

COMPRESSION;

PRINT 'Дифференциальный бэкап создан!';

END TRY

BEGIN CATCH

PRINT 'Ошибка: ' + ERROR_MESSAGE();

RAISERROR('Не удалось создать дифференциальный бэкап.', 16, 1);

END CATCH

END;

GO

  1. Процедура резервного копирования журнала транзакций

Изоляция файлов достигается за счет хранения в отдельной папке D:\Backup\LOG.

CREATE OR ALTER PROCEDURE dbo.sp_Restaurant_BackupLog

AS

BEGIN

SET NOCOUNT ON;

DECLARE @BackupPath NVARCHAR(500);

SET @BackupPath = N'D:\Backup\LOG\DataBase_Restaurant_LOG_' +

REPLACE(CONVERT(NVARCHAR(20), GETDATE(), 120), ':', '-') + '.trn';

PRINT 'РЕЗЕРВНОЕ КОПИРОВАНИЕ ЖУРНАЛА ТРАНЗАКЦИЙ';

PRINT 'Файл: ' + @BackupPath;

BEGIN TRY

BACKUP LOG [DataBase_Restaurant]

TO DISK = @BackupPath

WITH FORMAT,

INIT,

NAME = N'Restaurant - Transaction Log Backup',

STATS = 5,

COMPRESSION;

PRINT 'Бэкап журнала транзакций создан!';

END TRY

BEGIN CATCH

PRINT 'Ошибка: ' + ERROR_MESSAGE();

RAISERROR('Не удалось создать бэкап журнала транзакций.', 16, 1);

END CATCH

END;

GO

  1. Процедура тестирования всех бэкапов

Данная процедура поочерёдно делает каждый из трёх бэкапов и выдаёт сообщение об окончании тестирования.

CREATE OR ALTER PROCEDURE dbo.sp_Restaurant_TestBackupSystem

AS

BEGIN

SET NOCOUNT ON;

PRINT 'ТЕСТИРОВАНИЕ СИСТЕМЫ РЕЗЕРВНОГО КОПИРОВАНИЯ';

PRINT 'Время начала: ' + CONVERT(NVARCHAR, GETDATE(), 120);

PRINT '';

PRINT '1. Тест полного бэкапа:';

BEGIN TRY

EXEC dbo.sp_Restaurant_BackupFull @RetryCount = 2;

PRINT 'Успешно';

END TRY

BEGIN CATCH

PRINT 'Ошибка: ' + ERROR_MESSAGE();

END CATCH

PRINT '';

PRINT '2. Тест дифференциального бэкапа:';

BEGIN TRY

EXEC dbo.sp_Restaurant_BackupDiff;

PRINT 'Успешно';

END TRY

BEGIN CATCH

PRINT 'Ошибка: ' + ERROR_MESSAGE();

END CATCH

PRINT '';

PRINT '3. Тест бэкапа журнала транзакций:';

BEGIN TRY

EXEC dbo.sp_Restaurant_BackupLog;

PRINT 'Успешно';

END TRY

BEGIN CATCH

PRINT 'Ошибка: ' + ERROR_MESSAGE();

END CATCH

PRINT '';

PRINT 'ТЕСТИРОВАНИЕ ЗАВЕРШЕНО';

END;

GO

Чтобы протестировать все бэкапы, выполним запрос с вызовом данной процедуры:

EXEC dbo.sp_Restaurant_TestBackupSystem;

Результат представлен на рисунке 46.

Рисунок 46. Тестирование всех бэкапов

Если зайти в папку Backup на диске D, можно увидеть там три файла с бэкапами FULL, DIFF, LOG в соответствующих папках (рис. 47).

Рисунок 47. Бэкапы, сделанные в 1:48