Перейти к содержанию

Ведение копии удалённой базы данных

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

  • Традиционный способ – получать все документы из БД отправителя (из аптеки), и восстанавливать эти документы в БД получателя (в офисе).

  • По журналам – получать и восстанавливать в БД получателя только изменения системных журналов, полученных из БД отправителя.

Поскольку традиционный способ вопросов не вызывает, рассмотрим второй способ – ведение копии удалённой БД по журналам.

Основная идея заключается в том, что в БД отправителя в фоновом режиме периодически выполняется автозадача, которая следит за изменениями системных журналов и протоколирует эти изменения в отдельной глобали (^jrn).

На текущий момент протоколируются следующие сущности БД:

  • Документы.
  • Справочники.
  • Партии.
  • Чеки.
  • Настройки.
  • Пользователи.

Примечание

Изменения других сущностей не отслеживаются.

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

Следует учесть, что данный тип сообщения настроен на учёт очередности, то есть если какое-то письмо с изменениями не получено, то остальные письма данного типа восстанавливаться не будут. Отправка изменений выполняется только для владельцев системы, то есть для тех почтовых контрагентов, напротив которых в Участниках почтового обмена, в колонке Sys стоит значение Да.

Восстановление изменений из письма в БД выполняется при рестарте БД. После восстановления каждого письма выполняется переиндексация тех классов, по которым были изменения.

В связи с тем, что изменений может быть много, а размер письма, как правило, ограничен, при отправке большого количества измененных записей происходит дробление пакета на отдельные письма. При этом на принимающей стороне выполняется контроль восстановления последнего письма в пакете. В момент получения последнего письма, при необходимости автоматически проводится пересчёт счётчиков за период, по которому были изменения. В случае, если последнее письмо из пакета по каким-то причинам не было восстановлено, при входе в программу «М-АПТЕКА плюс» будет выдано соответствующее сообщение.

Ограничения использования данного способа ведения копии БД:

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

Порядок создания копии удалённой БД

  1. Взять с собой устройство для переноса информации (внешний жёсткий диск, флеш-накопитель или тому подобные) и приехать в аптеку, где расположена удаленная БД.

  2. Скопировать на это устройство ночную копию БД. Если ночная копия отсутствует, то следует остановить систему, предупредив заранее пользователей, и скопировать БД на принесённое устройство. После чего запустить БД.

  3. Если берётся не ночная копия, а текущая версия БД, то после перезапуска все старые журналы (кроме активного), можно переместить куда-нибудь в архив из директории, в которой расположены журналы.

  4. Убедиться, что в колонке Sys значение Да стоит напротив нужного почтового контрагента, поскольку именно ему будут отсылаться изменения.

  5. Войти в расписание автозадач и активировать следующие задачи:

    • Обновить протокол изменений журнала – по умолчанию отслеживает изменения в области USER. При необходимости можно изменить период запуска задачи (в базовой поставке – 30 мин).
    • Экспорт изменений журнала. Убедиться, что время запуска данной задачи предшествует времени запуска задачи Выход из базы для копирования.
  6. Привезти копию удаленной БД получателю данных и смонтировать её.

  7. Убедиться, что в БД получателя описан почтовый контрагент, от которого будут приходить изменения данных.

  8. Выполнить запись в глобаль ^SP("Journal","MailRestore",Имя_почтового_контрагента_владельца_базы)=область (область, в которую будут восстаналиваться пришедшие изменения).

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

  10. Открыть Настройки стартовой формы, расположенные по адресу: Конструктор → Конструктор меню → Настройки стартовой формы.

  11. На вкладке Перед входом в систему поставить «галочку» напротив метода Проверка наличия последнего пакета по полученным журналам.