本页面介绍如何在 Cloud Data Fusion 复制作业中启用 Microsoft SQL Server 中的事务隔离和 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
隔离模式,该模式不会在快照阶段锁定表。
在复制作业中启用快照隔离
在 SQL Server 数据库中启用快照隔离:
ALTER DATABASE DATABASE_NAME SET ALLOW_SNAPSHOT_ISOLATION ON
将
DATABASE_NAME
替换为 SQL Server 数据库的名称。将运行时参数
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 Connector 1.3 版。
Cloud Data Fusion 中的 Oracle 来源
Cloud Data Fusion 中 Oracle 来源的复制由 Datastream 提供支持。Datastream 不会锁定表。
后续步骤
- 详细了解复制。