En esta página, se describe cómo habilitar el aislamiento de transacciones en las instantáneas de bases de datos de Microsoft SQL Server y MySQL en los trabajos de replicación de Cloud Data Fusion.
Cuando configuras un trabajo de replicación para una base de datos, este toma una instantánea inicial de las tablas de origen. Para garantizar la coherencia de los datos, coloca bloqueos en esas tablas.
Después de la instantánea inicial, se capturan los cambios incrementales en la fuente y se aplican al destino de BigQuery como parte del proceso de replicación en curso.
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 snapshotting
, Debezium adquiere bloqueos según el snapshot.isolation.mode
configurado.
En la siguiente tabla, se comparan los modos de aislamiento admitidos para las tareas de replicación.
Modo de aislamiento | Cerraduras adquiridas | Coherencia de los datos |
---|---|---|
read_uncommitted |
Ninguno | No. |
read_committed |
Bloqueos compartidos en un lote de filas a la vez | Parcial. Un registro agregado puede aparecer dos veces: una vez en la instantánea inicial y una vez en la fase de transmisión. |
repeatable_read (predeterminada) |
Bloqueos compartidos en todas las filas | Parcial. Un registro agregado puede aparecer dos veces: una vez en la instantánea inicial y una vez en la fase de transmisión. |
snapshot |
Ninguno | Completo. |
exclusive |
Bloqueo exclusivo en todas las tablas | Completo. |
Para obtener más información sobre los modos de aislamiento, consulta Cómo configurar el nivel de aislamiento de transacciones.
De forma predeterminada, el modo de aislamiento de instantáneas es repeatable_read
. Este modo toma bloqueos compartidos en todos los datos que se leen durante la fase de creación de instantáneas. Evita que otras transacciones modifiquen las filas existentes y, en teoría, puede permitir la inserción de registros nuevos (consulta derivación 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 coherencia de datos completa sin bloquear las tablas. Si no está habilitado, obtén más información sobre el impacto de los niveles de aislamiento basados en el control de versiones de filas en el Motor de base de datos de SQL Server antes de habilitarlo.
Como alternativa, usa el modo de aislamiento read_committed
, que no bloquea las tablas durante la fase de creación de instantáneas.
Habilita el aislamiento de instantáneas en un trabajo de replicación
Habilita el aislamiento de instantánea en la base de datos de SQL Server:
ALTER DATABASE DATABASE_NAME SET ALLOW_SNAPSHOT_ISOLATION ON
Reemplaza
DATABASE_NAME
por el nombre de la base de datos de SQL Server.Establece el argumento del entorno de ejecución
snapshot.isolation.mode
ensnapshot
. Para obtener más información, consulta Cómo pasar un argumento de entorno de ejecución a un trabajo de replicación.
MySQL
Para capturar los cambios en las tablas de origen de una base de datos de MySQL, el trabajo de replicación usa un conector de Debezium. Durante la fase 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 para la parte inicial de la instantánea mientras lee los esquemas de la base de datos y otros metadatos. Luego, el conector recupera todas las filas a través de una lectura coherente, con la transacción REPEATABLE READ
, que no bloquea las tablas.
Para evitar bloqueos, establece el modo en none
.
Como alternativa, para evitar bloqueos en las bases de datos de MySQL que se ejecutan en Cloud SQL, replica desde la réplica en lugar de la base de datos transaccional.
Cambia el comportamiento de bloqueo durante la instantánea de MySQL
- Para cambiar el comportamiento de bloqueo de instantáneas en la base de datos de MySQL, establece el argumento de tiempo de ejecución, la propiedad
snapshot.locking.mode
, en un valor apropiado de modo de bloqueo.
Para obtener más información, consulta Cómo pasar un argumento de Debezium a un trabajo 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 realiza con Datastream. Datastream no bloquea las tablas.
¿Qué sigue?
- Obtén más información sobre la replicación.