As políticas de resolução de conflitos definem como o DTS trata conflitos de dados em instâncias de sincronização bidirecional para manter a estabilidade das tarefas e a consistência dos dados.
Como funciona
Na sincronização bidirecional, ambos os nós podem receber gravações simultaneamente. Ocorre um conflito quando o mesmo registro é modificado em ambos os nós quase ao mesmo tempo. O DTS detecta esses conflitos e os resolve conforme a política configurada.
Detecção de conflitos — O DTS identifica os conflitos por tipo. O comportamento varia dependendo se a instância é ApsaraDB for MongoDB ou outro banco de dados compatível:
Sincronização bidirecional do ApsaraDB for MongoDB:
|
Tipo de conflito |
Condição de acionamento |
Comportamento do DTS |
|
Conflito de unicidade em INSERT |
Uma operação INSERT viola uma restrição de unicidade na instância de destino |
O DTS ignora automaticamente a operação INSERT |
|
Incompatibilidade de registro em UPDATE |
O registro a ser atualizado não existe ou entra em conflito com um registro existente na instância de destino |
O DTS ignora automaticamente a operação UPDATE |
|
Registro ausente em DELETE |
O registro a ser excluído não existe na instância de destino |
O DTS ignora automaticamente a operação DELETE |
Outros bancos de dados compatíveis:
|
Tipo de conflito |
Condição de acionamento |
Comportamento do DTS |
|
Conflito de unicidade em INSERT |
Um registro com a mesma chave primária é inserido em ambos os nós quase simultaneamente |
A sincronização de um dos registros inseridos falha devido à chave primária duplicada |
|
Incompatibilidade de registro em UPDATE |
O registro a ser atualizado não existe ou entra em conflito com um registro existente na instância de destino |
O DTS converte o UPDATE em INSERT; podem ocorrer conflitos de unicidade subsequentes |
|
Registro ausente em DELETE |
O registro a ser excluído não existe na instância de destino |
O DTS ignora a operação DELETE, independentemente da política de resolução de conflitos configurada |
Resolução de conflitos — O DTS responde a cada conflito detectado com base na política configurada. Há dois níveis de política disponíveis:
Política global de resolução de conflitos — aplica-se a todos os objetos da tarefa de sincronização
Política independente de resolução de conflitos — aplica-se a colunas específicas e substitui a política global para essas colunas
O DTS não garante que a detecção evite todos os conflitos. Diferenças de horário do sistema entre os nós de sincronização e latência de sincronização podem permitir que gravações conflitantes passem despercebidas. Para evitar conflitos, atualize registros com a mesma chave primária, chave primária de negócio ou chave única em apenas um nó de sincronização por vez. Se houver atualização de registros em ambos os nós, o DTS responderá aos conflitos com base na política de resolução configurada para a tarefa.
Instâncias compatíveis
|
Tipo de política |
Instâncias compatíveis |
|
Política global de resolução de conflitos |
Todas as instâncias de sincronização bidirecional, exceto instâncias Tair (Enterprise Edition). Para ver as instâncias compatíveis, consulte Sincronização bidirecional. |
|
Política independente de resolução de conflitos |
Sincronização bidirecional entre bancos de dados MySQL; sincronização bidirecional entre bancos de dados PolarDB for MySQL |
Escolha uma política de resolução de conflitos
Políticas globais
|
Política |
Comportamento |
Quando usar |
|
Overwrite |
Substitui o registro em conflito na instância de destino pelo registro recebido |
Os dados recebidos devem sempre prevalecer; o estado do destino é descartável |
|
Ignore |
Ignora a instrução conflitante; a tarefa continua usando o registro existente na instância de destino |
Os dados de destino têm prioridade; alterações recebidas devem ser descartadas em caso de conflito |
|
TaskFailed |
Interrompe a tarefa de sincronização e a coloca em estado de falha, exigindo intervenção manual |
Conflitos nunca devem passar despercebidos; todo conflito requer revisão humana |
Políticas independentes (nível de coluna)
As políticas independentes aplicam-se a colunas específicas em instâncias de sincronização bidirecional do MySQL e PolarDB for MySQL. Elas oferecem as mesmas três opções das políticas globais, além de duas opções de comparação numérica:
|
Política |
Comportamento |
Quando usar |
|
Overwrite |
Substitui o valor da coluna em conflito na instância de destino |
O valor recebido deve sempre prevalecer |
|
Ignore |
Mantém o valor existente na instância de destino |
O valor de destino tem prioridade |
|
TaskFailed |
Interrompe a tarefa de sincronização; exige intervenção manual |
Todo conflito requer revisão |
|
UseMax |
Grava o maior dos dois valores em conflito na instância de destino. Se o registro de destino estiver ausente ou o tipo de coluna for incompatível, reverte para Overwrite. |
Contadores, pontuações ou qualquer coluna numérica em que o valor maior deva prevalecer — por exemplo, rastreamento de valor máximo acumulado |
|
UseMin |
Grava o menor dos dois valores em conflito na instância de destino. Se o registro de destino estiver ausente ou o tipo de coluna for incompatível, reverte para Ignore. |
Colunas numéricas em que o valor menor deva prevalecer — por exemplo, rastreamento de timestamp mais antigo |
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância de sincronização bidirecional com Synchronization Topology definida como Two-way Synchronization
Acesso à fase Configure Objects da tarefa direta ou reversa na instância de sincronização bidirecional
Observações de uso
Para sincronização bidirecional entre instâncias do ApsaraDB for MongoDB, apenas a política Ignore é compatível. O DTS ignora automaticamente operações INSERT, UPDATE e DELETE conflitantes.
As políticas independentes de resolução de conflitos aplicam-se apenas à sincronização incremental.
Colunas com política independente de resolução de conflitos não são afetadas pela política global.
Se você não configurar uma política independente de resolução de conflitos durante a configuração inicial, não será possível adicioná-la posteriormente ao modificar objetos de sincronização.
Se uma tarefa de sincronização for pausada ou reiniciada e houver atraso, a política configurada não entrará em vigor durante o período de atraso. Nesse caso, o DTS substituirá os dados na instância de destino por padrão.
Configure uma política global de resolução de conflitos
Na fase Configure Objects, selecione uma Global Conflict Resolution Policy.
Para sincronização bidirecional entre instâncias do ApsaraDB for MongoDB, apenas Ignore está disponível.

Configure uma política independente de resolução de conflitos
Defina as políticas independentes de resolução de conflitos no nível de banco de dados ou tabela.
No nível de banco de dados
Em Selected Objects, clique em com o botão direito no banco de dados que deseja sincronizar.
Na caixa de diálogo, em Independent Conflict Resolution Policy, defina Enable Independent Conflict Resolution Policy como Yes.
Selecione uma Conflict Resolution Policy.
Clique em Columns for Conflict Detection no lado direito de Add Column.
-
No campo Column Name, insira o nome da coluna.
Se a coluna usar o recurso de mapeamento, insira o nome da coluna mapeada. Para adicionar mais colunas, clique em Columns for Conflict Detection novamente.
Clique em OK.
No nível de tabela
Em Selected Objects, clique em com o botão direito na tabela que deseja sincronizar.
Na caixa de diálogo, em Column, selecione Independent Conflict Resolution Policy.
-
Em Columns for Conflict Detection, selecione as colunas às quais deseja atribuir uma política independente.
Colunas com chaves primárias e restrições de unicidade são selecionadas por padrão.
-
Selecione uma Conflict Resolution Policy.
Se Columns for Conflict Detection for selecionado automaticamente pelo sistema, UseMax e UseMin não estarão disponíveis.
Clique em OK.
Perguntas frequentes
Posso modificar uma política de resolução de conflitos depois que a tarefa estiver em execução?
Para alterar a política global de resolução de conflitos, modifique os objetos a serem sincronizados. Não é possível adicionar políticas independentes de resolução de conflitos após a configuração inicial.