Репликация ИБИС — различия между версиями

Материал из ИбисоПедии
Перейти к: навигация, поиск
(Общие сведения)
(Общие сведения)
Строка 6: Строка 6:
 
Для удобного мониторинга репликации создан модуль: '''aReplicationMon.exe'''  
 
Для удобного мониторинга репликации создан модуль: '''aReplicationMon.exe'''  
  
На первой закладке он отображает состояние подключений к удалённым БД и список ошибок, возникших при репликации. Список ошибок отображается отдельно для каждой БД вехрнего списка.
+
На первой закладке он отображает состояние подключений к удалённым БД и список ошибок, возникших при репликации. Список ошибок отображается отдельно для каждой БД верхнего списка.
 
На второй закладке он отображает полный список ошибок (ошибок всех БД). Из этого списка можно удалять ошибки вместе с данными (находящимися в буфере для отправки) на которых данная ошибка произошла. Таким образом можно очистить буфер передачи подготовленных данных.
 
На второй закладке он отображает полный список ошибок (ошибок всех БД). Из этого списка можно удалять ошибки вместе с данными (находящимися в буфере для отправки) на которых данная ошибка произошла. Таким образом можно очистить буфер передачи подготовленных данных.
 
Так же в данном модуле начата разработка пошагового механизма первоначальной настройки репликации. Он доступен в меню "Настройки".
 
Так же в данном модуле начата разработка пошагового механизма первоначальной настройки репликации. Он доступен в меню "Настройки".

Версия 12:37, 10 ноября 2015

Общие сведения

Репликация ИБИС представляет из себя механизм передачи изменяемой в БД информации с одной базы в другую, с использованием DBLink. Вся изменяемая в БД информация накапливается в буфере, а затем из буфера передеётся на удалённые БД. В буфер информация попадает при срабатывании тригера "Репликации".

Для удобного мониторинга репликации создан модуль: aReplicationMon.exe

На первой закладке он отображает состояние подключений к удалённым БД и список ошибок, возникших при репликации. Список ошибок отображается отдельно для каждой БД верхнего списка. На второй закладке он отображает полный список ошибок (ошибок всех БД). Из этого списка можно удалять ошибки вместе с данными (находящимися в буфере для отправки) на которых данная ошибка произошла. Таким образом можно очистить буфер передачи подготовленных данных. Так же в данном модуле начата разработка пошагового механизма первоначальной настройки репликации. Он доступен в меню "Настройки".

Настройка и прицип работы

Для использования механизма репликации необходимо:

  • 1. Создать схему "replication" в месте со всеми объектами (таблицами и функциями).

Последняя версия всех объектов находится в MIS3

  • 2. Создать пользователя БД "IBIS_REPLICATION" и "LINK2SELF".

Пользователи создаются таким скриптом:

DROP USER IF EXISTS "LINK2SELF";
CREATE USER  "LINK2SELF" INHERIT LOGIN;
ALTER USER "LINK2SELF" PASSWORD 'IbisPticaZloy';
GRANT  "MIS_USER" to "LINK2SELF";
ALTER ROLE   "MIS_USER" CREATEROLE;
DROP USER IF EXISTS "IBIS_REPLICATION";
CREATE USER  "IBIS_REPLICATION" INHERIT LOGIN;
ALTER USER "IBIS_REPLICATION" PASSWORD 'IbisPticaZloy';
GRANT  "MIS_USER" to "IBIS_REPLICATION";
ALTER ROLE   "MIS_USER" CREATEROLE;
  • 3. Настроить список реплицируемых таблиц. Все таблицы подлежащие репликации хрянться в "replication.table_name_list".

В данной таблице, поле "tbl_name" должно быть указано имя таблицы вместе с именем схемы, например: "mm.emp". В поле "enable_b" должно быть установлено значение True. Если занчение False, то указанная таблица исключается из репликации.

ВАЖНО знать, что при присвоении полю "enable_b" значения True, для указанной таблицы автоматически создаются два тригера: "replication_triger_row" и "replication_triger_stmnt". Таким образом на таблице (включенной в репликацию) тригер "replication_triger_row" добавляет все изменяемые данные таблицы в буфер репликации, в таблицу "replication.ibis_to_send", а тригер "replication_triger_stmnt" (по окнчании изменения данных) запускает процедуру "replication.ibis_start_send()". Данная процедура, в свою очередь, запускает функцию "replication.send_data()", которая читает данные из буфера и отправляет их на удалённые БД.

В функции "replication.send_data()" встроен механизм исключающий слишком частый её запуск. Т.е. если эта функция будет запущена менее чем через 10 сек после предыдущего запуска, то она сразу завершит свою работу. Это исключает запуск этой функции при каждом изменении данных в реплицируемой таблице. Данный механизм был реализован с целью исключения реализации мехнизма запуска передачи данных из шедулера.

Список реплицируемых таблиц можно настраивать в модуле: aReplicationMon.exe. Для этого необходимо выбрать меню: "Настройки/Список реплицируемых таблиц". В появившемся окне отображается список всех таблиц во всех схемах БД. Выбрав одну или несколько записей (в данном окне) можно включить или отключить репликацию выбранных таблиц нажатием кнопки "Включить/Выключить".

  • 4. Настроить список БД с которыми происходит репликация. Список баз данных на которые должны реплицироваться данные находится в таблице: "replication.ibis_base_list". В поле "dbase_name" (этой таблицы) должно быть указано название БД возвращаемое командой "current_database()".

ВАЖНО знать, что все базы данных участвующие в репликации, должны иметь уникальные имена "current_database()"! В поле "owner_ip" таблицы "replication.ibis_base_list", должен быть указан внешний IP адрес (который виден в сети с других компьютеров, участвующих в репликации). По возможности вместо IP лучше указывать сетевое имя компьютера, т.к. в данном случае смена настроек сетевого адаптера не нарушит связь репликации. В поле "owner_port", должен быть указан внешний порт, по которому будут подключаться к БД компьютеры в сети. В поле "is_replication" должно быть указано значение True. Если будет указано значение False, то на указанную БД не будет происходить отправка данных.

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

При первом, на "Центральной" БД в таблице "replication.ibis_base_list" указываются все БД участвующие в репликации, а на "Не центральных" БД в таблице "replication.ibis_base_list" указывается только одна ("Центральная") база. Так же ВАЖНО - в таблице "replication.ibis_base_list" для "Центральной" БД указано значение поля "id" должно быть = 1! При отправке данных на неё (с "Не центральных" БД), на ней данные будут не только вставляться в таблицы БД но и дублироваться в буферную таблицу для отправки на другие БД.

При втором, на всех базах (участвующих в репликации), содержание таблицы "replication.ibis_base_list" должно быть одинаковым! При таком режиме репликации "без центральной станции", с каждой станции данные отправляются сразу на все станции из таблицы "replication.ibis_base_list".

Обязанности разработчиков

Все разработчики при создании тригеров на таблицах, в самое начало тригера, после "BEGIN" должны вставлять следующий код:

if session_user = 'IBIS_REPLICATION' then -- Если измения произошли от пользователя репликации IBIS_REPLICATION
    RETURN null; -- то выходим из тригера, т.к. это результат действий репликации
end if;