LockDB - утилита для обеспечения OnLine копирования информационной базы данных "1С:Предприятие 7.7".


Утилита совместима только с разработками:
DBEng32 (8.0.0.9, Share) http://avprog.ru/public/16268/
DBEng32 (6.0.4.2, Advantage 8.1/9.1) http://avprog.ru/public/15211/
DBEng32 (5.1.3.2, CodeBase 6.5) http://avprog.ru/public/14664/
Начиная с указанных версий и выше.

Утилита позволяет выполнить приостановку модификаций информационной базы данных (ИБД) "1С:Предприятие 7.7" со стороны сессий 1С и выполнить "транзактивную" копию ИБД сторонним средством копирования. Для "DBEng32 Share" можно выполнять копирование на уровне обычных файлов операционной системы. Для "DBEng32 Advantage/CodeBase" следует использовать средства копирования поставляемые с данными СУБД. Т.к. предлагаемые, разработчиками этих СУБД, средства копирования работают крайне медленно, то планируется разработка "adsbackup" ориентированная на копирование только ИБД "1С:Предприятие 7.7" в среде СУБД "Advantage 8.1/9.1".

Вызов утилиты осуществляется командной строкой:

LockDB  PathDB  Strategy  Sleep  Command  Parameters

, где:

PathDB - полный путь к каталогу ИБД.

Strategy - стратегия блокировки ИБД. Допустимы следующие значения: 0, 1, 2.

0 - используется только для "DBEng32 Advantage/CodeBase".

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

1 или 2 - используется только для "DBEng32 Share".

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

Sleep - количество миллисекунд между опросами блокировок транзакций со стороны утилиты LockDB. Рекомендуется устанавливать значение - 1000 (одна секунда) и более.

Command - имя любого исполнительного файла являющимся средством копирования ИБД. Допускается текст в апострофах. Например, при использовании "DBEng32 Share" этот текст может быть следующего вида:

"XCOPY  c:\1c_base\*.dbf  d:\save\*.*"

Parameters - передаёт параметры для Command (реализовано в версии 1.0.0.2 и выше). Например, при использовании "DBEng32 Share" строка вызова утилиты может быть следующего вида:

LockDB  c:\1c_base  2  1500  XCOPY  c:\1c_base\*.dbf  d:\save\*.* 

Файл "LockDB.exe" может располагаться в любом каталоге. При использовании "DBEng32 Share" необходимо в каталог ИБД поместить файл "1SxTTS.lck" с любым содержанием (можно нулевой длины). Данный файл используется для управления синхронизацией выполнения транзакций сессиями 1С и запуском копирования утилитой LockDB. Кроме этого, наличие данного файла в каталоге ИБД, служит признаком активизации самого инструмента взаимодействия сессии 1С и утилиты LockDB. Если поместить данный файл при наличии уже активных сессий 1С, то они "не узнают" об необходимости согласовывать алгоритмы блокировки транзакций с утилитой LockDB и копии ИБД будут выполняться не "транзактивно" по отношению к этим сессиям. Иными словами - сессия 1С проверяет наличие данного файла один раз в момент собственного запуска и настраивается на взаимодействие с утилитой LockDB. Такой прием позволяет не включать лишние алгоритмы в работу "DBEng32 Share" при отсутствии необходимости выполнять OnLine копирования ИБД. При использовании "DBEng32 Advantage/CodeBase" файл "1SxTTS.lck" создаётся автоматически в момент запуска первой сессии 1С.

Утилита LockDB возвращает собственный код завершения, если возникло аварийное завершение в самой утилите (не нулевое значение). А после запуска и окончания средств копирования возвращает код завершения этих средств.

P.S.

1) Утилита LockDB. в ходе своей работы, может выдавать несколько сообщений на, вроде, "Английском" языке. Замечания по этой "проблеме" принимаются и приветствуются.

2) Думаю, что термин "транзактивная копия" не является общепринятым. Но, очень давно, я придумал именно такой термин. Возможно, что сейчас ЭТО называется другим термином.

Файлы обработки:

-