複製作業中的隔離層級

本頁面說明如何在 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 隔離模式,這樣在快照階段就不會鎖定資料表。

在複製工作中啟用快照隔離功能

  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 不會鎖定資料表

後續步驟