Niveles de aislamiento en la replicación

En esta página se describe cómo habilitar el aislamiento de transacciones en las réplicas de bases de datos de Microsoft SQL Server y MySQL en los trabajos de réplica de Cloud Data Fusion.

Cuando configuras una tarea de replicación para una base de datos, la tarea hace una captura inicial de las tablas de origen. Para asegurar la coherencia de los datos, coloca bloqueos en esas tablas.

Después de la captura inicial, se registran los cambios incrementales en el origen y se aplican al destino de BigQuery como parte del proceso de replicación continuo.

SQL Server

Para capturar los cambios en las tablas de origen de una base de datos de SQL Server, el trabajo de replicación usa un conector de Debezium. Durante la fase de snapshotting, Debezium adquiere bloqueos según el snapshot.isolation.mode configurado.

En la siguiente tabla se comparan los modos de aislamiento admitidos para los trabajos de replicación.

Modo de aislamiento Cerraduras adquiridas Coherencia de datos
read_uncommitted Ninguno No.
read_committed Bloqueos compartidos en un lote de filas a la vez Parcial. Un registro añadido puede aparecer dos veces: una en la instantánea inicial y otra en la fase de streaming.
repeatable_read
(predeterminado)
Bloqueos compartidos en todas las filas Parcial. Un registro añadido puede aparecer dos veces: una en la instantánea inicial y otra en la fase de streaming.
snapshot Ninguno Completo.
exclusive Bloqueo exclusivo en todas las tablas Completo.

Para obtener más información sobre los modos de aislamiento, consulta Definir el nivel de aislamiento de las transacciones.

De forma predeterminada, el modo de aislamiento de la captura es repeatable_read. Este modo toma bloqueos compartidos en todos los datos que se leen durante la fase de creación de la copia de seguridad. Impide que otras transacciones modifiquen las filas existentes y puede permitir la inserción de nuevos registros (consulta escalada de bloqueos).

Se recomienda la replicación con aislamiento de instantáneas si ya está habilitada en la base de datos de origen, ya que proporciona una coherencia de datos completa sin bloquear las tablas. Si no está habilitado, consulta más información sobre el impacto de los niveles de aislamiento basados en el control de versiones de las filas en el motor de base de datos de SQL Server antes de habilitarlo.

También puedes usar el read_committedmodo de aislamiento, que no bloquea las tablas durante la fase de creación de la instantánea.

Habilitar el aislamiento de la captura en un trabajo de replicación

  1. Habilita el aislamiento de la captura en la base de datos de SQL Server:

    ALTER DATABASE DATABASE_NAME
    SET ALLOW_SNAPSHOT_ISOLATION ON
    

    Sustituye DATABASE_NAME por el nombre de la base de datos de SQL Server.

  2. Asigna el valor snapshot al argumento de tiempo de ejecución snapshot.isolation.mode. Para obtener más información, consulta Pasar un argumento de tiempo de ejecución a una tarea de replicación.

MySQL

Para registrar los cambios en las tablas de origen de una base de datos MySQL, el trabajo de replicación usa un conector de Debezium. Durante la fase de snapshotting, Debezium adquiere bloqueos según el snapshot.locking.mode configurado.

De forma predeterminada, el modo de bloqueo de instantáneas es minimal. En este modo, el conector mantiene el bloqueo de lectura global durante la parte inicial de la copia de seguridad mientras lee los esquemas de la base de datos y otros metadatos. A continuación, el conector obtiene todas las filas mediante una lectura coherente, usando la transacción REPEATABLE READ, que no bloquea las tablas.

Para evitar que se bloquee, selecciona el modo none.

Como alternativa, para evitar bloqueos en las bases de datos MySQL que se ejecutan en Cloud SQL, replica desde la réplica en lugar de desde la base de datos transaccional.

Cambiar el comportamiento de bloqueo durante la creación de la instantánea de MySQL

  • Para cambiar el comportamiento del bloqueo de instantáneas en la base de datos MySQL, asigna al argumento de tiempo de ejecución, la propiedad snapshot.locking.mode, un valor de modo de bloqueo adecuado.

Para obtener más información, consulta Pasar un argumento de Debezium a una tarea de replicación.

Limitaciones

  • La replicación en Cloud Data Fusion admite la versión 1.3 del conector Debezium.

Fuentes de Oracle en Cloud Data Fusion

La replicación de fuentes de Oracle en Cloud Data Fusion se basa en Datastream. El flujo de datos no bloquea las tablas.

Siguientes pasos