Обнаружен конфликт - Не удалось выполнить откат - Нарушение ограничения PRIMARY KEY - Невозможно вставить дубликат ключа в объект - PullRequest
0 голосов
/ 16 января 2019

Я настроил SymmetricDS 3.9.15, используя Azure SQL для баз данных master и slave с двунаправленной репликацией. Я постоянно сталкиваюсь с ошибкой сбоя на канале перезагрузки. Я приложил журналы ошибок для того же.

Вот моя конфигурация sym_conflict

        insert into sym_conflict (conflict_id, target_channel_id, source_node_group_id, target_node_group_id, detect_type, detect_expression, resolve_type,ping_back, resolve_changes_only, resolve_row_only, create_time, last_update_time)
        values ('Conflict-primary-secondary-staging_prod-us', 'matter', 'primary-staging_prod-us', 'secondary-staging_prod-us', 'USE_CHANGED_DATA', null, 'FALLBACK', 'REMAINING_ROWS', 0, 1, GetDate(), GetDate());
        insert into sym_conflict (conflict_id, target_channel_id, source_node_group_id, target_node_group_id, detect_type, detect_expression, resolve_type,ping_back, resolve_changes_only, resolve_row_only, create_time, last_update_time)
        values ('Conflict-secondary-primary-staging_prod-us', 'matter', 'secondary-staging_prod-us', 'primary-staging_prod-us', 'USE_CHANGED_DATA', null, 'FALLBACK', 'REMAINING_ROWS', 0, 1, GetDate(), GetDate());

        insert into sym_conflict (conflict_id, target_channel_id, source_node_group_id, target_node_group_id, detect_type, detect_expression, resolve_type,ping_back, resolve_changes_only, resolve_row_only, create_time, last_update_time)
        values ('Conflict-primary-secondary-staging_prod-us-reload', 'reload', 'primary-staging_prod-us', 'secondary-staging_prod-us', 'USE_CHANGED_DATA', null, 'FALLBACK', 'REMAINING_ROWS', 0, 1, GetDate(), GetDate());
        insert into sym_conflict (conflict_id, target_channel_id, source_node_group_id, target_node_group_id, detect_type, detect_expression, resolve_type,ping_back, resolve_changes_only, resolve_row_only, create_time, last_update_time)
        values ('Conflict-secondary-primary-staging_prod-us-reload', 'reload', 'secondary-staging_prod-us', 'primary-staging_prod-us', 'USE_CHANGED_DATA', null, 'FALLBACK', 'REMAINING_ROWS', 0, 1, GetDate(), GetDate());

Журналы обслуживания Windows SymmetricDS ==>

        2019-01-16 19:07:48,432 INFO [secondary-staging_prod-us-001] [IncomingBatchService] [secondary-staging_prod-us-001-dataloader-2] Retrying batch 000-10228
        2019-01-16 19:08:10,848 INFO [primary-staging_prod-us-000] [DataProcessor] [primary-staging_prod-us-000-dataloader-1] Batch '6744', for node '000', for process 'data load from stage' has been processing for 60 seconds.  The following stats have been gathered: {STATEMENTCOUNT=4890, LOADMILLIS=44514, Time_Entries UPDATECOUNT=4890, STARTTIME=1547645830799, FALLBACKUPDATECOUNT=4890, FILTERMILLIS=516, LINENUMBER=4890, UPDATECOUNT=4890}
        2019-01-16 19:08:11,820 INFO [secondary-staging_prod-us-001] [DataGapFastDetector] [secondary-staging_prod-us-001-job-1] The data gap detection has been running for 60021ms, inserted 16590 of 1 new gaps
        2019-01-16 19:08:32,801 INFO [secondary-staging_prod-us-001] [DefaultDatabaseWriter] [secondary-staging_prod-us-001-dataloader-2] Failed to process insert event in batch 000-10228 on channel 'reload'.
        Failed row data was: "308845","589832","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0","2017-08-21 05:34:27.4869412",,,"0","42"
         StackTraceKey.init [ConflictException:329112692]
        org.jumpmind.symmetric.io.data.writer.ConflictException: Detected conflict while executing INSERT on DBSYNC__STAGING_PROD_Copy.dbo.TaskTimeEntriesCaching.  The primary key data was: {ID=308845}. Failed to fallback.  The original error message was: Violation of PRIMARY KEY constraint 'PK__TaskTime__3214EC2752E46644'. Cannot insert duplicate key in object 'dbo.TaskTimeEntriesCaching'. The duplicate key value is (308845).
            at org.jumpmind.symmetric.io.data.writer.AbstractDatabaseWriterConflictResolver.performFallbackToUpdate(AbstractDatabaseWriterConflictResolver.java:256)
            at org.jumpmind.symmetric.io.data.writer.DefaultTransformWriterConflictResolver.performFallbackToUpdate(DefaultTransformWriterConflictResolver.java:110)
            at org.jumpmind.symmetric.io.data.writer.AbstractDatabaseWriterConflictResolver.needsResolved(AbstractDatabaseWriterConflictResolver.java:54)
            at org.jumpmind.symmetric.io.data.writer.AbstractDatabaseWriter.write(AbstractDatabaseWriter.java:211)
            at org.jumpmind.symmetric.io.data.writer.NestedDataWriter.write(NestedDataWriter.java:64)
            at org.jumpmind.symmetric.model.ProcessInfoDataWriter.write(ProcessInfoDataWriter.java:84)
            at org.jumpmind.symmetric.io.data.writer.NestedDataWriter.write(NestedDataWriter.java:64)
            at org.jumpmind.symmetric.io.data.writer.TransformWriter.write(TransformWriter.java:201)
            at org.jumpmind.symmetric.io.data.DataProcessor.forEachDataInTable(DataProcessor.java:210)
            at org.jumpmind.symmetric.io.data.DataProcessor.forEachTableInBatch(DataProcessor.java:177)
            at org.jumpmind.symmetric.io.data.DataProcessor.process(DataProcessor.java:123)
            at org.jumpmind.symmetric.service.impl.DataLoaderService$LoadIntoDatabaseOnArrivalListener$2.call(DataLoaderService.java:1039)
            at org.jumpmind.symmetric.service.impl.DataLoaderService$LoadIntoDatabaseOnArrivalListener$2.call(DataLoaderService.java:1016)
            at java.util.concurrent.FutureTask.run(FutureTask.java:266)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
        2019-01-16 19:08:33,650 ERROR [secondary-staging_prod-us-001] [ManageIncomingBatchListener] [secondary-staging_prod-us-001-dataloader-2] Failed to load batch 000-10228 StackTraceKey [ConflictException:329112692]
        2019-01-16 19:08:33,759 ERROR [primary-staging_prod-us-000] [AcknowledgeService] [qtp1552978964-13] The outgoing batch 001-10228 failed: [CONFLICT,-999] Detected conflict while executing INSERT on DBSYNC__STAGING_PROD_Copy.dbo.TaskTimeEntriesCaching.  The primary key data was: {ID=308845}. Failed to fallback.  The original error message was: Violation of PRIMARY KEY constraint 'PK__TaskTime__3214EC2752E46644'. Cannot insert duplicate key in object 'dbo.TaskTimeEntriesCaching'. The duplicate key value is (308845).

Привет

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

Ответы [ 2 ]

0 голосов
/ 17 января 2019

У меня был следующий уникальный индекс в таблице TaskTimeEntriesCaching, который вызывал сбой аварийного отката.

    /****** Object:  Index [UC_TaskTimeEntriesCaching_TaskID]    Script Date: 17-01-2019 12:21:57 ******/
    ALTER TABLE [dbo].[TaskTimeEntriesCaching] ADD  CONSTRAINT [UC_TaskTimeEntriesCaching_TaskID] UNIQUE NONCLUSTERED 
    (
        [TaskID] ASC,
        [DeletedFlag] ASC,
        [sid] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    GO

Также у меня была служба Windows SymmetricDS в остановленном состоянии в течение нескольких дней, и у меня был канал 'материи', параллельный каналу по умолчанию. Поэтому мне пришлось отбросить этот уникальный индекс, чтобы завершить канал перезагрузки.

Привет

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

0 голосов
/ 16 января 2019

Я бы удалил конфликты на вашем канале перезагрузки. Вам не нужно обнаруживать конфликты на канале перезагрузки. По умолчанию при перезагрузке будут вставлены данные, а в случае сбоя произойдет возврат к обновлению, позволяющему продолжить выполнение остальной части пакета.

...