從 SQL Server 資料庫串流資料

如要同步處理數據分析和下游資料庫,您可以使用 Datastream 複製 SQL Server 資料庫的歷來資料和持續變更。

如要瞭解 Datastream 中的 SQL Server 來源,請參閱複製行為和變更資料擷取 (CDC) 方法、支援的版本和已知限制。

行為

Datastream 會使用下列其中一種 CDC 方法,追蹤資料操縱語言 (DML) 變更:

變更表格

變更資料表 CDC 方法可讓使用者縮短記錄保留時間,進而節省儲存空間,但與交易記錄方法相比,處理量較低。這個方法的限制比交易記錄少。舉例來說,這項功能可避免記錄截斷導致串流永久失敗的風險,並支援複製加密資料表。詳情請參閱「已知限制」。

使用這個 CDC 方法時,系統會透過專用變更資料表追蹤來源變更。雖然仍會使用交易記錄,但範圍有限,且不需要長期保留。DML 事件套用至來源資料表時,變更會複製到對應的變更資料表。變更資料表的結構與來源資料表相同,但多了幾欄,用於記錄變更的中繼資料。只有已修訂的交易會新增至變更資料表,並附上修訂作業的記錄檔序號 (LSN)。

Datastream 如何處理來源結構定義的 DDL 變更

使用變更資料表 CDC 方法時,系統會為每個變更資料表建立擷取執行個體。每個擷取執行個體都會與其擷取及追蹤的資料欄清單建立關聯。根據預設,擷取執行個體建立後,如果來源發生資料定義語言 (DDL) 變更,執行個體會忽略該變更。不過,您可以設定 SQL Server 串流,在建立串流和擷取執行個體後,複製新增至來源結構定義的資料欄。

事前準備
  • 請確認 Datastream 使用者已獲派 db_owner 權限。

複製新增至來源結構定義的資料欄

如要讓 Datastream 支援複製串流建立後新增至來源結構定義的資料欄,您必須在串流中新增 enable_ddl_support_for_ct 標籤:

  1. 前往 Google Cloud 控制台的「Streams」(串流) 頁面。

    前往「Streams」(串流) 頁面

  2. 按一下要編輯的 SQL Server 串流。

  3. 在「Streams details」(串流詳細資料) 頁面中,按一下「Pause」(暫停)。

  4. 依序點選「編輯」 >「編輯串流設定」。

  5. 按一下「新增標籤」。

  6. 在「Key」欄位中輸入 enable_ddl_support_for_ct。

  7. 在「Value」欄位中輸入 true。

  8. 按一下 [儲存]。

  9. 點按「開始」即可繼續直播。

Datastream 每五分鐘會檢查 cdc.ddl_history 資料表是否有新的 DDL。如果串流設定中的資料表新增了資料欄,Datastream 會驗證資料表是否有兩個擷取執行個體:

  • 如果沒有,Datastream 會建立新的擷取執行個體,讀取原始擷取執行個體資料,直到 DDL 發生為止,然後開始從新的擷取執行個體讀取資料。

  • 如果是,系統會新增記錄項目,指出擷取執行個體數量已達上限,因此無法處理 DDL 變更。

交易記錄

使用這個 CDC 方法時,Datastream 會直接從交易記錄讀取來源中的變更。這個方法需要的資源較少,資料擷取速度也較快,但限制較多。

為避免資料遺失,請務必確保記錄在 Datastream 讀取前不會遭到截斷。另一方面,如果記錄檔保留時間過長,會佔用儲存空間,最終可能導致資料庫執行個體進入唯讀模式。

為確保 CDC 讀取器有足夠的時間讀取記錄,同時允許記錄截斷以釋出儲存空間,您需要套用其他設定步驟,例如變更輪詢間隔和設定截斷防護措施。這些步驟可提供額外保護,確保即使 Datastream 發生停機時間,或來源資料庫與 Datastream 之間發生連線能力問題,Datastream 仍可讀取資料。

如要瞭解如何套用這些額外措施,請參閱「設定來源 SQL Server 資料庫」頁面,並選取資料庫類型。

版本

Datastream 支援下列 SQL Server 資料庫版本:

  • 自行管理 (地端部署或雲端託管),使用下列版本:
    • Enterprise:2008 年以上版本
    • Standard:2016 SP1 以上版本
    • 開發人員:2008 年以後
  • SQL Server 適用的 Amazon RDS
  • Azure SQL Database (S3 以上級別)。

  • SQL Server 適用的 Cloud SQL

Datastream 不支援下列 SQL Server 資料庫版本:

  • SQL Server Standard 版本 (2008 至 2014 版)
  • SQL Server Express
  • SQL Server Web

已知限制

使用 SQL Server 資料庫做為來源時,已知限制包括:

  • 串流最多只能有 10,000 個資料表。
  • 除非符合下列條件,否則無法回填超過 5 億列的資料表:
    1. 資料表有專屬索引。
    2. 所有索引欄都不可為空值。
    3. 索引的所有資料欄都會納入串流。
  • 不支援啟用延遲持久性或加速資料庫復原 (ADR) 的資料庫。
  • 不支援將變更串流至系統資料表。
  • 不支援 Windows Active Directory (AD) 驗證。
  • Datastream 支援所有 SQL Server 定序,但字碼頁為 0 的定序除外。如要查看特定定序的字碼頁,請在 SQL Server 執行個體上執行下列查詢:

    SELECT *, CAST(COLLATIONPROPERTY(name, 'CodePage') AS INT) FROM sys.fn_helpcollations() WHERE name = COLLATION_NAME;
    
  • 不支援下列資料類型,也不會複製到目的地:

    • SQL_VARIANT
    • HIERARCHYID
  • Datastream 會複製使用者定義的資料類型,但儲存在目的地的是衍生出使用者定義類型的基礎資料類型。舉例來說,如果您根據 VARCHAR(50) 資料類型定義 USERNAME 資料類型,資料會以 VARCHAR(50) 形式儲存在目的地。

  • Datastream 不支援大型物件資料欄 (TEXT、NTEXT、XML、IMAGE、GEOMETRY、GEOGRAPHY) 的 CDC,以及不含不重複索引的資料表中最大可變長度資料欄 (VARCHAR(MAX)、VARBINARY(MAX)、NVARCHAR(MAX))。

    如果串流不含大型物件欄,則支援 CDC。

  • 使用變更資料表 CDC 方法時,不支援複製下列來源結構定義變更,且可能導致資料損毀或無法處理事件:

    • 捨棄資料欄:這些資料欄中的資料會替換為 NULL 值。
    • 重新命名資料欄:如果 SQL Server 已啟用 CDC,則不支援這項操作。
    • 修改資料類型:SQL Server CDC 擷取工作只會傳播下列資料類型變更:

      • 變更字串長度上限:例如將 VARCHAR(50) 資料類型變更為 VARCHAR(100)。BigQuery STRING 資料欄沒有固定長度,可接受較長的字串。
      • 增加整數值範圍:例如將 INT 資料類型變更為 BIGINT。BigQuery INT64 資料類型可容納新類型,不需變更結構定義。
      • 變更數值的精確度和比例:例如將 DECIMAL(10, 2) 資料類型變更為 DECIMAL(18, 4)。BigQuery NUMERIC 類型具有較大的固定精確度 (38) 和小數位數 (9),且支援這類變更。

      如果是其他資料類型修改,Datastream 會嘗試將資料插入目的地,並在資料遭拒時引發錯誤。

  • Datastream 不支援複製含有資料遮罩資料欄的資料表。複製資料時不會遮罩。

  • Datastream 不支援複製使用資料層應用程式套件 (DACPAC) 套件套用至資料庫的變更。

  • Datastream 不會複製使用 WRITETEXT 或 UPDATETEXT 陳述式所做的變更。

  • 如果您使用 enable_ddl_support_for_ct 標籤複製新增至來源結構定義的資料欄,則無法將多個串流附加至同一個 SQL Server 來源資料表。由於 SQL Server 每個資料表最多支援兩個擷取執行個體,結構定義變更可能會導致競爭狀況,Datastream 會嘗試建立擷取執行個體,這可能會導致串流失敗。

  • Datastream 不支援複製計算結果欄,除非資料欄標示為 PERSISTED。

  • Datastream 不支援 PAGE、COLUMNSTORE 或 COLUMNSTORE ARCHIVE 壓縮類型。

使用交易記錄方法時的其他限制

如果使用交易記錄 CDC 方法,則須遵守下列額外限制:

  • 不支援透明資料加密 (TDE)。
  • 不支援資料欄層級加密。這些資料欄中的資料會替換為 NULL 值。
  • 使用交易記錄 CDC 方法時,Datastream 不支援複製串流建立後新增至來源結構定義的資料欄。新資料欄不會複製到目的地。
  • Datastream 不支援 ROLLBACK TO SAVEPOINT 陳述式。這類復原事件會遭到忽略,不會複製到目的地。
  • 在下列類型的資料表中,Datastream 不支援對大於 8 KB 的資料列進行 CDC:
    • 沒有不重複索引的資料表
    • 資料表僅包含不重複、非叢集索引,且有一或多個可變長度資料欄 (VARCHAR、VARBINARY、NVARCHAR、GEOMETRY、GEOGRAPHY)
  • Datastream 不支援下列資料表類型中大型物件欄 (TEXT、NTEXT、XML、IMAGE、GEOMETRY、GEOGRAPHY) 的 CDC:

    • 沒有不重複索引的資料表
    • 資料表僅包含不重複的非叢集索引,且有一或多個可變長度資料欄 (VARCHAR、VARBINARY、NVARCHAR、GEOMETRY、GEOGRAPHY)

    如果串流不含大型物件欄,則這類資料表必須有有效索引,才支援 CDC。

  • 使用交易記錄方法時,Datastream 會查詢來源資料庫,在稱為「補充」的主動查詢程序中,擷取特定時間點缺少的值。補充適用於 XML、TEXT、NTEXT、IMAGE、GEOMETRY 和 GEOGRAPHY 資料類型,以及當資料列超過 8 KB 頁面限制時,適用於 VARCHAR(MAX) 或 VARBINARY 等可變長度類型。Datastream 會查詢資料庫來補充這些資料欄,因此如果資料快速連續更新,或插入後隨即刪除,可能就無法擷取中間的變更。DELETE 作業不會觸發補充。使用僅限附加寫入模式時,這項限制尤其重要,因為該模式會擷取所有中繼變更。

後續步驟