Исходные данные: имеются несколько баз 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 GOcomments powered by HyperComments