Синхронизация:Механизм двусторонней синхронизации — различия между версиями

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск
(Новая страница: «==СТРУКТУРА G$DISTRIBUTE== Данная таблица заполняется 1) триггерами, каждая запись соответств…»)
 
Строка 14: Строка 14:
 
  RELATIONTYPE - Для частично реплицируемых таблиц. 0 - полная репликация 1 – частичная. Устанавливается триггером или процедурой, для конкретной сети.
 
  RELATIONTYPE - Для частично реплицируемых таблиц. 0 - полная репликация 1 – частичная. Устанавливается триггером или процедурой, для конкретной сети.
  
КБ --> ГБ
+
==КБ --> ГБ==
 
  1. Находим максимальный загруженный packet в ГБ данного профиля. Select max(packet) from g$distribute where from_profile_id=:profile_id.
 
  1. Находим максимальный загруженный packet в ГБ данного профиля. Select max(packet) from g$distribute where from_profile_id=:profile_id.
 
  2. Подготавливаем пакет для сервера от максимально загруженного на сервер до последнего, что есть в G$DISTRIBUTE.  
 
  2. Подготавливаем пакет для сервера от максимально загруженного на сервер до последнего, что есть в G$DISTRIBUTE.  
Строка 22: Строка 22:
 
  4. Данный пакет отправляется на сервер, где ставится в очередь загрузки или загружается в ГБ.
 
  4. Данный пакет отправляется на сервер, где ставится в очередь загрузки или загружается в ГБ.
  
ГБ --> КБ  
+
==ГБ --> КБ==
 
  1. Находим максимальный загруженный serverpacket в КБ в G$DISTRIBUTE. Select max(serverpacket) from g$distribute where from_profile_id is not null.
 
  1. Находим максимальный загруженный serverpacket в КБ в G$DISTRIBUTE. Select max(serverpacket) from g$distribute where from_profile_id is not null.
 
  2. Дается команда скриптам на сервере, собрать пакет для текущего профиля. От максимально загруженного serverpacket до последнего serverpacket, что есть в G$DISTRIBUTE в ГБ.  
 
  2. Дается команда скриптам на сервере, собрать пакет для текущего профиля. От максимально загруженного serverpacket до последнего serverpacket, что есть в G$DISTRIBUTE в ГБ.  

Версия 11:07, 6 апреля 2015

СТРУКТУРА G$DISTRIBUTE

Данная таблица заполняется 
1) триггерами, каждая запись соответствует определенной операцией с синхронизируемой таблицей – для отправки 
2) Входящими данными синхронизации – для приема данных.  
ID – Ключ таблицы
TABLENAME – Имя таблицы
UUID – Уникальный строковый идентификатор таблицы TABLENAME
PACKET – Показатель изменения записи на КБ. (Инкрементируется в текущей КБ)
SOPER – Вид операции с таблицей TABLENAME. 0 – INSERT, 1 – UPDATE, 2 - DELETE
FROM_PROFILE_ID – 1) NULL: данная запись появилась в текущей КБ 2) 0:данная запись появилась на ГБ 3) Код профиля: код профиля с которого пришла запись
TO_PROFILE_ID – пока не используется
SERVERPACKET – Показатель изменения записи на ГБ. (Инкрементируется на ГБ)
INSERTDT – Дата вставки записи.
RELATIONTYPE - Для частично реплицируемых таблиц. 0 - полная репликация 1 – частичная. Устанавливается триггером или процедурой, для конкретной сети.

КБ --> ГБ

1. Находим максимальный загруженный packet в ГБ данного профиля. Select max(packet) from g$distribute where from_profile_id=:profile_id.
2. Подготавливаем пакет для сервера от максимально загруженного на сервер до последнего, что есть в G$DISTRIBUTE. 
   select d.uuid, trim(d.tablename) as tablename, d.packet, d.soper from G$DISTRIBUTE d where (d.FROM_PROFILE_ID is null) and d.packet>:max_packet order by d.packet 
3. В текстовый файл для каждой выбранной записи в предыдущем запросе записываются данные: вид операции, имя таблицы, уникальный идентификатор, значения и имена всех полей таблицы. 
   Если установлено ограничение максимального размера пакета для двухсторонней синхронизации, то данные могут уйти не все за один раз.
4. Данный пакет отправляется на сервер, где ставится в очередь загрузки или загружается в ГБ.

ГБ --> КБ

1. Находим максимальный загруженный serverpacket в КБ в G$DISTRIBUTE. Select max(serverpacket) from g$distribute where from_profile_id is not null.
2. Дается команда скриптам на сервере, собрать пакет для текущего профиля. От максимально загруженного serverpacket до последнего serverpacket, что есть в G$DISTRIBUTE в ГБ. 
   select d.uuid, trim(d.tablename) as tablename,    iif(d.packet is null, 0, d.packet), d.soper, SERVERPACKET, FROM_PROFILE_ID from G$DISTRIBUTE d where (serverpacket>:max_server_packet) order by d.serverpacket
3. В текстовый файл для каждой выбранной записи в предыдущем запросе записываются данные: вид операции, имя таблицы, уникальный идентификатор, значения и имена всех полей таблицы.
4. Данный пакет принимается и загружается в КБ.