Каталог оконных фирм, статистика, цены, статьи. Описание ПВХ профилей, фурнитуры и других комплектующих. Форум. Объявления.  

 форум поддержки VSGroup 

сделать стартовой   добавить в избранное

WinCalc   PaneCut   PTrade   УОП 1С 8   TPS.com.ua
 
 FAQ   •  Поиск  •  Пользователи   •  Регистрация   •  Вход
Текущее время: 16 сен 2019, 10:27 Часовой пояс: UTC + 2 часа





Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Репликация баз данных (синхронизация)
СообщениеДобавлено: 14 янв 2014, 12:43 
Не в сети
Ректор
Ректор
Аватара пользователя

Группа: Служба поддержки VSgroup
Сообщения: 22062
Добрый день

В некоторых случаях при работе предприятия возникает необходимость синхронизации баз данных WinCalc между удаленными участками (в основном из-за удаленности производства и отдела продаж). При наличии на предприятии безбумажного производства, очень важным является бесперебойная работа.
К сожалению (или даже к счастью) FireBird не содержит встроенных средств репликации. Поэтому нами был разработан соответствующий инструмент.

Использование инструмента идет из командной строки:

vsreplicator.exe /prepare config.xml - подготавливает исходную базу к репликации (только один раз выполнить)
vsreplicator.exe /prepare_dest config.xml - назначает права пользователю REPLICATOR в базе получателя (подключатся к приемнику под пользователем REPLICATOR нужно в случае обратной синхронизации баз) (только один раз выполнить)
vsreplicator.exe /replicate config.xml - собственно сама процедура репликации (выполнять периодически для переноса данных)

Далее будут рассмотрены ситуации и способы их решения:

1. Отдел продаж находится в разной сети с техническим отделом и производством
Отдел продаж работает в базе А
Технический отел работает в базе Б
Безбумажное производство работает в базе Б
Необходимо передавать из базы Б в базу А статусы заказов и историю кликов "безбумажка"

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

Конфигурационный файл:
Вложение:
np_out.xml [1,95 КБ]
Скачиваний: 32


2. Отдел продаж находится в одной сети с техническим отделом, производство удалено

Отдел продаж работает в базе А
Технический отдел работает в базе А
Производство работает в базе Б
Заказы из базы А необходимо передавать в базу Б для обеспечения работы безбумажного производства, обратно должна приходить информация о статусах заказа и истории кликов безбумажки
(решение в разработке)

Конфигурационный файл для передачи заказов:
Вложение:
full.xml [2,52 КБ]
Скачиваний: 4


P.S. Описание структуры конфигурационного файла:

Код:
<root>
  <source> - параметры исходной базы
    <server>localhost</server>
    <path>o:\repl\src\wcoffers.fdb</path>
    <user>SYSDBA</user>
    <pas>masterkey</pas>
  </source> - параметры базы-получателя
  <dest>
    <server>localhost</server>
    <path>o:\repl\dest\wcoffers.fdb</path>
    <user>REPLICATOR</user>
    <pas>replicator</pas>
    <pas_sysdba>masterkey</pas_sysdba> - пароль дял пользователя SYSDBA, чтобы назначить пользователю права на чтение и запись таблиц
  </dest>
  <tables> - список таблиц для репликации
   <NHISTORY>
      <ID>90</ID> - просто уникальный номер
      <FChangeList> - список полей, значения которых нужно заменить
         <cid>
            <src>select notext,ztype,id as oid, cast(:cid as Integer) as cid from offers where id = :oid</src> - запрос, который делает выборку из исходной базы, параметры - текущая запись таблицы
            <dest>select id as oid from offers where notext = :notext and ztype = :ztype</dest> - запрос, который получает новое значение поля. Параметры - результат запроса узла src
            <src_row>select cast(rdb$get_context('USER_TRANSACTION', 'row#') as Float) as row_number, constructions.id, cast(:cid as Integer), rdb$set_context('USER_TRANSACTION', 'row#', Coalesce(rdb$get_context('USER_TRANSACTION','row#'),0) + 1) as TTT from constructions where pid = :oid</src_row> - запрос, возвращающий порядковый номер значения в базе источнике (порядковый номер берется при совпадении поля 1 и 2
            <dest_row>select cast(rdb$get_context('USER_TRANSACTION', 'row#') as Float) as row_number, constructions.id, rdb$set_context('USER_TRANSACTION', 'row#', Coalesce(rdb$get_context('USER_TRANSACTION','row#'),0) + 1) as TTT from constructions where pid = :oid</dest_row> - запрос, возвращающий порядковый номер в базе приемнике. Значение поля 1 будет новое значение для поля cid
         </cid>
         <oid>
            <src>select notext,ztype from offers where id = :oid</src> - запрос к базе источнику
            <dest>select id from offers where notext = :notext and ztype = :ztype</dest> - запрос к базе приемнику, значение поля 0 будет новым значение поля oid
         </oid>
      </FChangeList>
   </NHISTORY>
   <CONSTRUCTIONS>
      <RELATED> - подчиненные таблицы
         <CALCREP>PID</CALREP> - имя и поле, по которому связана таблица
      </RELATED>
   </CONSTRUCTIONS>
  </tables>   
</root>


Вложения:
VSReplicator.rar [8,85 МБ]
Скачиваний: 32

_________________
Как правильно задавать вопросы на форуме поддержки
Если программист утром на работе, значит он оттуда не уходил.
Если я пишу "исправил", "сделал" и т.д., это значит что собрана новая сборка и выложена на сайт. Нужно обновить программу чтобы получить исправления.
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB