本頁面說明如何在 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 不會鎖定資料表。
後續步驟
- 進一步瞭解複製功能。