BACKUP DATABASE … TO … WITH INIT
BACKUP DATABASE … TO … WITH DIFFERENTIAL
Руководство.
-- включение xp_cmdshell, запустить ОДИН раз
EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'xp_cmdshell', 1;
GO
RECONFIGURE;
GO
-- создание месячного резерва
DECLARE @BF VARCHAR(256), @BN VARCHAR (128)
DECLARE @DT VARCHAR(8) = CONVERT( VARCHAR, GETDATE(), 112)
SET @BF = 'MKDIR C:\Temp\' + SUBSTRING(@DT, 1, 4)
+ '\' + SUBSTRING(@DT, 5, 2)
-- создание папки 2021\11
EXECUTE xp_cmdshell @BF
SET @BF = 'C:\Temp\' + SUBSTRING(@DT, 1, 4)
+ '\' + SUBSTRING(@DT, 5, 2)
+ '\Testus.bak'
SET @BN = 'Testus' + CONVERT( VARCHAR, GETDATE(), 121)
BACKUP DATABASE Testus TO DISK = @BF WITH COPY_ONLY, NAME = @BN
-- сжатие
-- BACKUP DATABASE Testus TO DISK = @BF WITH COMPRESSION, COPY_ONLY, NAME = @BN
Проверить совместимость:
сжатие резервных копий.
Ночью делаете полную резервную копию:
-- создание ежедневного полного резерва
DECLARE @BF VARCHAR(256), @BN VARCHAR (128)
SET @BF = 'forfiles /P C:\Temp /M Testus-* /C "cmd /c DEL @path" /D -5'
-- удаление резервов старше 5 дней
EXECUTE xp_cmdshell @BF
SET @BF = 'C:\Temp\Testus-' + CONVERT( VARCHAR, GETDATE(), 23) + '.bak'
SET @BN = 'Testus-' + CONVERT( VARCHAR, GETDATE(), 121)
BACKUP DATABASE Testus TO DISK = @BF WITH INIT, NAME = @BN
Потом в рабочее время — разностную, например, каждый час:
-- создание разностного резерва
DECLARE @BF VARCHAR(256), @BN VARCHAR(128)
SET @BF = 'C:\Temp\Testus-' + CONVERT( VARCHAR, GETDATE(), 23) + '.bak'
SET @BN = 'Testus-' + CONVERT( VARCHAR, GETDATE(), 121)
BACKUP DATABASE Testus TO DISK = @BF WITH DIFFERENTIAL, NAME = @BN
Задание можно выполнять планировщиком ОС или SQL-сервера (
руководство).
Обработку файлов (перемещение, удаление и пр.), также средствами ОС или SQL-сервера (
xp_cmdshell).
бывают еще ручные резервные копии
Чтобы не нарушить порядок автоматический резервов, нужно делать резерв с параметром
COPY_ONLY
в специальный файл.
-- создание ручного полного резерва
DECLARE @BF VARCHAR(256), @BN VARCHAR (128)
SET @BF = 'C:\Temp\Testus-cp-' + CONVERT( VARCHAR, GETDATE(), 23) + '.bak'
SET @BN = 'Testus-' + CONVERT( VARCHAR, GETDATE(), 121)
BACKUP DATABASE Testus TO DISK = @BF WITH COPY_ONLY, NAME = @BN
всего, меньше от полной
Тут всё уже зависит от приложения. На стороне сервера можно лишь сжать базу данных (
руководство) и дефрагментировать индексы (
руководство). Это повысит плотность и, возможно, уменьшит количество изменённых страниц.
Восстановление:
Выбирайте день (имя файла) и восстанавливаете до нужного состояния.
можно выбрать не последнюю