Для ежедневных работ по архивации баз данных 1С Предприятия в файловом варианте я использую программу Handy Backup.
Бесплатный аналог в скрипте можно брать здесь >>
Конечно, данная тема также подымается и на курсе: Администратор 1С!
Программка конечно удобная, но это все же сторонний софт, который приходится ставить на сервер. И такое решение конечно подходит, к сожалению не всем и не всегда.
Альтернативой всегда были батники (скрипты), которые пользователи в основном запускают либо руками, когда требуется создать резервную копию базы, или, зарядив скрипт в «планировщик заданий windows», который по расписанию запускает уже эти скрипты.
Фирма 1С рекомендует создавать резервную копию файловой базы путем копирования файлов базы.
И хоть на практике бэкап сделанный выгрузкой в *dt (на малых файловых базах) меня еще не подводил, но тем не менее существует небольшой риск что Вы из такого бэкапа можете не восстановить потом базу 1С. (Так пишет 1С).
Что ж, игнорировать это предупреждение нет смысла, так как есть, конечно, простые способы правильно «забэкапить» файловую базу, как программой, так и скриптом.
Собственно в этой статье я расскажу и поделюсь скриптами, что делают бэкапы путем копирования файлов.
(Что касается софта, который делает резервное копирование баз, так на блоге уже есть хорошая статья на эту тему, вот здесь можете почитать).
О скриптах…
Друзья, ниже Вы сможете скачать несколько скриптов, которые я иногда использую для создания бэкапов. (Если Вы уже пользуетесь подобными скриптами, тогда большая просьба опубликовать их в комментариях под статьей, и я и многие другие пользователи будут Вам благодарны!).
И так первый скрипт это VBS.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Option Explicit Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim MySource, MyTarget, MyZipName, MyHex, MyBinary, i Dim oShell, oApp, oFolder, oCTF, oFile Dim oFileSys MySource = "C:\Users\AdminKuhar\Documents\1C\DemoTrade\" MyTarget = "E:\DemoTrade.zip" MyHex = Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) For i = 0 To UBound(MyHex) MyBinary = MyBinary & Chr(MyHex(i)) Next Set oShell = CreateObject("WScript.Shell") Set oFileSys = CreateObject("Scripting.FileSystemObject") Set oCTF = oFileSys.CreateTextFile(MyTarget, True) oCTF.Write MyBinary oCTF.Close Set oCTF = Nothing Set oApp = CreateObject("Shell.Application") Set oFolder = oApp.NameSpace(MySource) If Not oFolder Is Nothing Then oApp.NameSpace(MyTarget).CopyHere oFolder.Items End If wScript.Sleep(5000) Set oFile = Nothing On Error Resume Next Do While (oFile Is Nothing) Set oFile = oFileSys.OpenTextFile(MyTarget, ForAppending, False) If Err.number <> 0 then Err.Clear wScript.Sleep 3000 End If Loop Set oFile=Nothing Set oFileSys=Nothing |
Он быстро упакует Вашу файловую базу 1С в *zip архив и создаст его на диске что Вы укажете.
Работает быстро и просто.
Из настроек, что нужно сделать:
MySource = “C:\Users\AdminKuhar\Documents\1C\DemoTrade\” -Каталог с базой 1С.
MyTarget = “E:\DemoTrade.zip” -Куда поместить «бэкап».
Во втором варианте мы используем *bat файл который выполнит «бэкап» нашей базы в нужное место и упакует его в *rar архив.
1 2 3 4 5 6 7 8 |
@echo off REM chcp 1251 copy C:\Users\AdminKuhar\Documents\1C\DemoTradeEntr\1Cv8.1CD C:\1Cv8.1CD set hour=%time:~0,2% if %hour% lss 10 set hour=0%time:~1,1% set namefiles=%date:~8,2%%date:~3,2%%date:~0,2%%hour%%time:~3,2%%time:~6,2% C:\Progra~1\WinRAR\RAR.exe m -m5 E:\Arhiv\%namefiles%.rar C:\1Cv8.1CD copy E:\Arhiv\%namefiles%.rar \\freenas\backup\%namefiles%.rar |
Особенность скрипта в том что во первых он копирует только сам файл 1Cv8.1CD (без логов и прочего, другими словами делает «бэкап» довольно быстро и с отображением прогресса выполнения работы + дает понятное имя архиву в виде текущий даты).
Конечно, здесь требуется архиватор WinRAR.
Настройки также предельно простые, нужно лишь указать, что и куда копируем.
И вот еще один вариант бэкапа.
Этот способ нравиться мне больше всего, так как работает очень быстро и что главное безопасно! (очень надежный).
1 |
"C:\Program Files\7-Zip\7z.exe" u -ssw -mx0 -mmt2 -ms=off -r E:\Arhiv\m_backup.7z @"E:\Arhiv\listbackup.txt" >> E:\Arhiv\m_backup_%date%.log |
Им можно «забэкапить» сразу все нужные базы.
Вместе с «бэкапом» создается подробный лог файл,
Так Вы точно будете знать, если что-то пошло не так при его создании!
Чтоб скрипт заработал у Вас:
1. В том месте откуда Вы будете его запускать нужно создать файлик простой текстовый (listbackup.txt), и в него поместить адреса (указать пути к папкам с базами 1С).
1 |
listbackup.txt |
2. Нужно установить архиватор 7Zip.
Кстати вот расшифровка параметров:
u — Обновление файлов в архиве. Если файла нет, создает новый.
-ssw — Включить файл в архив, даже если он в данный момент используется. Для резервного копирования очень полезный ключ.
-mx0 —Не используем сжатие (Для скорости создания бэкапа!).
-mmt2 — использовать два потока (пригодится при обновлении архива).
-ms=off — по дефолту создаются solid-архивы. отключаем ибо они работают медленнее. возможно, для mx0 — некритично, но для mx1 и т.д. — оптимальнее.
-r — рекурсивно обрабатывать поддиректории.
e:\Backup_Base1S.7z — результирующий файл архива.
@«e:\listbackup.txt» — (файл в UTF8 нужно сохранить) с папками, которые следует “забэкапить”.
>> e:\m_backup_%date%.log — все (удачные и неудачные) результаты пишем в лог с датой.
Абсолютно все скрипты можно модернизировать, например написать команду для “выгона” пользователей из базы 1С.
(Тот же TASKKILL и другие.)
Внимание!
Последний скрипт для “бэкапа” баз 1С, может создавать резервную копию даже если в базе 1С работают пользователи, НО это не значит что такой “бэкап” считается хорошим.
Всегда нужно предварительно завершить работу пользователей и только потом делать копию!
Если Вы хотите больше узнать о технической стороне 1С, тогда регистрируйтесь на первый бесплатный модуль курса: Администратор 1С >>>
Спасибо большое за статью. Как раз сейчас стоит такая задача. Но файлы архивных копий нужно сохранять на ftp ресурсе. Подойдут ли эти скрипты для такой задачи или какие изменения нужно внести в скрипт, чтобы сохранение бэкапов (архивов) производилось на ftp ресур? Скорость записи на ресурс весьма низкая и результат не всегда предсказуем – бывают срыв сеанса записи. Возможно даже лучше сохранять сначала на локальный диск, а потом перемещать на ресурс с возможностью повторного копирования, при сбое.
Здравствуйте, Юрий. Для такой задачи (Отправка на FTP) лучше всего подойдет программа Handy Backup. (Надежнее).
Здравствуйте, Богдан.
Спасибо за совет.
6 октября 2017 г., 10:38 пользователь Disqus написал:
chcp 1251
@echo off
set day=%DATE:~0,2%
set month=%DATE:~3,2%
set year=%DATE:~6,4%
if exist G:timearhProgi_01*.rar del G:timearhProgi_01*.rar
“E:ProgProbWinRarWinRAR.exe” a -r -m5 G:timearhProgi_01_%year%-%month%-%day%.rar E:Progi
if exist G:arhivProgi_03*.rar del G:arhivProgi_03*.rar
if exist G:arhivProgi_02*.rar ren G:arhivProgi_02*.rar Progi_03.rar
if exist G:arhivProgi_01*.rar ren G:arhivProgi_01*.rar Progi_02.rar
xcopy G:timearhProgi_01_*.rar G:arhiv
Батник закинуть в планировщик, для запуска по расписанию
Создает в папке “arhiv” – архив нужного файла.
Хранит последние 3 архива. ( **_01, **_02, **_03)
При создании четвертого, удаляет самый старый (***_03).
(Можно настроить на хранение сколько угодно архивов.)
Создает копию, в папке “timearh” крайнего по времени создания архива (**_01)
E:ProgProbWinRarWinRAR.exe — путь к архиватору
E:Progi – папка. которую архивируем.
G:arhiv – папка на нужном диске для хранения архивов
G:timearh – папка для хранения копии крайне созданного архива.
Progi_ – имя под которым создаем архив.
Все пути (папки) англ буквы!
Отлично!
Не знаю как тут относятся, но для работы с базами, особенно что касается бэкапов и обновления, втч облачных – не видел пока ничего лучше “Обновлятора 1с”. Может быть автор сайта пропустил этот продукт, может сознательно игнорирует. Но простому человекупрограммистуразработчику, можно поставить обновлятор и забыть Handy или другие утилиты + кучи скриптов как страшный сон.
Джонни, я рекомендую программу Handy так как ее использую уже очень давно (работает замечательно).Но Вы вправе рекомендовать то что Вам больше по душе.
Я сам когда то пытался использовать бесплатную (с поддержкой Я.Диска) и платную версию Handy, но столкнулся с несколькими глюками при работе программы в режиме службы + когда администратор не один а двое. Также недостаточно гибкие возможности настроить глубину хранения ( количество дневных, недельных, месячных, квартальных, годовых) копий, отдельно настроить глубину для облачного хранения. Ну и естественно, не умеет автоматически бэкапить базы перед обновлениями, опасными операциями и тд. Но как я понял, вы для вышеперечисленного используете свой продукт в связке с Handy. Наверное, тоже вполне рабочее решение.
Основных возможностей Handy хватит большинству пользователей. Один администратор должен отвечать за бэкапы (в основном). Создаете учетку с нужными правами, под ней и работает Handy. Обновлениями в 1С в первую очередь должен заниматься программист 1С (админ редко). Обновлятор вещь больше для разработчика. Handy бэкапит не только 1С (Часто бэкапить нужно много всего вместе – например те же базы MySQL). Универсальное решение.
Обновлятор прекрасен. Кроме шуток, очень хорошо сделан и каждая настройка разжёвана прям в контекстной справке.
Мне кроме архивации баз нужно было ещё кое-что делать, поэтому я продолжаю использовать скрипты на PowerShell.
Но для большинства людей Обновлятор – лучшее решение. Разумеется, если купить полную версию (за совершенно условные деньги, надо сказать).
Вещь не плохая, но как я уже писал ниже не универсально к сожалению (
Еженощно:
#Подгрузим переменные
. C:UsersАдминистраторDocumentsScriptsПеременные.ps1
#Остановим службу Сбербанк Бизнес Онл@йн
#Stop-Service -Name SberBank_BO
#Очистим очередь печати
Stop-Service -Name Spooler -Force
Remove-Item c:WindowsSystem32spoolPRINTERS*
Start-Service -Name Spooler
#Удаляем старые файлы в рабочих папках
#Создадим список путей, где нужно удалить файлы
[string[]]$TempDir = $(resolve-path C:Users*AppDataLocalTemp) + “C:UsersPublicDocumentsScanfiles”
#Удалим все файлы старше семи дней
foreach ($elm in $TempDir) { Get-ChildItem $elm -recurse | Where-Object { $_.LastWriteTime -lt $(Get-Date).AddDays(-7) } | Remove-Item -recurse -force}
#Удаляем архивы старше одного месяца
$include = @(‘1CBases-*.7z’,’Docs-*.7z’,’CommonDocs-*.7z’)
Get-ChildItem “$BackUp*” -recurse -Include $include | Where-Object { $_.LastWriteTime -lt $(Get-Date).AddDays(-30) } | Remove-Item
#Перемещаем архивы SPU_ORB
#move-item -path “C:Program Files (x86)Spu_orbARHIV*” -destination $BackUp
#Архивируем базы 1С, за исключением файлов, указаных в exclud_1C.txt
$ArchName = “1CBases-$(get-date -uformat %d-%m-%Y).7z”
&7Zip a “$BackUp$ArchName” $Param
-xr@
“c:Program Files7-Zipexclud_1C.txt"
-p$Password “$1CBases*”#Архивируем файлы находящиеся в личных документах и на рабочих столах пользователей
#Создадим список файлов, изменённых за последние сутки
$AddArch = foreach ($element in $(resolve-path “C:Users*Documents”, “C:Users*Desktop”)) {Get-ChildItem $element* -recurse -include $Filetype | Where-Object {$_.LastWriteTime -gt $(Get-Date).AddDays(-1)}}
Out-File -FilePath $SourcePath -encoding UTF8 -InputObject $(foreach ($element in $AddArch) {$element.fullname -replace “C:\Users\”})
#Задаём команды архиватору
$ArchName = “Docs-$(get-date -uformat %d-%m-%Y).7z”
Set-Location C:Users
&7Zip a “$BackUp$ArchName” -mx9 -mhe
-p$Password
@$SourcePathRemove-Item $SourcePath
#Архивируем общие документы
#Создадим список файлов, изменённых за последние сутки
$AddArch = $(Get-ChildItem $CommonDocs* -recurse -include $Filetype | Where-Object {$_.LastWriteTime -gt $(Get-Date).AddDays(-1)})
Out-File -FilePath $SourcePath -encoding UTF8 -InputObject $(foreach ($element in $AddArch) {$element.fullname -replace “C:\Users\Public\Documents\”})
#Задаём команды архиватору
$ArchName = “CommonDocs-$(get-date -uformat %d-%m-%Y).7z”
Set-Location $CommonDocs
&7Zip a “$BackUp$ArchName” -mx9 -mhe
-p$Password
@$SourcePathRemove-Item $SourcePath
Спасибо, Владимир.
Файл “Еженощно.ps1”
#Подгрузим переменные
. C:UsersАдминистраторDocumentsScriptsПеременные.ps1
#Архивируем базы 1С, за исключением файлов, указаных в exclud_1Cm.txt
$ArchName = “1CBasesFull-$(get-date -uformat %d-%m-%Y).7z”
&7Zip a “$BackUp$ArchName” $Param
-xr@
“c:Program Files7-Zipexclud_1Cm.txt"
-p$Password “$1CBases*”#Архивируем все файлы пользователей
$AddArch = foreach ($element in $(resolve-path “C:Users*Documents”, “C:Users*Desktop”)) {Get-ChildItem $element* -recurse -include $Filetype}
Out-File -FilePath $SourcePath -encoding UTF8 -InputObject $(foreach ($element in $AddArch) {$element.fullname -replace “C:\Users\”})
#Задаём команды архиватору
$ArchName = “DocsFull-$(get-date -uformat %d-%m-%Y).7z”
Set-Location C:Users
&7Zip a “$BackUp$ArchName” $Param
-p$Password
@$SourcePathRemove-Item $SourcePath
#Архивируем все общие документы
$AddArch = $(Get-ChildItem $CommonDocs* -recurse -include $Filetype)
Out-File -FilePath $SourcePath -encoding UTF8 -InputObject $(foreach ($element in $AddArch) {$element.fullname -replace “C:\Users\Public\Documents\”})
#Задаём команды архиватору
$ArchName = “CommonDocsFull-$(get-date -uformat %d-%m-%Y).7z”
Set-Location $CommonDocs
&7Zip a “$BackUp$ArchName” $Param
-p$Password
@$SourcePathRemove-Item $SourcePath
#Архивируем ключи подписей
$ArchName = “KeyDisk-$(get-date -uformat %d-%m-%Y).7z”
Set-Location Z:
&7Zip a “$BackUp$ArchName” $Param `-p$Password * -r
Файл “Переменные.ps1”
#Задаём сквозные переменные
set-alias 7Zip “$env:ProgramFiles7-Zip7z.exe”
$Password = “Мой невероятный пароль” #Этот пароль используем для всех архивов
$Filetype = “*.xls*”,”*.doc*”,”*.od*”,”*.rtf”,”*.txt”,”*.xml”,”*.jpg”,”*.tif*”,”*.pdf”,”*.png”,”*.lnk”
$Param = “-slp”,”-ms=2g”,”-mx=9″,”-mhe”,”-m0=LZMA2:d=64m:fb=64″,”-mmt=8″,”-v9g” #Параметры архиватора для больших объёмов
$BackUp = “C:UsersАдминистратор.WIN-AUTKLLF494MYandexDiskFirmaNameСервер”
$CommonDocs = “C:UsersPublicDocuments”
$1CBases = “C:UsersPublic1CBases”
$SourcePath = “C:UsersАдминистраторDocumentsaddarch.txt”
Раньше я отправлял файлы в хранилку по FTP. Сейчас (как видно из остальных скриптов) сохраняю в папку Яндрес.Диска – они сами улетают в облако. Гораздо удобней и надёжнее.
Тем не менее кому-то может пригодиться:
Файл “FTP.ps1”
#Отправляем файлы по FTP в укромное место
#Создаём список файлов, подлежащих отправке
$CopyList = Get-ChildItem E:BackUp* | Where-Object { $_.LastWriteTime -gt $(Get-Date).AddHours(-12) } | foreach {Write-Output “send $_”}
#Готовим коммандный файл для FTP
$FTPCommand = “open 77.55.55.55”, “name”, “password”, “binary”
$FTPTrans = $FTPCommand + $CopyList + “bye”
Out-File -FilePath C:TempFTPTrans.txt -encoding ASCII -InputObject $FTPTrans
#Запусткаем ftp с указанием коммандного файла
&c:WindowsSystem32ftp.exe -s:C:TempFTPTrans.txt
Remove-Item C:TempFTPTrans.txt
Спасибо, Владимир, что поделились своими скриптами!
Файлы exclud_*.txt поместить в каталог “c:Program Files7-Zip”
exclud_1C.txt
*.cdx
*.zip
*.rar
*ExtDb*
*ExtForms*
*NewStructure*
*SYSLOG*
exclud_1Cm.txt
*.cdx
*.zip
*.rar
*ExtDb*
exclud_CommonDrv.txt
*.mp3
*.wav
*.avi
*.mpg
*.mpeg
Все о технической стороне 1С можно узнать на этом курсе: (Сейчас со скидкой 35%).
https://a.kuharbogdan.com/
Надо CobainBackUP использовать, а скрипты писать на OneScript
Да, Cobian неплохая программа (а скрипты можно писать на чем угодно).
писать то можно на чем угодно, если это будет работать где угодно. Под линуксом не запустится без танцев с бубном. И как минимум надо знать что-то кроме языка 1с, видимо работодатель будет оплачивать получение этих знаний.
Главное чтоб работало хорошо, это главное.
https://uploads.disquscdn.com/images/1bbb8722d6c6256c05cfae4389faae09f805dc18bfa4a014517ff80ed2c86d0d.jpg
Крошка сын к отцу пришёл, и спросила кроха: — Что такое хорошо и что такое плохо? — У меня секретов нет, — слушайте, детишки, — папы этого ответ помещаю в книжке.
🙂
(А вот чтоб меньше болела голова) — administrator1c.kuharbogdan.com
@echo off
set Today=%DATE%
Set cfg=C:Program Files (x86)1cv8common1cestart.exe
set baseway=D:1CR_WORK_JTI_ACC
set keyway=F
set user=
set pass=
set archivname=D:1Carchiv
set basename=
“%cfg%” CONFIG /%keyway%”%baseway%”/N %user% /P %pass% /DumpIB “%archivname%/%basename%_%Today%.dt”
Архивирование на ubuntu сервере в облако на yandex.disk.
Предварительно устанавливаем клиента yandex.disk на ubuntu c дистрибутива https://yandex.ru/support/disk/cli-clients.html
Далее собственно скрипт, который запускается через cron ночью, получая циклический недельный архив.
#архивируем файл *.1CD в имя пишем номер дня недели в отдельный каталог на сервере.
tar -czPf /backup/buh/
date '+%u'
_buh_1Cv8.1CD.tgz /database/buh/1Cv8.1CD#копируем в каталог синхронизации яндекс диска
cp /logs/backup/buh/
date '+%u'
_buh_1Cv8.1CD.tgz /data/backup_on_yandex#запускаем процесс синхронизации
yandex-disk sync