Эта статья не претендует на пособие по созданию резервных копий баз данных 1С, но может помочь начинающим администраторам в автоматизации рутинных процессов создания бэкапов. И так, исходные данные:
- Сервер 1С Предприятия 8.3.ххх
- Сервер баз данных MS SQL 2008 и более новее
И так переходим в консоль управления MS SQL сервера, находим под списком баз данных пункт “Агент SQL сервер” в нем подпункт “Задания” и создаем новое Задание.
Задаем название задания, например BackUP1C – можно на русском, как вам удобно! Далее, наше задание будет состоять из нескольких шагов – сколько баз, столько и шагов будет у нас. Задаем имя шага, например “КопияБДБухгалтерии”, Выбираем тип скрипта, и далее вставляем сам скрипт:
Скрипт SQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
DECLARE @to varchar(100) DECLARE @dbname varchar(100) DECLARE @path varchar(400) --------------------------------- SET @dbname = 'bazebaze' SET @to = 'D:\backup\' --------------------------------- SET @path = @to + @dbname + '_' + cast(day(getdate()) as varchar(5)) + '.' + cast(month(getdate()) as varchar(5)) + '.' + cast(year(getdate()) as varchar(5)) + '-' + replace(cast(CONVERT(varchar(8), GETDATE(), 108) as varchar(8))+ + '.bak', ':', '.') BACKUP DATABASE @dbname TO DISK=@path WITH COPY_ONLY, NOFORMAT, INIT,COMPRESSION, NAME = @dbname, SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM |
Давайте разберем некоторые моменты:
1 |
SET @dbname = 'bazebaze' |
здесь мы устанавливаем имя базы данных и далее устанавливаем путь куда будем копировать наши полные резервные копии.
1 |
SET @to = 'D:\backup\' |
Далее присваиваем к имени файла имя базы и время создания бэкапа, за это отвечают следующие строки:
1 2 3 4 5 |
SET @path = @to + @dbname + '_' + cast(day(getdate()) as varchar(5)) + '.' + cast(month(getdate()) as varchar(5)) + '.' + cast(year(getdate()) as varchar(5)) + '-' + replace(cast(CONVERT(varchar(8), GETDATE(), 108) as varchar(8))+ + '.bak', ':', '.') |
Далее рассмотрим саму строку резервного копирования:
1 2 3 |
BACKUP DATABASE @dbname TO DISK=@path WITH COPY_ONLY, NOFORMAT, INIT,COMPRESSION, NAME = @dbname, SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM |
COPY_ONLY – параметр для копирования базы данных , а также создается резервная копия только для копирования для журнала транзакций
NOFORMAT — определяет, что при текущей операции резервного копирования существующие заголовки носителей и резервные наборы данных сохраняются на томах носителей, используемых для текущей операции резервного копирования. Это поведение по умолчанию.
COMPRESSION | NO_COMPRESSION — применяется только в SQL Server 2008 Enterprise и более поздних версиях; указывает необходимость сжатия резервной копии, переопределяя значение по умолчанию на уровне сервера. В нашем примере мы сжимаем копию.
NOREWIND и REWIND – параметры используются для магнитной ленты. Если у вас она не используется в качестве носителя, то параметры будут проигнорированы
STATS [ = percentage ] — этот параметр отвечает за отображение сообщения при каждом завершении очередного процента задания и позволяет отслеживать ход выполнения. Если процент не задан, то SQL Server выдает сообщение после каждых выполненных 10 процентов. Можете указать любой удобный для вас шаг.
CHECKSUM — указывает, что при операции резервного копирования выполняется проверка контрольной суммы и наличия разрывов на каждой странице (если эти проверки включены и доступны), а также будет создаваться контрольная сумма для всей резервной копии. Использование контрольных сумм резервных копий может повлиять на производительность рабочей нагрузки и пропускной способности резервного копирования. В тоже время параметр NO_CHECKSUM — явно отменяет создание контрольных сумм (и проверку контрольных сумм страниц) для резервных копий. Это поведение по умолчанию.
После вышеперечисленных шагов переходим в раздел “Дополнительно” и указываем действия которые будут происходить при успешном или аварийном завершении скрипта резервных копий. Так как у нас шагов несколько, чтобы процесс не прерывался, я рекомендую использовать продолжение сценариев даже при возникновении ошибки (переход к следующему шагу)
Вот как это выглядит на скриншоте:
При желании вы можете сохранить данные журнала в таблице.
В итоге у вас будет несколько шагов по количеству баз (обратите внимание на параметры поведения выполнения шагов скрипта “При успехе” и “При ошибке”):
Так же тут же можно указать начальный шаг, внизу формы.
После запуска задания на выходе (так как у нас 2 шага по резервному копированию двух баз) мы на выходе получим два файла:
Так же не забываем указать время выполнения:
и при необходимости дополнительные уведомления:
На этом в принципе всё. Диск Д, указанный в примере может быть у вас любым другим, как локальным так и сетевым. Если у вас этот диск локальный, то можно со временем скидывать все эти копии на любую другую сетевую папку. Для этого можно использовать подобный скрипт:
1 2 |
xcopy D:\backup\*.bak \\supercomp\baza$\ /V forfiles /P D:\backup\ /S /M *.bak /D -5 /c "cmd /c del /q /f @file" |
Мы копируем с помощью команды xcopy из папки backup с диска D в сетевую папку файлы с расширением *.bak на компьютер с эпичным названием supercomp 😂
Далее с помощью команды forfiles мы в папке /P D:\backup\ по маске /M *.bak удаляем файлы старше 5 дней /D -5 с помощью внешней команды /c “cmd /c del /q /f @file”
Этот скрипт можно поместить в cmd файл и добавить в планировщик заданий. На этом всё.
Для построения скриптов SQL всегда можно заглянуть в эту шпаргалку: https://docs.microsoft.com/ru-ru/sql/