Las políticas de resolución de conflictos controlan cómo DTS maneja los conflictos de datos en las instancias de sincronización bidireccional para mantener estables las tareas de sincronización y garantizar la consistencia de los datos.
Funcionamiento
En la sincronización bidireccional, ambos nodos pueden recibir escrituras simultáneamente. Cuando el mismo registro se modifica en ambos nodos casi al mismo tiempo, se produce un conflicto. DTS detecta estos conflictos y los resuelve según la política que configure.
Detección de conflictos: DTS identifica los conflictos por tipo. El comportamiento varía dependiendo de si la instancia es ApsaraDB for MongoDB u otra base de datos compatible:
Sincronización bidireccional de ApsaraDB for MongoDB:
|
Tipo de conflicto |
Condición de activación |
Comportamiento de DTS |
|
Conflicto de unicidad en INSERT |
Una operación INSERT viola una restricción única en la instancia de destino |
DTS ignora automáticamente la operación INSERT |
|
Discrepancia de registro en UPDATE |
El registro por actualizar no existe o entra en conflicto con un registro existente en la instancia de destino |
DTS ignora automáticamente la operación UPDATE |
|
Registro faltante en DELETE |
El registro por eliminar no existe en la instancia de destino |
DTS ignora automáticamente la operación DELETE |
Otras bases de datos compatibles:
|
Tipo de conflicto |
Condición de activación |
Comportamiento de DTS |
|
Conflicto de unicidad en INSERT |
Se inserta un registro con la misma clave primaria en ambos nodos casi al mismo tiempo |
Uno de los registros insertados falla en la sincronización debido a la clave primaria duplicada |
|
Discrepancia de registro en UPDATE |
El registro por actualizar no existe o entra en conflicto con un registro existente en la instancia de destino |
DTS convierte la operación UPDATE en INSERT; entonces pueden ocurrir conflictos de unicidad |
|
Registro faltante en DELETE |
El registro por eliminar no existe en la instancia de destino |
DTS ignora la operación DELETE sin importar la política de resolución de conflictos configurada |
Resolución de conflictos: DTS responde a cada conflicto detectado según la política configurada. Hay dos niveles de política disponibles:
Política de resolución de conflictos global: se aplica a todos los objetos de la tarea de sincronización.
Política de resolución de conflictos independiente: se aplica a columnas específicas y anula la política global para dichas columnas.
DTS no garantiza que la detección evite todos los conflictos. Las diferencias de hora del sistema entre los nodos y la latencia de sincronización pueden permitir que las escrituras conflictivas pasen desapercibidas. Para evitar conflictos, asegúrese de actualizar los registros con la misma clave primaria, clave primaria de negocio o clave única en un solo nodo de sincronización a la vez. Si los registros se actualizan en ambos nodos, DTS responderá a los conflictos según la política de resolución configurada para la tarea.
Instancias compatibles
|
Tipo de política |
Instancias compatibles |
|
Política de resolución de conflictos global |
Todas las instancias de sincronización bidireccional, excepto las instancias Tair (Enterprise Edition). Para consultar las instancias compatibles, consulte Two-way synchronization. |
|
Política de resolución de conflictos independiente |
Sincronización bidireccional entre bases de datos MySQL; sincronización bidireccional entre bases de datos PolarDB for MySQL |
Elegir una política de resolución de conflictos
Políticas globales
|
Política |
Comportamiento |
Cuándo usarla |
|
Overwrite |
Sobrescribe el registro en conflicto en la instancia de destino con el registro entrante |
Los datos entrantes siempre deben tener prioridad; el estado del destino es prescindible |
|
Ignore |
Omite la sentencia conflictiva; la tarea continúa con el registro existente en la instancia de destino |
Los datos del destino tienen prioridad; los cambios entrantes deben descartarse en caso de conflicto |
|
TaskFailed |
Detiene la tarea de sincronización y entra en estado de error, lo que requiere intervención manual |
Los conflictos nunca deben pasar desapercibidos; cada conflicto requiere revisión humana |
Políticas independientes (nivel de columna)
Las políticas independientes se aplican a columnas específicas en instancias de sincronización bidireccional de MySQL y PolarDB for MySQL. Admiten las mismas tres opciones que las políticas globales, además de dos opciones de comparación numérica:
|
Política |
Comportamiento |
Cuándo usarla |
|
Overwrite |
Sobrescribe el valor de la columna en conflicto en la instancia de destino |
El valor entrante siempre debe tener prioridad |
|
Ignore |
Conserva el valor existente en la instancia de destino |
El valor del destino tiene prioridad |
|
TaskFailed |
Detiene la tarea de sincronización; requiere intervención manual |
Cada conflicto requiere revisión |
|
UseMax |
Escribe el mayor de los dos valores en conflicto en la instancia de destino. Si el registro de destino está ausente o el tipo de columna es incompatible, recurre a Overwrite. |
Contadores, puntuaciones o cualquier columna numérica donde deba prevalecer el valor mayor; por ejemplo, para rastrear un máximo acumulado |
|
UseMin |
Escribe el menor de los dos valores en conflicto en la instancia de destino. Si el registro de destino está ausente o el tipo de columna es incompatible, recurre a Ignore. |
Columnas numéricas donde deba prevalecer el valor menor; por ejemplo, para rastrear la marca de tiempo más antigua |
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una instancia de sincronización bidireccional con Synchronization Topology establecida en Two-way Synchronization
Acceso a la fase Configure Objects para la tarea directa o inversa en la instancia de sincronización bidireccional
Notas de uso
Para la sincronización bidireccional entre instancias de ApsaraDB for MongoDB, solo se admite la política Ignore. DTS ignora automáticamente las operaciones INSERT, UPDATE y DELETE conflictivas.
Las políticas de resolución de conflictos independientes se aplican únicamente a la sincronización incremental.
La política global no afecta a las columnas con una política de resolución de conflictos independiente.
Si no configura una política de resolución de conflictos independiente durante la configuración inicial, no podrá agregar una posteriormente al modificar los objetos de sincronización.
Si una tarea de sincronización se pausa o reinicia y hay un retraso, la política configurada no surte efecto durante dicho periodo; DTS sobrescribe los datos en la instancia de destino de forma predeterminada.
Configurar una política de resolución de conflictos global
En la fase Configure Objects, seleccione una Global Conflict Resolution Policy.
Para la sincronización bidireccional entre instancias de ApsaraDB for MongoDB, solo Ignore está disponible.

Configurar una política de resolución de conflictos independiente
Las políticas de resolución de conflictos independientes se configuran en la base de datos o en la tabla.
En la base de datos
En Selected Objects, haga clic derecho en la base de datos que desea sincronizar.
En el cuadro de diálogo, bajo Independent Conflict Resolution Policy, establezca Enable Independent Conflict Resolution Policy en Yes.
Seleccione una Conflict Resolution Policy.
Haga clic en Columns for Conflict Detection a la derecha de Add Column.
-
En el campo Column Name, introduzca el nombre de la columna.
Si la columna utiliza la función de asignación, introduzca el nombre de la columna asignada. Para agregar más columnas, haga clic nuevamente en Columns for Conflict Detection.
Haga clic en OK.
En la tabla
En Selected Objects, haga clic derecho en la tabla que desea sincronizar.
En el cuadro de diálogo, bajo Column, seleccione Independent Conflict Resolution Policy.
-
En Columns for Conflict Detection, seleccione las columnas a las que desea asignar una política independiente.
Las columnas con claves primarias y restricciones únicas están seleccionadas de forma predeterminada.
-
Seleccione una Conflict Resolution Policy.
Si el sistema selecciona automáticamente Columns for Conflict Detection, UseMax y UseMin no estarán disponibles.
Haga clic en OK.
Preguntas frecuentes
¿Puedo modificar una política de resolución de conflictos después de que la tarea esté en ejecución?
Para cambiar la política de resolución de conflictos global, modify the objects to be synchronized. No es posible agregar políticas de resolución de conflictos independientes después de la configuración inicial.