====== Преобразование существующей таблицы в репликационную ====== Ключевые слова: Как добавить репликацию таблице/сделать таблицу репликационной/репликационная таблица Выполняется в программе DBmeta.exe 1) В списке таблиц выбрать целевую таблицу и в поле **Replication type** установить его в значение **Document (to centre)**. {{:Preobrazovaniye_sushchestvuyushchey_tablitsy_v_replikatsionnuyu_docx_2020-06-19_17-01-24_img1.png?464x359}} 2) Пункт меню **Операции/Commit changes** . Скопировать скрипт из открывшегося окна. {{:Preobrazovaniye_sushchestvuyushchey_tablitsy_v_replikatsionnuyu_docx_2020-06-19_17-01-24_img2.png?455x299}}\\ и вставить его в файл со скриптом 3) Пунк меню **Операции / Replication struct / Создать/удалить ** для выбранной таблице . Скопировать скрипт из открывшегося окна и добавить его в файл со скриптом, созданным в п. 2. {{:Preobrazovaniye_sushchestvuyushchey_tablitsy_v_replikatsionnuyu_docx_2020-06-19_17-01-24_img3.png?361x636}} 4) Разделить общий скрипт на две части. Первая часть скрипта: для всех БД GRANT ALL ON LOCKER_BAGS TO REPL_ROLE; execute procedure ADD_MST_RELATION('LOCKER_BAGS', 2); ALTER TABLE LOCKER_BAGS ADD DEP_ID D_ID_INT64 DEFAULT 0 NOT NULL ; ALTER TABLE LOCKER_BAGS ADD LAST_DEP_ID D_ID_INT64 DEFAULT 0 NOT NULL ; ALTER TABLE LOCKER_BAGS ADD DEP_SRC_ID D_ID_INT64 DEFAULT 0 NOT NULL ; Вторая часть скрипта: для репликационной БД (в скриптах, галочка: "для баз с включенной репликацией") SET TERM ^ ; CREATE TRIGGER LOCKER_BAGDROPPERS_AD FOR LOCKER_BAGDROPPERS ACTIVE AFTER DELETE POSITION 10 AS DECLARE VARIABLE SEQ_ID D_INT64; DECLARE VARIABLE IS_CENT D_INT64; begin if (current_role<>'DEL_ROLE') then begin IS_CENT = GEN_ID(GEN_IS_CENTR_DB, 0); if ((:IS_CENT=1) or (current_role<>'REPL_ROLE')) then select seq_id from MST_META_CHANGES_I( 'LOCKER_BAGDROPPERS' , old.ID, 3) into :SEQ_ID; end end ^ SET TERM ; ^ SET TERM ^ ; CREATE TRIGGER LOCKER_BAGDROPPERS_AU FOR LOCKER_BAGDROPPERS ACTIVE AFTER UPDATE POSITION 10 AS DECLARE VARIABLE SEQ_ID D_INT64; DECLARE VARIABLE IS_CENT D_INT64; begin if (current_role<>'DEL_ROLE') then begin IS_CENT = GEN_ID(GEN_IS_CENTR_DB, 0); if ((:IS_CENT=1) or (current_role<>'REPL_ROLE')) then select seq_id from MST_META_CHANGES_I( 'LOCKER_BAGDROPPERS' , new.ID, 2) into :SEQ_ID; end end ^ SET TERM ; ^ SET TERM ^ ; CREATE TRIGGER LOCKER_BAGDROPPERS_AI FOR LOCKER_BAGDROPPERS ACTIVE AFTER INSERT POSITION 10 AS DECLARE VARIABLE SEQ_ID D_INT64; DECLARE VARIABLE IS_CENT D_INT64; begin if (current_role<>'DEL_ROLE') then begin IS_CENT = GEN_ID(GEN_IS_CENTR_DB, 0); if ((:IS_CENT=1) or (current_role<>'REPL_ROLE')) then select seq_id from MST_META_CHANGES_I( 'LOCKER_BAGDROPPERS' , new.ID, 1) into :SEQ_ID; end end ^ SET TERM ; ^ SET TERM ^ ; CREATE TRIGGER LOCKER_BAGDROPPERS_AA FOR LOCKER_BAGDROPPERS ACTIVE BEFORE UPDATE POSITION 15 AS begin if (current_role<>'REPL_ROLE') then begin new.LAST_DEP_ID=0; end end^ SET TERM ; ^