Резервное копирование баз 1С

Исходные данные: имеются несколько баз 1С, часть из них файловые, часть — SQL. Согласно правил резервного копирования в организации все резервные копии лежат на отдельном файловом сервере. Ниже приведен скрипт, который создает backup баз и скидывает на smb-ресурс в сети.

mkdir c:\windows\backup\tmp
cd c:\windows\backup\tmp
time /T >> backup.log
date /T >> backup.log
echo "Start SQL" >> backup.log
sqlcmd -S SQL\SQL -i c:\windows\backup\sql_backup.sql >> backup.log
time /T >> backup.log
date /T >> backup.log
echo "STOP SQL" >> backup.log
time /T >> backup.log
date /T >> backup.log
echo "Start SQL-ZIP" >> backup.log
c:\windows\backup\7-Zip\7z a buh.bak.zip c:\windows\backup\tmp\buh.bak >> backup.log

del *.bak /F /Q
time /T >> backup.log
date /T >> backup.log
echo "STOP SQL-ZIP" >> backup.log
time /T >> backup.log
date /T >> backup.log
echo "START FILE-ZIP" >> backup.log
c:\windows\backup\7-Zip\7z a fbases.zip C:\1CBAZS >> backup.log

time /T >> backup.log
date /T >> backup.log
echo "STOP FILE-ZIP" >> backup.log
time /T >> backup.log
date /T >> backup.log
echo "START FILE-TRANSFER look copy.log" >> backup.log
c:\windows\backup\7-Zip\7z a backup.log.zip  c:\windows\backup\tmp\backup.log
del *.log /F /Q
net use m: /delete >> c:\windows\backup\net.log
net use m:  \\backup\back /persistent:yes >> c:\windows\backup\net.log
MD m:\%date:~-10% >> c:\windows\backup\net.log
MD m:\%date:~-10%\1C >> c:\windows\backup\net.log
time /T >> m:\%date:~-10%\1C\copy.log
date /T >> m:\%date:~-10%\1C\copy.log
echo "Start Transfer...copy" >> m:\%date:~-10%\1C\copy.log
copy *.* m:\%date:~-10%\1C\ >> m:\%date:~-10%\1C\copy.log
time /T >> m:\%date:~-10%\1C\copy.log
date /T >> m:\%date:~-10%\1C\copy.log
echo "STOP Transfer...copy" >> m:\%date:~-10%\1C\copy.log
echo "ok" >> m:\ok.txt
net use m: /delete >> c:\windows\backup\net.log
del c:\windows\backup\tmp\*.* /F /Q >> c:\windows\backup\net.log
cd c:\windows\backup >> c:\windows\backup\net.log
rmdir c:\windows\backup\tmp >> c:\windows\backup\net.log

и

BACKUP DATABASE [buh] TO  DISK = N'c:\windows\backup\tmp\buh.bak' WITH NOFORMAT, NOINIT,  NAME = N'buh-Полная База данных Резервное копирование', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Немного пояснений. Основной скрипт backup.cmd делает следующее:

Создает временные папки для бэкапов, затем при помощи SQL-запроса делает выгрузку базы данных. Бэкап SQL-базы ужимается при помощи 7-zip.
Далее вся папка с файловыми базами ужимается тем-же 7-zip. После завершения архивирования подключается сетевой диск к шаре сервера хранения резервных копий и записываются туда все созданные файлы, с предварительной подготовкой места хранения (создание папки с текущей датой и папкой обозначения, что там лежат базы 1С).
После завершения копирования делается запись в файл ok.txt, для того, чтобы внутренние скрипты хранилища копий были в курсе того, что перенос файлов с одного сервера на другой завершен. Далее скрипт уничтожает временные папки и файлы и отключает сетевой диск.
Скрипт backup.cmd помещен в Планировщик задач и выполняется ежедневно в одно и то же время (02.00).

Update 06.04.2015:

Т.к. MS SQL сервер умеет сам сжимать выгрузку с помощью параметра COMPRESSION, то можно модифицировать скрипты следующим образом:

mkdir c:\windows\backup\tmp
cd c:\windows\backup\tmp
time /T >> backup.log
date /T >> backup.log
echo "Start SQL" >> backup.log
sqlcmd -S SQL\SQL -i c:\windows\backup\sql_backup.sql >> backup.log
time /T >> backup.log
date /T >> backup.log
echo "STOP SQL" >> backup.log
time /T >> backup.log
date /T >> backup.log

time /T >> backup.log
date /T >> backup.log
echo "START FILE-ZIP" >> backup.log
c:\windows\backup\7-Zip\7z a fbases.zip C:\1CBAZS >> backup.log
time /T >> backup.log
date /T >> backup.log
echo "STOP FILE-ZIP" >> backup.log

time /T >> backup.log
date /T >> backup.log
echo "START FILE-TRANSFER look copy.log" >> backup.log
c:\windows\backup\7-Zip\7z a backup.log.zip  c:\windows\backup\tmp\backup.log
del *.log /F /Q
net use m: /delete >> c:\windows\backup\net.log
net use m:  \\backup\back /persistent:yes >> c:\windows\backup\net.log
MD m:\%date:~-10% >> c:\windows\backup\net.log
MD m:\%date:~-10%\1C >> c:\windows\backup\net.log
time /T >> m:\%date:~-10%\1C\copy.log
date /T >> m:\%date:~-10%\1C\copy.log
echo "Start Transfer...copy" >> m:\%date:~-10%\1C\copy.log
copy *.* m:\%date:~-10%\1C\ >> m:\%date:~-10%\1C\copy.log
time /T >> m:\%date:~-10%\1C\copy.log
date /T >> m:\%date:~-10%\1C\copy.log
echo "STOP Transfer...copy" >> m:\%date:~-10%\1C\copy.log
echo "ok" >> m:\ok.txt
net use m: /delete >> c:\windows\backup\net.log
del c:\windows\backup\tmp\*.* /F /Q >> c:\windows\backup\net.log
cd c:\windows\backup >> c:\windows\backup\net.log
rmdir c:\windows\backup\tmp >> c:\windows\backup\net.log

и

BACKUP DATABASE [buh] TO  DISK = N'c:\windows\backup\tmp\buh.bak' WITH NOFORMAT, NOINIT, COMPRESSION,  NAME = N'buh-Полная База данных Резервное копирование', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
comments powered by HyperComments