Ведение копии удалённой базы данных¶
Может возникнуть необходимость вести копию удаленной базы данных (далее БД), например, вести в офисе БД аптеки. Это можно реализовать двумя способами:
-
Традиционный способ – получать все документы из БД отправителя (из аптеки), и восстанавливать эти документы в БД получателя (в офисе).
-
По журналам – получать и восстанавливать в БД получателя только изменения системных журналов, полученных из БД отправителя.
Поскольку традиционный способ вопросов не вызывает, рассмотрим второй способ – ведение копии удалённой БД по журналам.
Основная идея заключается в том, что в БД отправителя в фоновом режиме периодически выполняется автозадача, которая следит за изменениями системных журналов и протоколирует эти изменения в отдельной глобали (^jrn).
На текущий момент протоколируются следующие сущности БД:
- Документы.
- Справочники.
- Партии.
- Чеки.
- Настройки.
- Пользователи.
Примечание
Изменения других сущностей не отслеживаются.
В определенный момент запускается другая автозадача, которая отправляет накопленные изменения по почте в виде внутрисистемной почты, используя тип сообщения Обновления журналов.
Следует учесть, что данный тип сообщения настроен на учёт очередности, то есть если какое-то письмо с изменениями не получено, то остальные письма данного типа восстанавливаться не будут. Отправка изменений выполняется только для владельцев системы, то есть для тех почтовых контрагентов, напротив которых в Участниках почтового обмена, в колонке Sys стоит значение Да.
Восстановление изменений из письма в БД выполняется при рестарте БД. После восстановления каждого письма выполняется переиндексация тех классов, по которым были изменения.
В связи с тем, что изменений может быть много, а размер письма, как правило, ограничен, при отправке большого количества измененных записей происходит дробление пакета на отдельные письма. При этом на принимающей стороне выполняется контроль восстановления последнего письма в пакете. В момент получения последнего письма, при необходимости автоматически проводится пересчёт счётчиков за период, по которому были изменения. В случае, если последнее письмо из пакета по каким-то причинам не было восстановлено, при входе в программу «М-АПТЕКА плюс» будет выдано соответствующее сообщение.
Ограничения использования данного способа ведения копии БД:
- Данные, получаемые из удалённой БД, не должны модифицироваться на стороне получателя. Другими словами, в копии БД не должны выполняться никакие операции над справочниками, документами, чеками и списком пользователей. Работа в данной БД должна осуществляться только в режиме просмотра и получения отчётов.
- В одной физической БД (области) можно вести только одну копию удалённой БД. Если необходимо вести копии разных удалённых БД, то должно быть создано такое же кол-во локальных БД.
Порядок создания копии удалённой БД¶
-
Взять с собой устройство для переноса информации (внешний жёсткий диск, флеш-накопитель или тому подобные) и приехать в аптеку, где расположена удаленная БД.
-
Скопировать на это устройство ночную копию БД. Если ночная копия отсутствует, то следует остановить систему, предупредив заранее пользователей, и скопировать БД на принесённое устройство. После чего запустить БД.
-
Если берётся не ночная копия, а текущая версия БД, то после перезапуска все старые журналы (кроме активного), можно переместить куда-нибудь в архив из директории, в которой расположены журналы.
-
Убедиться, что в колонке Sys значение Да стоит напротив нужного почтового контрагента, поскольку именно ему будут отсылаться изменения.
-
Войти в расписание автозадач и активировать следующие задачи:
- Обновить протокол изменений журнала – по умолчанию отслеживает изменения в области USER. При необходимости можно изменить период запуска задачи (в базовой поставке – 30 мин).
- Экспорт изменений журнала. Убедиться, что время запуска данной задачи предшествует времени запуска задачи Выход из базы для копирования.
-
Привезти копию удаленной БД получателю данных и смонтировать её.
-
Убедиться, что в БД получателя описан почтовый контрагент, от которого будут приходить изменения данных.
-
Выполнить запись в глобаль ^SP("Journal","MailRestore",Имя_почтового_контрагента_владельца_базы)=область (область, в которую будут восстаналиваться пришедшие изменения).
-
Убедиться, что запущена задача Проверка наличия почты в почтовых ящиках сервера.
-
Открыть Настройки стартовой формы, расположенные по адресу: Конструктор → Конструктор меню → Настройки стартовой формы.
-
На вкладке Перед входом в систему поставить «галочку» напротив метода Проверка наличия последнего пакета по полученным журналам.