| форум підтримки VSGroup https://forum.vsgroup.ua/ |
|
| Репликация баз данных (синхронизация) https://forum.vsgroup.ua/viewtopic.php?f=60&t=6323 |
Страница 1 из 1 |
| Автор: | Николай@VSGroup [ 14 янв 2014, 13:43 ] | ||
| Заголовок сообщения: | Репликация баз данных (синхронизация) | ||
Добрый день В некоторых случаях при работе предприятия возникает необходимость синхронизации баз данных WinCalc между удаленными участками (в основном из-за удаленности производства и отдела продаж). При наличии на предприятии безбумажного производства, очень важным является бесперебойная работа. К сожалению (или даже к счастью) FireBird не содержит встроенных средств репликации. Поэтому нами был разработан соответствующий инструмент. Использование инструмента идет из командной строки: vsreplicator.exe /prepare config.xml - подготавливает исходную базу к репликации (только один раз выполнить) vsreplicator.exe /prepare_dest config.xml - назначает права пользователю REPLICATOR в базе получателя (подключатся к приемнику под пользователем REPLICATOR нужно в случае обратной синхронизации баз) (только один раз выполнить) vsreplicator.exe /replicate config.xml - собственно сама процедура репликации (выполнять периодически для переноса данных) Далее будут рассмотрены ситуации и способы их решения: 1. Отдел продаж находится в разной сети с техническим отделом и производством Отдел продаж работает в базе А Технический отел работает в базе Б Безбумажное производство работает в базе Б Необходимо передавать из базы Б в базу А статусы заказов и историю кликов "безбумажка" Сложность заключается в том, что базы А и Б не являются копию друг-друга (база Б формируется выгрузкой заказов из 1С, соответственно внутренние ID заказов отличаются). При передаче информации выполняется синхронизация заказов по текстовым номерам, позиции в безбумажке синхронизируются по порядковому номеру Конфигурационный файл: Вложение: 2. Отдел продаж находится в одной сети с техническим отделом, производство удалено Отдел продаж работает в базе А Технический отдел работает в базе А Производство работает в базе Б Заказы из базы А необходимо передавать в базу Б для обеспечения работы безбумажного производства, обратно должна приходить информация о статусах заказа и истории кликов безбумажки (решение в разработке) Конфигурационный файл для передачи заказов: Вложение: 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>
|
|||
| Страница 1 из 1 | Часовой пояс: UTC + 2 часа [ Летнее время ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|