Безопасное копирование файловых баз данных 1С (1Cv8.1CD)

22.12.14

Разработка - Инструментарий разработчика

Безопасное копирование файловых баз данных 1С (1Cv8.1CD)
При подключенных пользователях!

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

Наименование Файл Версия Размер
V8DBBackup.zip
.zip 59,30Kb
125
.zip 59,30Kb 125 Скачать

Эта программа для тех, кто  работает с файловой версией 1С.

Программа просто незаменима в случаях когда вы работаете в терминале или по сети, и вам потребовалось сделать бэкап базы.

Обычно заставляют пользователей выйти, делают копию, и потом все входят по новой. Это естественно не нравится пользователям и занимает какое то время (ведь нужно всех оповестить о необходимости выхода, а потом о необходимости входа).

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

И наконец в особо "нелепых" случаях, просто копируют файл 1cv8.1CD, наивно думая что все пучком.

Даже случаи ночных бэкапов, когда предполагается что все уже давно дома, походят далеко не всем. Во первых кто-то может и задержаться, а во вторых может быть работа с базой в режиме 24/7 (диспетчерские к примеру).

Почему же нельзя просто скопировать файл  1cv8.1CD?

Принцип работы 1С, заключается в том, что основной файл базы 1cv8.1CD никак не блокируется. Блокировки накладываются на вспомогательный файл 1cv8.1CL. То есть когда 1С хочет что-то прочитать, или записать то она блокирует 1cv8.1CL с определенными смещениями, которые соответствуют тем или иным таблицам. Когда все, что нужно прочитала (записала), то блокировки снимаются.

В упрощенном виде можно процесс "Блокировка - Запись - Разблокировка", представить как транзакцию. В силу естественных причин они должны быть атомарны (неделимы), ведь иначе получим несогласованные данные, и как следствие заведомо аварийную базу.   

В момент простого копирования, есть очень большой риск, что получите копию с несогласованным данными.  Ведь пока вы копировали 5-й по счету мегабайт, 1С в 1-м по счету мегабайте внесла некоторые изменения. И вы получите копию, где 5-й мегабайт "свежий", а 1-й мегабайт "старый". Другими словами копия получилась несогласованная, аварийная, и она вам обязательно за это "отомстит" в самый неподходящий момент. 

Принцип действия программы:

Программа блокирует необходимые файлы, при этом ждет пока 1С завершит то, что начала. Затем копирует 1cv8.1CD в текущий каталог с добавлением к имени текущей даты и времени.

Если в процессе копирования, 1С решит что-то записать в базу (начать транзакцию), то ей придется дождаться завершения копирования.

Если в процессе копирования, 1С решит что-то прочитать из базы, то она успешно это сделает, ведь программа блокирует только на запись. Другими словами, те пользователи, которые пролистывают журнал документов, открывают формочки и формируют отчеты, даже не заметят блокировки.

Как использовать:

Для использования необходимо запустить в каталоге с базой данных. Копия базы данных появится в том же каталоге.

Что не реализовано, и будет реализовано в следующий версиях:

1) Поддержка командной строки

2) Сжатие копий

Простым копированием, или способом, указанным тут, действовать ни в коем случае нельзя, ибо будете получать аварийные копии!

Backup

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    119939    656    389    

701

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    7012    20    6    

37

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    3251    10    1    

31

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177347    1070    0    

846

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99205    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    17916    6    8    

38

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    27946    3    10    

14

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23491    15    15    

31
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Alien_job 190 22.12.14 07:17 Сейчас в теме
Ну в момент включения блокировки не факт что данные корректны. Например движения документа в одно регистре записаны а в другом еще нет. Это, безусловно, способ надежнее "копирования базы за 30 сек" но всё равно доверия не вызывает.
3. BorovikSV 1036 22.12.14 12:04 Сейчас в теме
(1) Alien_job, в момент включения блокировки - транзакция завершена.Данные возможно будут некорректные, но всяко не аварийные. Тем более все жизненно важные операции проходят в рамках одной транзакции
4. AHDP 8 22.12.14 16:46 Сейчас в теме
(3) Транзакция гарантированно не будет открыта только тогда, когда вам удастся заблокировать все таблицы в файловой БД.

P.S. Опишите пожалуйста алгоритм работы программы.
5. BorovikSV 1036 22.12.14 20:22 Сейчас в теме
(4) AHDP, Перед копированием накладывается общая блокировка на запись на 1Cv8.1CL. Платформа использует этот же файл для установки блокировки. Получается я не смогу установить блокировку пока есть хотя бы одна блокировка на запись самой платформой, и мне приходится ждать. Но как только я заблокировал, то ждать придется уже самой 1С.
Подвох в том, что сам целевой 1Cv8.1CD платформой не блокируется, блокируются лишь вспомогательные с расширением 1CL. Те кто это не знает как раз и входят в "группу риска" копируя чем не попадя главный файл :)
apic; bayce; sashocq; BigB; +4 Ответить
7. sashocq 193 23.12.14 10:26 Сейчас в теме
(5) это очень важная информация. Добавьте ее в основное описание программы.
24. apic 13 25.10.17 11:09 Сейчас в теме
(5) А откуда такая информация, есть какой-то официальный или не официальный источник о том, что вся "соль" блокировки в файле 1Cv8.1CL? Буду очень благодарен за ссылку...
frkbvfnjh; +1 Ответить
25. BorovikSV 1036 02.11.17 01:09 Сейчас в теме
(24) Вы исследуйте вызовы WINAPI платформой и все станет ясно
26. apic 13 08.12.17 16:53 Сейчас в теме
16. get-start 25 27.12.15 22:48 Сейчас в теме
(3) имхо, бэкапы нужны для восстановления данных... поэтому тут неприемлема спешка, которая может навредить созданию бэкапа... надо просто приучать пользователей к сообщению "Через 5 минут освободите базу на 30 минут" и всё..-)
17. BorovikSV 1036 28.12.15 08:31 Сейчас в теме
(16) get-start, может открою страшную тайну, но бэкапы (полный дамп) нужны и для других целей. Например чтобы провести тест на восстановление последовательности, тест на обновление, или просто переслать разработчику.
В боевых условиях сообщение "Через 5 минут освободите базу на 30 минут" - может привести к написанию объяснительной, на предмет того чем же вызвана такая необходимость в разгар рабочего дня.
18. get-start 25 28.12.15 22:52 Сейчас в теме
(17) бэкап (backup) - переводится даже "возврат"... "резервное копирование"... то есть - после неудачного переноса каких-то доработок, либо элементарно диск посыпался. а вот для разработки/тестов/etc - можно воспользоваться и "быстрым" копированием... даже тем, которое предлагается в статье по использованию WinRar-а: не факт, что "проскочит" какая-то транзакция, которая сильно разрушит данные (возможно это отразится на одном/нескольких документах) и, даже если так произойдёт, не факт, что для тестов/разработок эти документы будут сильно нужны... а экономия времени - значительная (более чем стократ)... далее - мы эту базу не будем переносить на рабочую, а в лучшем случае - будем переносить доработанную конфигурацию, которая никак не повредится при таком "быстром" копировании... в случае неудачи такого копирования (база сильно повредилась) - мы базу НЕ ТЕРЯЕМ... мы теряем только возможность приступить к тестированию/разработке в данный момент... если соотнести стократное ускорение копирования и вероятность того, что оно было зря - можно решить для себя, применять этот способ или нет. только и всего.
по поводу "объяснительной" за сообщение об освобождении базой: конечно, если по каждой ерунде гонять людей, то это приведёт к недовольству и конфликту, но если есть острая необходимость (программист делал какую-то разработку и надо внедрить её в рабочую базу, и для этого, естественно, нужна точная копия... или обновление делается, которое в принципе может криво установиться) - это РАБОТА программиста и не нужно ставить её ниже работы ключевых пользователей. если ключевые пользователи так будут реагировать на действия программиста - они рискуют остаться без поддержки..-) надо уважать не только свой, но и чужой труд, который, тем более, направлен ради твоей же (ключевого пользователя) работы... как-то так, например.

резюмируя всё вышесказанное: я ничуть не принижаю значимость данной вашей обработки, но на мой взгляд она как бы между двумя стульями оказалась - она и не настолько "скоростная", как если бы через прямое архивирование, но и не такая точная, как если бы выгрузкой ИБ... таким образом - разработка мне кажется интересной с точки зрения понимания механизмов работы и умение внедряться в эти механизмы...
19. BorovikSV 1036 29.12.15 08:12 Сейчас в теме
(18) get-start,?

она и не настолько "скоростная", как если бы через прямое архивирование,


Вы шутите? как может быть "прямое" копирование, быть дольше прямого "архивирования"? :) что то курите? :)

и чем же она по вашему отличается от winrara? WIN API с ней как то по особому работает?
единственное на чем может быть задержка - это на ожидании завершении транзакций клиентов. Маловероятно что клиент что то массово перепроводит в этот момент (в одной транзакции), поэтому задержка стремится к нулю.
При активных же пользователях - копирование же WINRARом - гарантирует косяки в копии.


резюмируя всё вышесказанное:
1) я не понимаю зачем разводить демагогию насчет способа копирования, если этот способ копирования отличается лишь наличием блокировки перед ее началом процесса.
2) Как может быть лучше или равнозначен способ, при котором целостность не обеспечивается в принципе (простое копирование, или Winrar без сжатия)?
3) по моему за способ работы с базой "не факт, что "проскочит" какая-то транзакция" - нужно расстреливать
2. davdykin 25 22.12.14 07:38 Сейчас в теме
Я думаю в данном случаи должно решить задачу теневое копирование тома, допустим с помощью бесплатной программы cobian backup.
6. oleg212 23.12.14 10:16 Сейчас в теме
(2) davdykin, Тоже пользуюсь Cobian с теневым копированием. Справляется прога нормально.
10. BorovikSV 1036 01.01.15 06:16 Сейчас в теме
(6) oleg212, (2) davdykin, Не задумывались что произойдет, если снимок сделается в тот момент, когда 1С часть транзакции уже скинула на диск?
15. BorovikSV 1036 22.01.15 16:29 Сейчас в теме
(2) davdykin, А вы уверены в том, что теневое копирование произошло в момент когда 1С завершила процесс записи транзакции???
8. sashocq 193 23.12.14 10:27 Сейчас в теме
У вас там в архиве exe-шник или скрипт? А то неохота тратить 1 $.
9. BorovikSV 1036 23.12.14 11:21 Сейчас в теме
(8) sashocq, EXE разумеется. Был бы скрипт - была бы статья а не файлик :)
11. jobkostya1c_ERP 100 08.01.15 19:52 Сейчас в теме
За объяснение на что накладывается блокировка и прочие "радости" при копировании открытой базы спасибки. А вот плохой метод копирования открытой базы
То есть когда 1С хочет что-то прочитать, или записать то она блокирует 1cv8.1CL с определенными смещениями, которые соответствуют тем или иным таблицам. Когда все, что нужно прочитала (записала), то блокировки снимаются.
применим, если просто экстренно нужно получить копию для анализа ошибки или тестирования. Конечно, и это нехорошо, когда в файловой базе работают пользователи.
Платформа 1С 8 так устроена, что держит в ОЗУ до последнего момента какие-то данные для записи до закрытия. Зачем?! Даже разработчики не знают.
12. BorovikSV 1036 08.01.15 22:15 Сейчас в теме
(11) kostyaomsk,
Платформа 1С 8 так устроена, что держит в ОЗУ до последнего момента какие-то данные для записи до закрытия. Зачем?! Даже разработчики не знают.

гениально!!! Это вероятно новый способ разработки программного обеспечения - держать до последнего момента какие-то данные... Нужно запатентовать технологию, а то гляди разработчики вдруг догадаются, зачем их платформа что то держит до последнего момента....
13. CaSH_2004 372 15.01.15 19:31 Сейчас в теме
Очень ждем командной строки
ixijixi; gubanoff; +2 Ответить
14. BorovikSV 1036 16.01.15 19:09 Сейчас в теме
(13) CaSH_2004, скоро появится полная распаковка + упаковка. В т.ч. конечно же данные, в XML или бинарном виде.
20. get-start 25 30.12.15 06:11 Сейчас в теме
как может быть "прямое" копирование, быть дольше прямого "архивирования"?
мы определились, что используем этот способ ТОЛЬКО для переноса базы клиента для некоторых доработок... и даже копирование на флэшку архива 1cd-файла гораздо быстрее/оптимальнее (по заполнению флэшки), чем копирование его самого (он хорошо сжимается). а если говорить, что копируем базу через rdp|ammyy|teamviewer|server (то есть через интернет или, последний вариант, по локальной сети) - то это вообще убийство качать неархивированный файл. мало того - я даже dt-файл архивирую (хоть он и не сжимается) - чтобы в случае ошибки развёртывания базы заранее исключить вариант "кривого копирования" и меньше возиться потом. в вашем случае - после "прямого" копирования (допустим на тот же диск, где база) - по этой логике нужно будет ещё архивировать. то есть - дополнительное время на "прямое" копирование и на "лишние движения" по архивированию... ну, либо дольше копировать...

Как может быть лучше или равнозначен способ, при котором целостность не обеспечивается в принципе (простое копирование, или Winrar без сжатия)?
самый первый комментарий говорит, что и ваш способ не обеспечивает целостность...может менее "аварийная" ошибка, но тем не менее - не расстрелять, а лишь оторвать руки (по вашей логике..:-) )

по моему за способ работы с базой "не факт, что "проскочит" какая-то транзакция" - нужно расстреливать
ещё раз - поскольку этот перенос ИСКЛЮЧИТЕЛЬНО для разработчика (не для бэкапирования базы перед изменениями либо регламентного), разработчик САМ решает как ему поступить... процитирую себя
в случае неудачи такого копирования (база сильно повредилась) - мы базу НЕ ТЕРЯЕМ... мы теряем только возможность приступить к тестированию/разработке в данный момент... если соотнести стократное ускорение копирования и вероятность того, что оно было зря - можно решить для себя, применять этот способ или нет.
согласен, что в случае вашей обработки - это, конечно, не "стократное ускорение", но тем не менее - быстрее.
21. 9322304@gmail.com 8 14.07.16 10:19 Сейчас в теме
А можно еще добавить в ком. строку переметр - ПРЕФИКС ?
Было бы здорово, если бы был режим без индикации, с возможностью вывода данных в файл лога
а так вроде работает....
22. 9322304@gmail.com 8 14.07.16 10:25 Сейчас в теме
не понятно, как связать эту утилиту в процесс автоматизации....т.е. вписать в другой скрипт.
проблема в том, что не известно, какой файл она создаст, чтобы после ее завершения передать его архиватору с последующим переносом на FTP в хранилище
Вариант скрипта
V8DBBackup.exe
RAR *.1CD -Исключить 1C8db.1cd -удалитьИсх
Upload2FTP *.rar
если НЕ Ошибка Тогда delete *.rar
23. BorovikSV 1036 14.07.16 17:21 Сейчас в теме
(22) 9322304@gmail.com, я услышал :)
27. mszsuz 321 29.08.18 11:59 Сейчас в теме
Хочу поблагодарить Автора за отличную разработку!
28. VitaliyCeban 461 05.10.21 15:07 Сейчас в теме
Скрипт для автоматизации архивирования:
@echo off
chcp 65001

set db_path="G:\1C\Базы\Моя прекрасная база"
set backups_path="G:\1C\Backups\Моя прекрасная база"
set v8dbbackup_path="G:\V8DBBackup\V8DBBackup.exe"
set sevenzip_path="C:\Program Files\7-Zip\7z.exe"

For /f "tokens=1-3 delims=./ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a-%%b)

pushd %db_path%
%v8dbbackup_path%
%sevenzip_path% a "%mydate%-%mytime%.zip" "1Cv8 *.1CD"
del "1Cv8 *.1CD"
chcp 866
Robocopy.exe *.zip . %backups_path% /MOV
popd
Показать
begemot; PlatonStepan; +2 Ответить
29. VitaliyCeban 461 03.10.22 09:53 Сейчас в теме
(28) Скрипт для автоматизации архивирования всех файловых баз (предполагается, что в DB_ROOT находятся только базы 1С, и ничего более):

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set DB_ROOT="D:\1C\Bases"
set BACKUPS_ROOT="F:\Backups\Databases"
set V8DBBACKUP="F:\Backups\V8DBBackup.exe"
set SEVENZIP="C:\Program Files\7-Zip\7z.exe"

pushd %DB_ROOT%
for /d %%D in (*) do (
	set DATABASE_NAME=%%D
	echo on
	echo !DATABASE_NAME!
	@echo off
	
	set DB_PATH=%DB_ROOT%\!DATABASE_NAME!
	set BACKUPS_FOLDER_PATH=%BACKUPS_ROOT%\!DATABASE_NAME!
	if not exist "!BACKUPS_FOLDER_PATH!\" mkdir !BACKUPS_FOLDER_PATH!
	For /f "tokens=1-3 delims=./ " %%a in ('date /t') do (set CURRENT_DATE=%%c-%%b-%%a)
	For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set CURRENT_TIME=%%a-%%b)

	pushd !DB_PATH!
	%V8DBBACKUP%
	%SEVENZIP% a "!DATABASE_NAME!_!CURRENT_DATE!_!CURRENT_TIME!.7z" "1Cv8 *.1CD"
	del "1Cv8 *.1CD"
	Robocopy.exe *.7z . !BACKUPS_FOLDER_PATH! /MOV /NFL /NDL /NJH /NJS
	popd
)
popd
Показать
Оставьте свое сообщение