Настройка автоматического резервного копирования в среде MS SQLEXPRESS
Добрый день мои дорогие читатели.
На днях перед мной встала задача сделать резервное копирования в SQLEXPRESS, но так как в данной версии в отличии от полной нет планировщика заданий скрипты пришлось писать самому + к этому необходимо было запланировать чтобы скрипты запускались в определенное время и через определенные промежутки.
И так что нам необходимо для того чтобы выполнить все действия:
- Установить Microsoft SQL Express Edition 2012
- Установить Microsoft SQL Managment Studio 2012
- прямые руки и голова на плечах.
Подробнее о задаче.
Необходимо было сделать чтобы с двух баз снимались логи транзакций каждые пол часа (30мин). каждую ночь допустим в 01:00 снимался полный бекап базы ну и нужно было настроить задание на очистку жесткого диска для того чтобы не засерать сервер.
Ну начнем.
Для начала нам необходимо создать два текстовых файла, у которого в последствии нужно будет поменять расширение на .sql
В одном файле мы пишем скрипт на снятие логов в другом на снятие полного бэкапа.
Первый файл:
DECLARE @Diskstr varchar (255) SET @Diskstr = 'C:\Backup\trn\1\log_' + replace(Convert(char(19), GETDATE(), 120),':','-') + '.bak' BACKUP LOG [test] TO DISK = @Diskstr WITH NOFORMAT, NOINIT, NAME = N'test_log', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO DECLARE @Diskstr1 varchar (255) SET @Diskstr1 = 'C:\Backup\trn\2\log_' + replace(Convert(char(19), GETDATE(), 120),':','-') + '.bak' BACKUP LOG [test_1] TO DISK = @Diskstr1 WITH NOFORMAT, NOINIT, NAME = N'test_log', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
здесь мы создаем переменные, присваиваем им путь + добавляем к файлу дату и время ну и указываем как будет называться файл.
Далее пишем 2 файл:
DBCC CHECKDB (test) DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS GO DECLARE @Diskstr varchar (255) SET @Diskstr = 'C:\Backup\full\1\Full_' + replace(Convert(varchar(19), GETDATE(), 120),':','-') + '.bak' BACKUP DATABASE [test] TO DISK = @Diskstr WITH NOFORMAT, NOINIT, NAME = N'test_full', SKIP, NOREWIND, NOUNLOAD, STATS = 10,CHECKSUM GO DBCC SHRINKDATABASE (test) GO DBCC CHECKDB (test_1) DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS GO DECLARE @Diskstr1 varchar (255) SET @Diskstr1 = 'C:\Backup\full\2\Full_' + replace(Convert(varchar(19), GETDATE(), 120),':','-') + '.bak' BACKUP DATABASE [test_1] TO DISK = @Diskstr1 WITH NOFORMAT, NOINIT, NAME = N'test_full', SKIP, NOREWIND, NOUNLOAD, STATS = 10,CHECKSUM GO DBCC SHRINKDATABASE (test_1) GO
Здесь мы делаем проверку базы:
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTSGO
Здесь мы делаем тоже самое что и с файлом который отвечает за бэкап логов:
DECLARE @Diskstr varchar (255) SET @Diskstr = 'C:\Backup\full\1\Full_' + replace(Convert(varchar(19), GETDATE(), 120),':','-') + '.bak' BACKUP DATABASE [test] TO DISK = @Diskstr WITH NOFORMAT, NOINIT, NAME = N'test_full', SKIP, NOREWIND, NOUNLOAD, STATS = 10,CHECKSUM GO
Далее мы делаем шринк базы данных для того чтобы база не росла в объеме:
DBCC SHRINKDATABASE (test)GO
ВСЕ скрипты мы написали: дальше нужно создать 2 исполняющих файла для того чтобы эти скрипты запускались.
В новый текстовый файл добавляем строку
sqlcmd -Usa -P1234567 -S SERVER\SQLEXPRESS -i "c:\SQL_Skript\log.sql"
где U - это имя пользователя на базы SQL (обычно он sa)
P - это пароль для пользователя
S - полное имя сервера
Также, необходимо указать, где лежит скрипт для снятия логов (в моем случае он лежит по пусти C:\SQL_Skript\log.sql)
По аналогии с файлом выше делаем такой же только для запуска скрипта для проверки и снятия резервных копий баз данных.
sqlcmd -Usa -P1234567 -S SERVER1C\SQLEXPRESS -i "c:\SQL_Skript\full.sql"
как видите здесь все тоже самое что и в примере выше за исключением названия базы. После создания обоих файлов расширение с txt необходимо изменить на cmd
Дальше нам нужен исполняемый файл для того чтобы резервные копии не копились и удалялись после определенного срока,создаем новый текстовый файл в который делам такую запись:
@echo offforfiles -p "c:\BackUp\full" /M *.bak /C "cmd /c del /q/f @path" /d -30forfiles -p "c:\BackUp\trn" /M *.bak /C "cmd /c del /q/f @path" /d -2
здесь мы указываем путь где лежат резервные копии, расширение, и количество в ДНЯХ файлы старше указанных 30 и 2 дней будут удалятся.
Ну и в конечном итоге необходимо запланировать в обычном планировщике 3 задания на снятие логов, на бекап баз ну и на очистку устаревших файлов резервных копий.
Спасибо что были со мной.
Если статья оказалась полезной - поделись ссылкой с друзьями - кнопки ниже!