Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Streams репликация в разные схемы  [new]
haXbat
Member

Откуда:
Сообщений: 445
Имеется две базы Oracle 11gR2 (said и dest). Соответственно в каждой из них есть схемы policy и repa. Необходимо между ними настроить двустороннюю репликацию части таблицы по условию (filial='03'). Настраиваю dblink, создаю пользователя strmadmin c привилегиями, перевожу базу в архив-лог. Запускаю следующие скрипты:
+
/**************************/
--SAID
begin
dbms_streams_adm.set_up_queue(
  queue_table => 'apply_said_4001_qtab',
  queue_name  => 'apply_said_4001_q',
  queue_user  => 'strmadmin');
end;

begin
dbms_streams_adm.set_up_queue(
  queue_table => 'capture_said_4001_qtab',
  queue_name  => 'capture_said_4001_q',
  queue_user  => 'strmadmin');
end;

/**************************/
--DEST

begin
dbms_streams_adm.set_up_queue(
  queue_table => 'apply_dest_4001_qtab',
  queue_name  => 'apply_dest_4001_q',
  queue_user  => 'strmadmin');
end;

begin
dbms_streams_adm.set_up_queue(
  queue_table => 'capture_dest_4001_qtab',
  queue_name  => 'capture_dest_4001_q',
  queue_user  => 'strmadmin');
end;

/**************************/
--SAID

begin
dbms_streams_adm.add_table_rules(
table_name => 'policy.tb004001',
streams_type    =>'capture',
streams_name =>'capture_4001_strm',
queue_name =>'capture_said_4001_q',
include_dml => true,
include_ddl => true,
inclusion_rule =>true
);
end;

begin
dbms_streams_adm.add_table_rules(
table_name => 'policy.tb004001',
streams_type    =>'apply',
streams_name =>'apply_said_4001',
queue_name =>'apply_said_4001_q',
include_dml => true,
include_ddl => true,
source_database    => 'dest'
);
end;

/**************************/
--DEST

begin
dbms_streams_adm.add_table_rules(
table_name => 'repa.tb004001',
streams_type    =>'capture',
streams_name =>'capture_4001_strm',
queue_name =>'capture_dest_4001_q',
include_dml => true,
include_ddl => true,
inclusion_rule =>true
);
end;

begin
dbms_streams_adm.add_table_rules(
table_name => 'repa.tb004001',
streams_type    =>'apply',
streams_name =>'apply_dest_4001',
queue_name =>'apply_dest_4001_q',
include_dml => true,
include_ddl => true,
source_database    => 'said'
);
end;

/****************************/
--SAID

begin
dbms_streams_adm.add_subset_propagation_rules(
table_name  =>'policy.tb004001',
dml_condition => 'filial=''03''',
streams_name =>'prop_said_to_dest',
source_queue_name =>'capture_said_4001_q',
destination_queue_name => 'apply_dest_4001_q@dest',
source_database => 'said'
);
end;

begin
    dbms_apply_adm.set_parameter (
        apply_name    => 'apply_said_4001',
        parameter    => 'disable_on_error',
        value    => 'N');
end;

/****************************/
--DEST

declare
    v_scn    number;
begin
    v_scn := dbms_flashback.get_system_change_number();
    dbms_apply_adm.set_schema_instantiation_scn@said (
    source_schema_name    => 'repa',
    source_database_name    => 'dest',
    instantiation_scn    => v_scn,
    recursive                => true);    
end;

/****************************/
--SAID

select dbms_flashback.get_system_change_number() from dual;

--Получил 208230643, выполняю экспорт/импорт таблицы из схемы POLICY в схеме REPA
--которая в свою очередь располагается в табличных пространствах R00 и REPATS соответственно

expdp policy/pass@said tables=tb004001 directory=expdir dumpfile=tb004001.dmp logfile=tb004001.log flashback_scn=208230643

impdp system/pass@dest remap_schema=policy:repa remap_tablespace=r00:repats directory=impdir dumpfile=tr004001.dmp logfile=tr004001.log 

/****************************/
--DEST

begin
dbms_streams_adm.add_subset_propagation_rules(
table_name  =>'repa.tb004001',
dml_condition => '1=1',
streams_name =>'prop_dest_to_said',
source_queue_name =>'capture_dest_4001_q',
destination_queue_name => 'apply_said_4001_q@said',
source_database => 'dest'
);
end;

begin
    dbms_apply_adm.set_parameter (
        apply_name    => 'apply_dest_4001',
        parameter    => 'disable_on_error',
        value    => 'N');
end;

begin
    dbms_apply_adm.start_apply (
        apply_name    => 'APPLY_dest_4001');
end;


begin
    dbms_capture_adm.start_capture (
        capture_name    => 'capture_4001_strm');
end;

/****************************/
--SAID

begin
    dbms_apply_adm.start_apply (
        apply_name    => 'apply_said_4001');
end;

begin
    dbms_capture_adm.start_capture (
        capture_name    => 'capture_4001_strm');
end;

В результате EM показывает, что все процессы работают корректно (нет ошибок), но репликация не происходит.
В случае, когда вместо схемы repa используется схема policy (т.е. названия схем в двух базах совпадают) приведенный выше скрипт (repa меняем на policy) создает правильную настройку, репликация в обе стороны выполняется. В чем ошибка в случае для разных схем?
27 окт 11, 16:56    [11510870]     Ответить | Цитировать Сообщить модератору
 Re: Streams репликация в разные схемы  [new]
dimacrat
Member

Откуда: Москва
Сообщений: 305
haXbat,
Нужно переименовывать схему при помощи DBMS_STREAMS_ADM.RENAME_SCHEMA либо на стороне Capture, либо на стороне Apply.
27 окт 11, 17:03    [11510951]     Ответить | Цитировать Сообщить модератору
 Re: Streams репликация в разные схемы  [new]
haXbat
Member

Откуда:
Сообщений: 445
dimacrat,

Изменил настройку процессов apply на каждой из баз (в базе said - схема policy, в базе dest - схема repa).
+
--SAID

DECLARE
   V010_DML_RULE   VARCHAR2 (40);
   V010_DDL_RULE   VARCHAR2 (40);
BEGIN
   DBMS_STREAMS_ADM.add_table_rules (table_name        => 'policy.tb004001',
                                     streams_type      => 'apply',
                                     streams_name      => 'apply_said_4001',
                                     queue_name        => 'apply_said_4001_q',
                                     include_dml       => TRUE,
                                     include_ddl       => FALSE,
                                     source_database   => 'dest',
                                     dml_rule_name     => V010_DML_RULE,
                                     ddl_rule_name     => V010_DDL_RULE);

   DBMS_STREAMS_ADM.RENAME_SCHEMA (rule_name          => V010_DML_RULE,
                                   from_schema_name   => 'repa',
                                   to_schema_name     => 'policy',
                                   step_number        => 0,
                                   operation          => 'add');
END;

--DEST

DECLARE
   V010_DML_RULE   VARCHAR2 (40);
   V010_DDL_RULE   VARCHAR2 (40);
BEGIN
   DBMS_STREAMS_ADM.add_table_rules (table_name        => 'repa.tb004001',
                                     streams_type      => 'apply',
                                     streams_name      => 'apply_ergo_4001',
                                     queue_name        => 'apply_ergo_4001_q',
                                     include_dml       => TRUE,
                                     include_ddl       => FALSE,
                                     source_database   => 'said',
                                     dml_rule_name     => V010_DML_RULE,
                                     ddl_rule_name     => V010_DDL_RULE);

   DBMS_STREAMS_ADM.RENAME_SCHEMA (rule_name          => V010_DML_RULE,
                                   from_schema_name   => 'policy',
                                   to_schema_name     => 'repa',
                                   step_number        => 0,
                                   operation          => 'add');
END;

Репликация по-прежнему не работает ни в одну из сторон; EM показывает, что все streams процессы работают без ошибок.
28 окт 11, 10:44    [11514076]     Ответить | Цитировать Сообщить модератору
 Re: Streams репликация в разные схемы  [new]
haXbat
Member

Откуда:
Сообщений: 445
haXbat,

Решил проблему с помощью Multi-master replication + materialized views, полностью отказавшись от Streams.
31 окт 11, 18:10    [11528713]     Ответить | Цитировать Сообщить модератору
 Re: Streams репликация в разные схемы  [new]
Barkovsky
Member

Откуда: Санкт-Петербург
Сообщений: 2655
Дауншифтинг)
2 ноя 11, 17:39    [11541724]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить