本页介绍了如何在 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 连接器版本 1.3。
Cloud Data Fusion 中的 Oracle 数据源
Cloud Data Fusion 中从 Oracle 来源复制数据由 Datastream 提供支持。Datastream 不会锁定表。
后续步骤
- 详细了解复制。