SymmetricDS изменить ссылку на внешний ключ таблицы

При запуске SymmetricDS для синхронизации базы данных для базы данных SQL Azure для двух баз данных Azure SQL, а именно Staging_Prod и DBSYNC_STAGING_PROD, я сталкиваюсь со следующей ошибкой.

2018-10-22 06:50:46,706 WARN [secondary-staging_prod-us-001] [JdbcSqlTemplate] [secondary-staging_prod-us-001-dataloader-6] Foreign key 'FK_AccessMaster_ToFunctions' references invalid table 'STAGING_PROD.Functions'..  Failed to execute: ALTER TABLE "dbo"."AccessMaster"
    ADD CONSTRAINT "FK_AccessMaster_ToFunctions" FOREIGN KEY ("FunctionID") REFERENCES "STAGING_PROD"."Functions" ("id")
2018-10-22 06:50:46,706 ERROR [secondary-staging_prod-us-001] [DefaultDatabaseWriter] [secondary-staging_prod-us-001-dataloader-6] Failed to alter table using the following xml: <?xml version="1.0"?>
<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database">
<database name="dataextractor" schema="dbo">
    <table name="AccessMaster">
        <column name="Id" primaryKey="true" required="true" type="INTEGER" size="10" autoIncrement="true">
            <platform-column name="mssql2008" type="int identity" size="10"/>
        </column>
        <column name="HTML_UI_ID" required="true" type="VARCHAR" size="50">
            <platform-column name="mssql2008" type="varchar" size="50"/>
        </column>
        <column name="Name" required="true" type="VARCHAR" size="50">
            <platform-column name="mssql2008" type="varchar" size="50"/>
        </column>
        <column name="Value" required="true" type="BIGINT" size="19">
            <platform-column name="mssql2008" type="bigint" size="19"/>
        </column>
        <column name="FunctionID" required="true" type="INTEGER" size="10">
            <platform-column name="mssql2008" type="int" size="10"/>
        </column>
        <foreign-key name="FK_AccessMaster_ToFunctions" foreignTable="Functions" foreignTableCatalog="STAGING_PROD" foreignTableSchema="">
            <reference local="FunctionID" foreign="ID"/>
        </foreign-key>
        <unique name="AK_AccessMaster_HTML_UI_ID_FunctionID">
            <unique-column name="HTML_UI_ID"/>
            <unique-column name="FunctionID"/>
        </unique>
    </table>
</database> StackTraceKey [SqlException:1229404539]
2018-10-22 06:50:46,752 ERROR [secondary-staging_prod-us-001] [ManageIncomingBatchListener] [secondary-staging_prod-us-001-dataloader-6] Failed to load batch 000-11 StackTraceKey [SqlException:1229404539]

Таблицы конфигурации SymmetricDS выглядят следующим образом.

insert into sym_node_group (node_group_id) values ('primary-staging_prod-us');
insert into sym_node_group (node_group_id) values ('secondary-staging_prod-us');

insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('primary-staging_prod-us', 'secondary-staging_prod-us', 'W');
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('secondary-staging_prod-us', 'primary-staging_prod-us', 'P');


insert into sym_trigger 
(trigger_id,source_catalog_name,source_schema_name, source_table_name, channel_id, sync_on_insert, sync_on_update, sync_on_delete, last_update_time,create_time, sync_on_incoming_batch)
values('TriggerAll', null, 'dbo', '*', 'matter', 1 , 1, 1, GetDate(), GetDate(), 1);


insert into sym_router 
(router_id,source_node_group_id,target_node_group_id,target_catalog_name,target_schema_name,target_table_name,router_type,create_time,last_update_time)
values('primary_2_secondary-staging_prod-us', 'primary-staging_prod-us', 'secondary-staging_prod-us', null, 'dbo', '*', 'default',GetDate(), GetDate());

insert into sym_router 
(router_id,source_node_group_id,target_node_group_id,target_catalog_name,target_schema_name,target_table_name,router_type,create_time,last_update_time)
values('secondary_2_primary-staging_prod-us', 'secondary-staging_prod-us', 'primary-staging_prod-us', null, 'dbo', '*', 'default', GetDate(), GetDate());


insert into sym_trigger_router (trigger_id,router_id,initial_load_order,last_update_time,create_time)
values('TriggerAll','primary_2_secondary-staging_prod-us', 100, current_timestamp,current_timestamp);
insert into sym_trigger_router (trigger_id,router_id,initial_load_order,last_update_time,create_time)
values('TriggerAll','secondary_2_primary-staging_prod-us', 200, current_timestamp, current_timestamp); 

Но если я выполняю команду alter в SQL Server Management Studio, как показано ниже, с правильной целевой схемой, все работает нормально.

ALTER TABLE "dbo"."AccessMaster"
    ADD CONSTRAINT "FK_AccessMaster_ToFunctions" FOREIGN KEY ("FunctionID") REFERENCES "DBSYNC_STAGING_PROD"."dbo"."Functions" ("id")

Версия SymmetricDS ==> симметричный-сервер-3.9.14

Я думаю, что проблема возникает, поскольку я не могу указать имя целевой схемы/каталога. Не могли бы вы провести меня через этап настройки в новой версии symmetrDS.

С уважением Раджат Агравал


person Rajat Agrawal    schedule 22.10.2018    source источник
comment
sym_router. target_catalog_name устанавливается на null. Вы пытались установить фактическое имя каталога целевой базы данных для соответствующего маршрутизатора?   -  person Boris Pavlović    schedule 22.10.2018
comment
Я изменил столбец target_catalog_name в таблице sym_router, но он начал выдавать следующую ошибку. 22.10.2018, 09:51:31,804 ОШИБКА [secondary-staging_prod-us-001] [RegistrationService] [secondary-staging_prod-us-001-job-2] Непредвиденная ошибка во время регистрации: не удалось получить таблицы для триггера с идентификатором TriggerAll StackTraceKey.init java.lang.RuntimeException: не удалось получить таблицы для триггера с идентификатором TriggerAll Причина: org.jumpmind.db.sql.SqlException: инструкция USE не поддерживается для переключения между базами данных. Используйте новое подключение для подключения к другой базе данных.   -  person Rajat Agrawal    schedule 22.10.2018
comment
Для таких крайних случаев я бы порекомендовал проверить исходный код symmetricds, включить удаленную отладку, подключиться к вашей среде IDE и выполнить удаленную отладку.   -  person Boris Pavlović    schedule 22.10.2018


Ответы (1)


Проблема была решена. Похоже, что в SymmetricDS версии 3.9.14, выпущенной 3 октября 2018 г., есть ошибка. Я только что загрузил стабильную версию 3.8.40, выпущенную 9 августа 2018 г., и ошибка исчезла, и я могу синхронизировать изменения схемы без внешнего ключа. ошибка ссылок.

С уважением

Раджат Агравал

person Rajat Agrawal    schedule 23.10.2018