Долгое время я создавая backup сам регулярно очищал старые, и разносил копии по разным папкам. Решил это автоматизировать. Долго подбирал механизм, так как не все работали с расшаренными ресурсами. В итоге после долгого тестирования родился такой скрипт.
Вы определяете при помощи параметров, сколько и каких backup вы хотите хранить. (политику хранения бекапов разного типа)
К примеру, у нас принято хранить 5 ежедневных, 4 недельных, 6 месячных, 6 годовых backup. Эти значения я и выбрал по умолчанию.
Скрипт хранит один backup не заархивированным. Чтобы можно было быстро восстановить текущую базу в тестовую, так как базы у меня по 70гб. То долго ждать, когда разархивируется для теста. Место хранения этого не заархивированного бекапа указывается параметром в процедуре. Можно хранить на локальном для SQL Server месте для совсем быстрого восстановления в тест (чтоб не гонять по сети при восстановлении), или вместе с дневными бекапами.
В новой версии расширился функционал.
Внимание новшевства.
1)Если не указывать @BazaName , то архивируються все базы, кроме служебных и содержащих в своем имени "test". Полезно, чтоб один раз настроить запуск бекапирования.
После этого добавляем на сервер базы и не думаем. будут бекапироваться они или нет. Будут..
2) @PathBkp тоже стал не обязательным , если не указывать. то при архивации RAR файл бекапа будет создан в том же каталоге кде и дневной бекап.После архивации удалиться.
Если не используем бекапирование RAR, то он вообще не нужен. Тонкость использования етого параметра в том, что если указать локальный путь на SQL Server вначале положиться туда,
потом при архивации, архиированный перенесется в хранилище бекапов. Это значительно ускорит работу. так как меньщше будет гоняться по сети данных.
3)@PathFile -- Имя каталога с файлом дневного архива, можно настраивать. Это нужно к примеру если вы хотите запускать каждые 2 часа бекапы, и складывать такие ежечасные бекапы отдельно от дневных.
Для этого же случит параметр @OnlyDayBKP
4) наконец!! Можно указывать нужно ли архивирование RAR, если параметр 0, то используется встроенное в SQL Server архивирование.
Что зачастую гараздо удобнее, хотя и есть небольшой проигрышь по занимаемому месту бекапов ив итоге.
5) @OnlyDayBKP - при включении этого параметра, создается только текущий бекап, не создаються недельные, месячные. годовые параметры.
Запускается соданием джобы на SQL Server с запуском хранимой процедуры sp_AddBkpDay с параметрами
@BazaName AS NVARCHAR(100)= NULL, -- Имя архивируемой базы данных. Внимание новшевство. Если не указывать, то архивируються все базы, кроме служебных и содержащих в своме имени "test".
@PathBkp AS NVARCHAR(200) , -- каталог с несжатыми файлами пример - '\\fserver\ms_backup\'
@PathAllBkp AS NVARCHAR(200) , -- Каталог где копятся все бекапы пример - '\\fserver\ms_backup\'
@PathWinRar AS NVARCHAR(200) ='C:\Program Files\WinRar\RAR.exe', -- Путь к файлу rar.exe
@CountBkpDay AS Int = 5, -- Кол-во дневных бекапов
@CountBkpWeek AS Int = 4, -- Кол-во недельных бекапов
@CountBkpMonth AS Int = 6, -- Кол-во месячных бекапов
@CountBkpYear AS Int = 6, -- Кол-во годовых бекапов
@PathFile AS NVARCHAR(100) = '\DayBKP', -- Имя каталога с файлом дневного архива
@AddRAR INT =0 -- Признак надо ли архивировать RAR.
@OnlyDayBKP INT = 0
Примеры запуска из реальных настроек серверров
Это один сервер
Раз в день запускается
exec sp_AddBkpDay @PathAllBkp ='\\fserv\1C-Backup\'
Это запускаестя бекапирование всех баз, по адресу \\fserv\1C-Backup\ , политика бекапирования (количество копий каждого типа бекапов), по умолчанию.
Раз в 2 часа
exec sp_AddBkpDay @PathAllBkp ='\\fserv\1C-Backup\' , @OnlyDayBKP = 1 , @PathFile = '\HourBKP' , @CountDayBKP = 20
Это запускаестя бекапирование всех баз, по адресу \\fserv\1C-Backup\ , записываються только бакпаты в бапку HourBKP, количество таких бекапов 20.
Другой сервер
exec sp_AddBkpDay @BazaName = 'IntesDB%' , @PathAllBkp = '\\Serv\ms_backup\' , @CountDayBKP = 4
Это бекапирование всех баз нназвания которых начинаються с IntesDBпо пути \\Serv\ms_backup\, количество дневых бекапов 4, остальные по умолчанию.
Другой сервер
EXEC sp_AddBkpDay @BazaName = '%Zup%' , @PathAllBkp = '\\Serv\MS_BACKUP\Zup\' , @CountDayBKP = 2
Все базы имеющие в имени Zup , сохранять в папке Zup , дневных 2 бекапа хранить.
EXEC sp_AddBkpDay @BazaName = '%Buh%' , @PathAllBkp = '\\Serv\MS_BACKUP\Buh\' , @CountDayBKP = 2
Понятно
EXEC sp_AddBkpDay @BazaName = 'GYTNikaC' , @PathAllBkp = '\\Serv\MS_BACKUP\Buh\' , @CountDayBKP = 2
Базу с именем GYTNikaC хранить с папке с именем GYTNikaC хранить в папке Buh, хранить 2 дневных бекапа.
Как видите, я давно не использую архивирование RAR, мне оно не удобно, выигрыш в месте стал не важен.
Использую встроенное архивирование.