Здравствуйте.
Нужно организовать еженедельное создание бэкапов. Вариантов вижу 2, первый - написать батник, копирующий или еще лучше архивирующий бд на внешний жд и добавить его в планировщик заданий, второй - использовать стороннюю программу.
Минус первого варианта в том что, если кто-то из пользователей забыл закрыть 1с, то бд не скопируется полностью, т.к будет занята другим процессом.
Кто какие программы используется, посоветуйте ?
Программа Effector Saver 3 осуществляет резервное копирование баз данных 1С:Предприятия, Microsoft SQL, PostgreSQL и других файлов. Архиватор баз 1С:Предприятия 7.7/8.x выполняет свою работу по расписанию и при необходимости может корректно завершить работу пользователей. Effector saver 3 тестирует и исправляет базы, делает любые команды и скрипты.
Основные характеристики:
Удобный и понятный интерфейс программы.
Встроенный планировщик для выполнения заданий.
Выбор настроек из перечня баз 1С:Предприятия 7.7/8.х.
Возможность настроить для 8.2 автоматический выбор последнего установленного релиза 1С: Предприятия
Ведение журнала о работе поставленных задач, автоматическое удаление устаревших записей в нем.
Отправка по электронной почте пользователю сводных отчетов о том, как выполняются задачи. Возможен ручной запуск, а также остановка пользователем выполнения той или иной задачи.
Автоматическое резервное копирование:
Архивов открытых файлов, которые доступны для чтения.
1С:Предприятия 7.7/8.х. при помощи штатных средств программы 1С:Предприятие.
1С:Предприятия 7.7/8.х. посредством метода архивирования баз данных PostgreSQL серверов и Microsoft SQL.
1С:Предприятия 7.7/8.х. посредством создания архивов файлов.
Баз данных PostgreSQL серверов, Microsoft SQL и других произвольных файлов.
Другие возможности:
Резервное копирование баз 1С на FTP сервер в автоматическом режиме.
Копирование архивов в автоматическом режиме в дополнительные каталоги.
Возможность автоматического запуска программы как сервиса NT или в качестве приложения.
Удаление устаревших файлов архивов.
Возможность поддержки формата Zip64 для файлов, объем которых больше 4 Gb.
Коммерческая версия программы Effector Saver 3:
Отключение пользователей в принудительном порядке перед тем, как включается архивирование.
Поддержка стойкого шифрования (AES) метода компрессии ZIP.
Запуск операций, которые выполняют обмен конфигураций 1С:Предприятия 8.х, и других произвольных процедур.
Возможность создания копий баз данных Microsoft SQL «лог транзакций» и «частично».
Выполнение команд системы, как перед началом выполнения задачи, так и после завершения.
Повтор выполнения задач на протяжении дня.
Под Win2008 использую скрипт на vbs, который запускается по шедулеру в нужное время (ночью) и льёт базу в архив (7z).
В случае неудачной попытки - шлёт письмо на почту.
P.S. В скрипте есть возможность удаления старых бэкапов. "Старость" бэкапов задается в скрипте, как и пути что архивировать и куда.
'Установка переменных
WhatToBackup = "D:\1CBases\Buhgalters_new\*"
BackupPath = "E:\BackUp\" ' символ "\" в конце обязателен.
ArchiveName = "1c_buh" ' наименование итогового файла с архивом
ArchiveParams = "-ssw -r -x!*.cdx -x!*.exe -x!*.zip -mx1" ' параметры для архиватора. Исключения, уровень сжатия и прочее
Threshold = 20 ' кол-во дней, после которых бэкапы будут удаляться.
mailGroup = "Ex.List.BackUpNotification" ' группа в AD, членам которой будут отсылаться сообщения этого скрипта.
'Создание необходимых объектов
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set ObjMessage = CreateObject("CDO.Message")
Set WshNetwork = CreateObject("WScript.Network")
' This section provides the configuration information for the remote SMTP server.
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "ваш почтовый сервер"
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.BodyPart.Charset = "windows-1251"
MonthArray = Array("January","February","March","April","May","June","July","August","September","October","November","December")
mailToString = ""
objMessage.Subject = "Backup Script Error"
objMessage.From = "Адрес@от_кого.отправлять"
' Пошла работа скрипта
sProgramFiles = WshShell.ExpandEnvironmentStrings("%programfiles%")
If FSO.FileExists (sProgramFiles & "\7-zip\7z.exe") = false then
Call getMailAddresses(mailGroup)
objMessage.To = mailToString
objMessage.TextBody = "На сервере " & WshNetwork.ComputerName & _
" не найден архиватор 7-Zip. Запуск бэкапа не возможен."
objMessage.Configuration.Fields.Update
objMessage.Send
Wscript.Quit
End If
If FSO.FolderExists (backupPath) = false Then
Call getMailAddresses(mailGroup)
objMessage.To = mailToString
objMessage.TextBody = "В скрипте для бэкапа " & Wscript.ScriptFullName & " на сервере " & _
WshNetwork.ComputerName & " целевой путь указан не верно. Он не существует."
objMessage.Configuration.Fields.Update
objMessage.Send
Wscript.Quit
End If
CurrentYear = Cint(Year(Date))
CurrentMonth = Cint(Month(Date))
CurrentDay = Cint(Day(Date))
Call IsYearFolderExists(CurrentYear) ' проверка на существование папки с годом.
Call IsMonthFolderExists(CurrentMonth) ' проверка на существование папки с месяцем
Call IsDayFolderExists(CurrentDay) ' проверка на существование папки с днем месяца
ResultFolder = Cstr(BackupPath & CurrentYear & "\" & MonthArray(CurrentMonth - 1) & "\" & CurrentDay & "\")
retCode = WshShell.Run ("""" & sProgramFiles & "\7-Zip\7z.exe" & """" & " a " & """" & ResultFolder & _
ArchiveName & """" & " " & ArchiveParams & " " & """" & WhatToBackup & """", 1, 1)
If retCode = "0" Then
'backup was successful
Call RemoveOldBackups(BackupPath) ' удаление старых бэкапов.
Else
Call getMailAddresses(mailGroup)
objMessage.To = mailToString
objMessage.TextBody = "На сервере " & WshNetwork.ComputerName & " процедура бэкапа " & _
Wscript.ScriptFullName & " закончилась ошибкой. Код возврата архиватора: " & retCode
objMessage.Configuration.Fields.Update
objMessage.Send
Wscript.Quit
End If
' Процедура проверки на наличие папки года.
Sub IsYearFolderExists(YearPrm)
If FSO.FolderExists(BackupPath & YearPrm) = True Then
' Folder Exists, do nothing
Else
FSO.CreateFolder Cstr(BackupPath & YearPrm)
End If
End Sub
' Процедура проверки на наличие папки месяца
Sub IsMonthFolderExists(MonthPrm)
If FSO.FolderExists(BackupPath & CurrentYear & "\" & MonthArray(MonthPrm - 1)) = True Then
' Folder Exists, do nothing
Else
FSO.CreateFolder Cstr(BackupPath & CurrentYear & "\" & MonthArray(MonthPrm - 1))
End If
End Sub
' Процедура проверки на наличие папки даты
Sub IsDayFolderExists(DayPrm)
If FSO.FolderExists(BackupPath & CurrentYear & "\" & MonthArray(CurrentMonth - 1) & "\" & DayPrm) = True Then
' Folder Exists, do nothing
Else
FSO.CreateFolder Cstr(BackupPath & CurrentYear & "\" & MonthArray(CurrentMonth - 1) & "\" & DayPrm)
End If
End Sub
' Процедура удаления старых бэкапов.
Sub RemoveOldBackups(rootPath)
Dim Folder, element, currDate, foldCrDate, dateDifference
currDate = Date
Set Folder = FSO.GetFolder(rootPath)
If Folder.SubFolders.Count > 0 Then 'есть подпапки
For Each element in Folder.SubFolders
Call RemoveOldBackups(element.Path)
Next
Else
foldCrDate = DateValue(Folder.DateCreated)
dateDifference = DateDiff("d", foldCrDate, currDate) 'разница в днях между сегодня и созданием папки
If dateDifference > Threshold Then
Folder.Delete(1)
End If
End If
End Sub
Sub getMailAddresses (groupName2) ' procedure will get mail addresses from group members and add them to mailToString variable
Dim objGroup
Set objGroup = GetObject(getGroupDN(groupName2))
For each objMember in objGroup.Members
If objMember.class = "user" and objMember.Mail <> "" Then
mailToString = mailToString & objMember.Mail & ";"
ElseIf objMember.class = "group" Then
Call getMailAddresses (objMember.CN)
End If
Next
End Sub
Function getGroupDN (groupName1) ' function will return DN of a given group
Dim rootDSE, domainContainer, conn, rs1, ldapStrUsers, foundObject
Set rootDSE=GetObject("LDAP://RootDSE")
domainContainer = rootDSE.Get("defaultNamingContext")
Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open "ADs Provider"
ldapStrUsers = "<GC://" & domainContainer & ">;(&(&(& (cn=" & groupName1 & _
") (| (&(objectCategory=*)(objectClass=*)) ))));adspath;subtree"
Set rs1 = conn.Execute(ldapStrUsers)
While Not rs1.EOF
Set foundObject = GetObject (rs1.Fields(0).Value)
getGroupDN = "LDAP://" & foundObject.distinguishedName
rs1.MoveNext
Wend
End Function
(1) kramcd, я написал батник, который запускается 1 раз в день при включении комп и выгружает базу. настроил так, чтобы хранились копии только за неделю. можно еще сделать так, чтобы батник сначала убивал все процессы 1с (на случай если кто то сидит в программе). Нужно подробнее - обращайся!))
тоже предпочитаю effector saver. на файловых вариантах отрабатывает быстро и здорово. пользователи понимают настройку с пол-пинка. удобно и есть бесплатная лицензия. обычно на маленьких базах учу так: пришли, включили комп, пошли ставить чайник, а программа уже сделала архивную копию. можно работать спокойно
Effector saver - дешево и сердито. В смысле удобно и можно всем клиентам ставить т.к. для коммерческого использования бесплатно, работает давно и без сбоев. Минус - при копировании базы на живую могут какие нибудь косяки вылезти. Поэтому надо комбинировать батник (выгнать всех пользователей) + бэкап файловой базы. Иначе целостность будет под вопросом.
Архивация баз данных в 1С Предприятие 8.х файловый + sql вариант
Доброе время суток)! Архивация баз данных 1С 8.х файловый вариант), отличается от архивации sql баз 1с только одной строкой.
А предпочитаю сжимать файл архиватором 7z. Для этого создайте папку 1c_arhive_bat, скопируйте файлы из папки установленного
архиватора 7z: 7z.dll,7z.exe. Далее в папке 1c_arhive_bat создайте текстовый файл с кодом, пример ниже.
Скрипт файлового варианта
copy G:\1Cv8_database\kamin8\1Cv8.1CD G:\1Cv8_database\Arhive\KaminZP3\
7z a -t7z G:\1Cv8_database\Arhive\KaminZP3\Kamin8_%date%.7z G:\1Cv8_database\kamin8\1Cv8.1CD
del G:\1Cv8_database\Arhive\KaminZP3\1Cv8.1CD
Копирую, базу данных в папку с где лежат архивные копии бд. Далее запускаем архиватор сжимаем файл и получаем название архива
для дата. Далее удаляем файл 1Cv8.1CD.
Жесткие или платные решения.
Я базу держу в MS SQL и резервирую штатным SQL Agentom по расписанию командой BACKUP DB
Бэкапится даже при открытых соединениях к базе
Удалять файлы совсем не сложно, так что можете взять за привычку, скажем, по понедельникам, освобождать место для новых бэкапов. Хотя лично я переношу все на болванки и отношу в архив. Так спокойнее.
Я вижу тут разделение задачи на 2 большие "ветки":
1. Получение выгрузки базы (dt файла) который можно относительно просто восстановить в любую другую базу при необходимости.
2. Получение слепка (бэкапа) не из 1с, а напрямую с БД. Основной минус в том, что восстанавливать такой бэкап нужно на сервере (не потерять настройки сервера).
Для пункта 1 основная проблема в пользователях (и фоновых заданиях). Получить выгрузку из базы можно только монопольно, а значит нужно принудительно отключить всех пользователей от базы. Потом могут быть скандалы, жалобы на потери данных, прерванные групповые перепроведения, потерянные настройки и т.п. Ещё могу быть случаи когда сеансы подвисают на сервере, и не "выгоняются" совсем.
Зато при хорошо налаженной выгрузке всегда есть готовый и легко разворачиваемый актуальный dt файл. В принципе можно усложнить эту систему и настроить поверх инкрементальный бэкап на базе выгрузок (но это усложнит систему и систему создания и систему восстановления, зато место экономиться).
По моему мнению пункт 2 (бэкап сервера БД) удобнее и надёжнее, особенно для больших баз. Во-первых делать его можно в любое время и не требуется "выбрасывать" пользователей (они этого даже не замечают). Также плюсом является то, что современные СУБД имеют в своём составе довольно удобную и надёжную систему создания резервных копий (разрабатываемую и тестируемую годами). Также плюсом является тот факт, что резервные копии баз делают не только те, кто связан с 1с, а значит на просторах интернета можно найти множество различных вариантов решения задачи, и выбрать наиболее подходящую.
К тому же эту задачу можно переложить на плечи Админов (если таковые предусмотрены в штате).
Единственный минус - это то, что восстанавливать базу из резервной копии нужно в аналогичную и на аналогичной СУБД (просто так перекинуть файлик на другой сервер не получится). С другой стороны при необходимости можно настроить связку автоматических операций: выгрузка бэкапа рабочей базы > загрузка этого бэкапа в специально созданную базу-копию (для тех. целей) > выгрузка базы 1с в виде dt файла и получать за немного большее время желаемый файл выгрузки без особых проблем.
Для тех кто не хочет заморачиваться с bat файлами есть вариант с программой The Copier (http://thecopier.narod.ru/). Это маленькая утилита от нашего соотечественника, которая выполняет резервное архивирование любых папок. Автор с удовольствием общается по электронке. Поддерживает архивы более 4Гб Работает достаточно быстро. Нет проблем с рускими именами файлов. Может выключить компьютер, отправить отчет на почту, либо выполнить внешнюю программу.
У меня эта утилита каждую пятницу архивирует базу с сетевого диска, высылает отчет на почту и выключает мой компьютер.
В понедельник я просматриваю почту с отчетом и сразу вспоминаю что надо бы бекапы переписать на диск))) Правда делаю это только в начале месяца. После записи на диск удаляю те архивы которые записывал на диск в последний раз. Фактически я имею еженедельные бекапы на дисках + архивы за истекший месяц на винте еще + еженедельные архивы текущего месяца у себя на винте только.
Правда к этому варианту есть еще ежедневное резервирование всей сетевой шары на втором сервере (Ubuntu+Samba+Rsync), но это отдельный разговор.
В Win2008R2 и файловом варианте использую стандартную "систему архивации данных Windows Server", сбрасываю ночью целиком диск C на том, подключеный с внешнего хралища по iSCSI.
Вообще эта утилита в Win2008R2 приятно удивила:
- настраивается элементарно
- вcтроенный планировщик
- работает очень быстро
- никаких конфликтов
- экономичная - пишутся только изменения тома
- сама удаляет старые версии, когда заканчивается место в архиве
Этим же средством время от времени целевой архивный том копирую на подключаемый USB диск.
Cobian Backup - бесплатная утилита предназначенная для резервного копирования файлов и папок, которые часто изменяются. Программа может создавать копии заданных элементов в автоматическом режиме по заданному расписанию.
Cobian Backup может сохранять копии объектов не только на вашем компьютере, но и в локальной сети, на FTP-сервере. При создании резервных копий используется интегрированный zip-архиватор.
Посмотрел Cobian Backup - по жалуй наиболее подходящий набор функций для файлововго бэкапа среди бесплатных и недорогих утилит, с которыми я сталкивался (APBACKUP, SyncBackPro):
1. Множественные источники в задании
2. Множественные получатели в задании (включая FTP)
3. Дифференциальный и инкрементативный режим в сочетании с периодическими полными копиями.
4. Режим теневого копирования.
5. Удаление старых файлов в архиве.
6. Встроенные планировшик и архиватор.
7. Запуск в режиме сервиса.