复制中的隔离级别

本页面介绍了如何在 Microsoft SQL 中启用事务隔离。 Cloud Data Fusion 中的服务器和 MySQL 数据库快照 复制作业。

当您为数据库设置复制作业时,该作业会接受 源表的初始快照。为确保数据一致性,请将 这些表上应用了锁定

在初始快照之后,系统会在持续的复制过程中捕获源端的增量更改,并将其应用于 BigQuery 目标。

SQL Server

要捕获 SQL Server 数据库中源表中的更改, 复制作业使用 Debezium 连接器。在 snapshotting 阶段, Debezium 根据配置的 snapshot.isolation.mode

下表比较了复制作业支持的隔离模式。

隔离模式 获得的锁定次数 数据一致性
read_uncommitted 不需要
read_committed 一次对一批行进行共享锁定 部分支持。添加的记录可以出现两次:在初始页 快照一次,在流式传输阶段执行一次
repeatable_read
(默认)
对所有行的共享锁 部分支持。添加的记录可以出现两次:在初始页 快照一次,在流式传输阶段执行一次
snapshot 完整。
exclusive 所有表的独占锁定 完整。

如需详细了解隔离模式,请参阅 设置事务隔离级别

默认情况下,快照隔离模式为 repeatable_read。此模式需要 对在拍摄快照阶段读取的所有数据实施共享锁。它 可防止其他事务修改现有行,并可以 可能允许插入新记录(请参阅 锁定上报)。

如果快照隔离已启用,则建议使用快照隔离 源数据库,因为它能够提供完整的数据一致性,而不会锁定 表格。如果未启用该功能,请先详细了解 SQL Server 数据库引擎中基于行版本控制的隔离级别的影响,然后再启用该功能。

作为替代方案,您可以使用 read_committed 隔离模式,该模式 不会在快照阶段锁定表。

在复制作业中启用快照隔离

  1. 在 SQL Server 数据库中启用快照隔离:

    ALTER DATABASE DATABASE_NAME
    SET ALLOW_SNAPSHOT_ISOLATION ON
    

    DATABASE_NAME 替换为 SQL Server 的名称 数据库。

  2. 将运行时参数 snapshot.isolation.mode 设置为 snapshot。有关 请参阅 将运行时参数传递给复制作业

MySQL

为了捕获 MySQL 数据库中源表中的更改, 复制作业使用 Debezium 连接器。在 snapshotting 阶段,Debezium 会根据配置的 snapshot.locking.mode 获取锁。

默认情况下,快照锁定模式为 minimal。在此模式下,连接器会在读取数据库架构和其他元数据时,保持快照初始部分的全局读取锁。然后,连接器使用 REPEATABLE READ 事务(不会锁定表)通过一致性读取提取所有行。

如需防止锁定,请将模式设置为 none

或者,为防止 Cloud SQL 上运行的 MySQL 数据库出现锁定,请从副本(而非事务数据库)复制。

更改 MySQL 快照期间的锁定行为

  • 如需更改 MySQL 数据库中的快照锁定行为,请设置运行时 snapshot.locking.mode 属性, 锁定模式值。

如需了解详情,请参阅将 Debezium 参数传递给复制作业

限制

  • Cloud Data Fusion 中的复制功能支持 Debezium 连接器 1.3 版。

Cloud Data Fusion 中的 Oracle 来源

从 Cloud Data Fusion 中从 Oracle 来源进行复制的功能由以下产品提供支持: Datastream。Datastream 不会锁定表

后续步骤