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

22.12.14

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
V8DBBackup.zip
.zip 59,30Kb
125
125 Скачать (1 SM) Купить за 1 850 руб.

Эта программа для тех, кто  работает с файловой версией 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

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159453    874    399    

861

SALE! 15%

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7777    57    22    

66

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    23439    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10431    36    24    

61

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15402    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    187987    1140    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17303    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7696    8    35    

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

P.S. Опишите пожалуйста алгоритм работы программы.
5. BorovikSV 1037 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 1037 02.11.17 01:09 Сейчас в теме
(24) Вы исследуйте вызовы WINAPI платформой и все станет ясно
26. apic 13 08.12.17 16:53 Сейчас в теме
16. get-start 26 27.12.15 22:48 Сейчас в теме
(3) имхо, бэкапы нужны для восстановления данных... поэтому тут неприемлема спешка, которая может навредить созданию бэкапа... надо просто приучать пользователей к сообщению "Через 5 минут освободите базу на 30 минут" и всё..-)
17. BorovikSV 1037 28.12.15 08:31 Сейчас в теме
(16) get-start, может открою страшную тайну, но бэкапы (полный дамп) нужны и для других целей. Например чтобы провести тест на восстановление последовательности, тест на обновление, или просто переслать разработчику.
В боевых условиях сообщение "Через 5 минут освободите базу на 30 минут" - может привести к написанию объяснительной, на предмет того чем же вызвана такая необходимость в разгар рабочего дня.
18. get-start 26 28.12.15 22:52 Сейчас в теме
(17) бэкап (backup) - переводится даже "возврат"... "резервное копирование"... то есть - после неудачного переноса каких-то доработок, либо элементарно диск посыпался. а вот для разработки/тестов/etc - можно воспользоваться и "быстрым" копированием... даже тем, которое предлагается в статье по использованию WinRar-а: не факт, что "проскочит" какая-то транзакция, которая сильно разрушит данные (возможно это отразится на одном/нескольких документах) и, даже если так произойдёт, не факт, что для тестов/разработок эти документы будут сильно нужны... а экономия времени - значительная (более чем стократ)... далее - мы эту базу не будем переносить на рабочую, а в лучшем случае - будем переносить доработанную конфигурацию, которая никак не повредится при таком "быстром" копировании... в случае неудачи такого копирования (база сильно повредилась) - мы базу НЕ ТЕРЯЕМ... мы теряем только возможность приступить к тестированию/разработке в данный момент... если соотнести стократное ускорение копирования и вероятность того, что оно было зря - можно решить для себя, применять этот способ или нет. только и всего.
по поводу "объяснительной" за сообщение об освобождении базой: конечно, если по каждой ерунде гонять людей, то это приведёт к недовольству и конфликту, но если есть острая необходимость (программист делал какую-то разработку и надо внедрить её в рабочую базу, и для этого, естественно, нужна точная копия... или обновление делается, которое в принципе может криво установиться) - это РАБОТА программиста и не нужно ставить её ниже работы ключевых пользователей. если ключевые пользователи так будут реагировать на действия программиста - они рискуют остаться без поддержки..-) надо уважать не только свой, но и чужой труд, который, тем более, направлен ради твоей же (ключевого пользователя) работы... как-то так, например.

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

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

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

по моему за способ работы с базой "не факт, что "проскочит" какая-то транзакция" - нужно расстреливать
ещё раз - поскольку этот перенос ИСКЛЮЧИТЕЛЬНО для разработчика (не для бэкапирования базы перед изменениями либо регламентного), разработчик САМ решает как ему поступить... процитирую себя
в случае неудачи такого копирования (база сильно повредилась) - мы базу НЕ ТЕРЯЕМ... мы теряем только возможность приступить к тестированию/разработке в данный момент... если соотнести стократное ускорение копирования и вероятность того, что оно было зря - можно решить для себя, применять этот способ или нет.
согласен, что в случае вашей обработки - это, конечно, не "стократное ускорение", но тем не менее - быстрее.
21. 9322304@gmail.com 9 14.07.16 10:19 Сейчас в теме
А можно еще добавить в ком. строку переметр - ПРЕФИКС ?
Было бы здорово, если бы был режим без индикации, с возможностью вывода данных в файл лога
а так вроде работает....
22. 9322304@gmail.com 9 14.07.16 10:25 Сейчас в теме
не понятно, как связать эту утилиту в процесс автоматизации....т.е. вписать в другой скрипт.
проблема в том, что не известно, какой файл она создаст, чтобы после ее завершения передать его архиватору с последующим переносом на FTP в хранилище
Вариант скрипта
V8DBBackup.exe
RAR *.1CD -Исключить 1C8db.1cd -удалитьИсх
Upload2FTP *.rar
если НЕ Ошибка Тогда delete *.rar
23. BorovikSV 1037 14.07.16 17:21 Сейчас в теме
(22) 9322304@gmail.com, я услышал :)
27. mszsuz 335 29.08.18 11:59 Сейчас в теме
Хочу поблагодарить Автора за отличную разработку!
28. VitaliyCeban 465 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
Показать
AnderWonder; begemot; PlatonStepan; +3 Ответить
29. VitaliyCeban 465 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
Показать
AnderWonder; +1 Ответить
Оставьте свое сообщение