мета-данные страницы
  •  

Преобразование существующей таблицы в репликационную

Ключевые слова: Как добавить репликацию таблице/сделать таблицу репликационной/репликационная таблица

Выполняется в программе DBmeta.exe

1) В списке таблиц выбрать целевую таблицу и в поле Replication type установить его в значение Document (to centre).

2) Пункт меню Операции/Commit changes . Скопировать скрипт из открывшегося окна.


и вставить его в файл со скриптом

3) Пунк меню Операции / Replication struct / Создать/удалить для выбранной таблице . Скопировать скрипт из открывшегося окна и добавить его в файл со скриптом, созданным в п. 2.

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 ; ^