Скрипт архивации файловых баз 1c8 на лету

17.04.12

База данных - Архивирование (backup)

Скрипт написан на языке VBS. Используется на компьютерах, где пользователи не обладают достаточной квалификацией для архивирования и компьютеры не работают по ночам, когда можно было бы запускать архивацию.  На практике использовалась на розничных точках в маленьких магазинах.
База архивируется обычным копированием, на лету. Скрипт нужно прописать в планировщик.
Продумана система разумного оставления некоторого количества предыдущих копий.

Скачать файлы

Наименование Файл Версия Размер
Тот же алгоритм, что и в статье, но файлом.
.vbs 5,23Kb
78
.vbs 5,23Kb 78 Скачать

Параметры

Параметры указываются в

DaysForStore – количество дневных архивов

ArcHEvery  – с какой периодичностью запускать архивацию баз

IsCompessing – сжимать ли скопированный файл или оставлять как есть.

Особенности работы

Скрипт нужно разместить в каталоге базы.

Скрипт создает архивы в подкаталоге ARC в каталоге рабочей базы.

 

Запуск скрипта нужно прописывать каждый час.

Скрипт проверяет, сколько времени прошло с момента последнего успешного бэкапа (по дате последнего архива) и сравнивает это значение с переменной DaysForStore.

Если нужно бэкапить, запускается копирование файла рабочей базы на лету в папку ARC.

Если установлен флаг IsCompessing, то файл сжимается в архив RAR, иначе просто переименовывается в RAR-файл без сжатия.

В имени архива указывается дата и время.

Чтобы не забивать диск архивами, проходит подчистка старых архивов. За текущий день архивы не чистятся, за предыдущие дни оставляется столько архивов, сколько дней указано в переменной DaysForStore.

Если в базе не работают пользователи на момент старта скрипта, он может заблокировать базу. Чтобы этого избежать, файл сначала открывается на чтение и только потом копируется. Это позволяет запустить копирование в разделенном режиме.

Возможность отключения архивации предусмотрена на слабых компьютерах, т.к. архивация там существенно тормозит работу самой 1с.

Скрипт разрабатывал по моему заданию и под моим контролем мой подчиненный, поэтому качество кода соответствующее, извиняюсь. Но работает, как часы.



 

'Версия от 20110913. Добавлено безопасное копирование, чтобы не блокировать базу. 


'=== Блок настроек ===
DaysForStore7 = 7 'количество дней в неделе ArcHEvery = 4 'промежуток времени через который нужно архивировать базу в часах
IsCompessing = false 'нужно ли архивировать (сжимать) 


'=== КОД ===

'Чтобы не висело сообщение об ошибке при ошибках... on error resume next 

Set fso = CreateObject("Scripting.FileSystemObject")


PathToBase = fso.GetParentFolderName(WScript.ScriptFullName)



base = PathToBase & "1Cv8.1CD"  'получаю путь к файлу базы
PathToArcFolder = PathToBase & "arc" 'проверяю есть ли папка для архива isExist = FSO.FolderExists(PathToArcFolder)
If isExist = False Then
	Set PathToArc = FSO.CreateFolder(PathToArcFolder)
Else
End If
PathToArc = PathToArcFolder & "" 
   
'проверяю нужно ли первый раз копировать и архивировать базу
NeedToBackup = False


'проверяю нужно ли копировать и архивировать базу 
Set Folder = FSO.GetFolder(PathToArc) 'указываю путь к папке где у нас лежат архивы
FirstFile = True
For Each file In Folder.Files 'Возвращаемое значение: объект-коллекция "Files", содержащая все файлы данного каталога 	maxdata = file.DateCreated 'получаю максимальную дату
	If maxdata > Maximum Then
		Maximum = maxdata
		FirstFile = False
	Else
	End If
Next
theTime = DateDiff("h", Now, Maximum) * -1 ' разница времени       
If theTime > ArcHEvery Then 'архивирую и копирую базу
    NeedToBackup = True
      ElseIf FirstFile = True Then
        NeedToBackup = True
    Else
End If
If NeedToBackup = True Then
 	'Если включен режим компрессии 	if IsCompessing then
	   	SafeCopyFile base, PathToArc  ' копирую файл базы

		set WshShell = WScript.CreateObject("WScript.Shell")

		CommandLine = """C:Program FilesWinRARRar.exe"" a -ag -ibck -df -ri1:20 """ & PathToArc & "arc.rar"" """ & PathToArc & "1Cv8.1CD"""
		'MsgBox CommandLine 
		Return = WshShell.Run(CommandLine)  'запуск архиватора и архивация
	else
		'Иначе просто копируем и переименовываем 		DstFileName = "" & PathToArc  & "" &  "arc" & FormatDateYYYYMMDDHHMMSS(Now) & ".rar"
 'MsbBox "" & DstFileName

		SafeCopyFile base, DstFileName  ' копирую файл базы 
	End If
Else
End If
    
    
    
'удаляю все лишние дневные архивы

       
If FirstFile = False Then

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(PathToArc) 'указываю путь к папке где у нас лежат архивы For Each File In Folder.Files
    nowday = DateSerial(Year(Now), Month(Now), Day(Now)) 'получил начало дня
    datafist = DateValue(File.DateCreated) 'получаю файл с которым буду сравнивать последующие         If File.DateCreated < nowday Then 'сравниваю с началом дня
            For Each file1 In Folder.Files '                 datatwo = DateValue(file1.DateCreated) 'получаю вторую дату
                If File.DateCreated <> file1.DateCreated Then
                    If datafist = datatwo Then
                        If File.DateCreated < file1.DateCreated Then 'если первый файл создан раньше вторго ,удаляем                             File.Delete
                            Exit For 'выхожу из цикла
                        End If
                        
                        Else
                    End If
                  Else
                End If
            Next
            Else:
           
        End If
 Next
               
     
'удаляю все лишние недельные архивы  
 
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Set Folder = FSO.GetFolder(PathToArc) 'указываю путь к папке где у нас лежат архивы
 For Each File In Folder.Files
   wik = 0 'счетчик дней превышающие дату создания сравниваемого файла    wikfist = DateValue(File.DateCreated) 'получаю файл с которым буду сравнивать последующие
   If wikfist <> nowday Then
        For Each file1 In Folder.Files '             wiktwo = DateValue(file1.DateCreated) 'получаю вторую дату
            If wiktwo <> nowday Then
                If wikfist < wiktwo Then
                    wik = wik + 1                         If wik >= DaysForStore7 Then 'если количество файлов больше 7 превышающие дату создания данного файла,удаляем                             File.Delete
                            Exit For
                        Else
                        End If
                Else
                End If
            Else
            End If
   
    Next
    End If

    
   
 Next
Else
End If

Sub SafeCopyFile(Src, Dst)
	Set FSO = CreateObject("Scripting.FileSystemObject")
	Set File = FSO.GetFile(Src)
	Set TextStream = File.OpenAsTextStream(1)
	FSO.CopyFile Src, Dst, 1  ' копирую файл базы с заменой
	TextStream.Close
End Sub



Function FormatDateYYYYMMDD(D)
    
    FormatDateYYYYMMDD = Year(D) & Format2DigitString(Month(D)) & Format2DigitString(Day(D))

End Function

Function FormatDateYYYYMMDDHHMMSS(D)
    
    FormatDateYYYYMMDDHHMMSS = FormatDateYYYYMMDD(D) & Format2DigitString(Hour(D)) & Format2DigitString(Minute(D)) & Format2DigitString(Second(D))

End Function

Function Format2DigitString(N)
    If N >= 10 Then
        Format2DigitString= Format2DigitString & N
    Else
        Format2DigitString= Format2DigitString & "0" & N
    End If
End Function


 

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

19200 руб.

15.05.2017    42470    10    24    

38

BackUPv8 - система резервного копирования баз 1С

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Автоматическое создание копий файловых и серверных информационных баз 1С Предприятие 8 и размещение копий в облаке Яндекс.Диск, локальном или сетевом ресурсе.

1200 руб.

03.09.2014    14671    12    6    

17

Резервное копирование журнала транзакций, наконец-то!

Архивирование (backup) Администрирование СУБД Россия Бесплатно (free)

Постараюсь объяснить, зачем нужно резервное копирование именно журнала транзакций, а не только базы данных, и почему я словно сбросил груз, настроив его - как, покажу, естественно. Кстати, будут скрипты T-SQL (с подробными комментариями) - отличный способ сделать администрирование базы более уютным.

04.12.2023    5703    n_mezentsev    15    

23

Резервное копирование и восстановление 1С баз на PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной инструкции будет описано, как с помощью pgAdmin, bat-файлов и планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.

07.10.2022    19480    sapervodichka    36    

140

Архивирование базы в dt и дамп postgres

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Захотелось клиентам выгрузку архива баз, и выгрузку в дт, готовые скрипты с сети не заработали. Может, кому-то поможет. Релиз 8.3.18.1741.

1 стартмани

25.08.2022    4676    2    Gnom-Gluck    6    

6

Утилита копирования баз данных 1С

Архивирование (backup) Платформа 1С v8.3 Абонемент ($m)

Небольшая утилита для копирования файловых баз данных 1С.

1 стартмани

02.06.2022    4216    3    Giblarium    12    

5
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
0. fixin 4252 17.04.12 21:47 Сейчас в теме
Скрипт написан на языке VBS. Используется на компьютерах, где пользователи не обладают достаточной квалификацией для архивирования и компьютеры не работают по ночам, когда можно было бы запускать архивацию. На практике использовалась на розничных точках в маленьких магазинах.
База архивируется обычным копированием, на лету. Скрипт нужно прописать в планировщик.
Продумана система разумного оставления некоторого количества предыдущих копий.


Перейти к публикации

1. gavrikprog 117 17.04.12 21:47 Сейчас в теме
Файлы битые будут, если пользователи активно работают. На такой бэкап лучше не надеяться.
Как собственно и на другие файловые бэкапы "налету"

В смысле тесторование и исправление может дать несколько поводов для радости.
2. fixin 4252 18.04.12 00:47 Сейчас в теме
(1) лучше иметь такой архив, чем никакой.
Кстати, практика ваши опасения не подтверждает.
Все зависит от интенсивности работы с архивируемой базой.
3. rikony 18.04.12 08:58 Сейчас в теме
для не больших предприятий подойдет
там где в базу обращаются раз в час
5. fixin 4252 18.04.12 12:54 Сейчас в теме
(3) лучше иметь какой-то архив, чем никакой. На практике видно, что могут слететь только последние изменения в базу, но это лучше, чем начинать со старого бэкапа месячной давности. ;-)
На практике, если это магазин, где в момент архивации в 5 минут пробивается 1-2 чека, то вполне сойдет.

(4) возможно, но это уже мелочи, не так часто делаешь восстановление. К тому же у нас везде на точках работает без ключа архивации, место на диске стоит дешево, а процессорное время дорого.
4. shurik_shurik 18.04.12 10:24 Сейчас в теме
Думаю, стоит в архивирование добавить ключ -ep1 , чтобы исключить полный путь к файлу 1Сv8.1CD
6. Irek-kazan 18.04.12 16:32 Сейчас в теме
лучше в планировщике выставить задание на ежедневную архивацию ночью и не придеться "начинать со старого бэкапа месячной давности".
7. fixin 4252 18.04.12 16:45 Сейчас в теме
(6) прочитайте текст внимательнее. Речь идет о пользователях, работающих круглосуточно, или которые по ночам выключают компы (продавцы на точках). А заставлять их ждать, пока база сархивируется (10 минут) нереально.
8. glinmn 18.04.12 20:41 Сейчас в теме
Опыт эксплуатации подобной архивации, 1раз в час на поротижении 5 лет Acronis'ом, говорит только жизниспособности данного подхода. без данной архивации не представляю себе работу маленькой удаленной точки.
Прада кроме этого скрпта нужно еще и грамотную технологию востановления
Оставьте свое сообщение