啟用變更資料擷取 (CDC)

本頁面說明如何在 Cloud SQL for SQL Server 中啟用變更資料擷取 (CDC)。這項功能適用於您執行個體的資料庫。

CDC 可讓您擷取多種類型的變更。如要瞭解如何啟用及停用 CDC,請參閱 Microsoft 說明文件

連線至執行個體後,sqlserver 使用者可以執行許多 CDC 作業

另請參閱「使用變更資料」。

事前準備

在執行個體上導入 CDC 之前,請先詳閱本頁面上的所有資訊。

確認功能適用範圍

CDC 適用於下列 Cloud SQL for SQL Server 資料庫版本:

  • SQL Server 2022 Standard
  • SQL Server 2022 Enterprise
  • SQL Server 2019 Standard
  • SQL Server 2019 Enterprise
  • SQL Server 2017 Standard
  • SQL Server 2017 Enterprise

啟用 CDC 並啟動 CDC 擷取工作

資料庫含有下列預存程序,供 sqlserver 使用者使用:

  • msdb.dbo.gcloudsql_cdc_enable_db
  • msdb.dbo.gcloudsql_cdc_disable_db

開啟 CDC

如要為資料庫啟用這項功能,請執行必要的儲存程序,並傳入資料庫名稱。例如:

EXEC msdb.dbo.gcloudsql_cdc_enable_db 'DATABASE_NAME'

關閉 CDC

如要為資料庫關閉這項功能,請執行下列指令:

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'

啟動 CDC 擷取工作

啟用 CDC 後,系統會建立工作來擷取及清理資料。在 SQL Server Management Studio (SSMS) 中,sqlserver 使用者無法看到這些工作。不過,您可以使用內建的儲存程序修改工作。此外,您也可以透過下列預存程序查看工作:

如要啟動清理作業,您可以使用下列指令:

EXEC sys.sp_cdc_start_job @job_type = N'cleanup'

如要變更工作參數,您可以使用類似以下的指令,例如:

EXEC sys.sp_cdc_change_job  @job_type = N'capture',
        @maxtrans = 20,
        @pollinginterval = NULL,
        @maxscans = NULL,
        @continuous = NULL

如要進一步瞭解如何啟動及變更工作,請參閱以下文章:

另請參閱 sys.sp_cdc_add_job

為資料表啟用 CDC

為資料庫開啟 CDC後,任何具有 dbo (資料庫擁有者) 存取權的使用者,都能設定資料庫中資料表的追蹤功能。

如要瞭解標準 CDC 指令和選項,請參閱「啟用和停用變更資料擷取」。

追蹤表格中的變更

如要追蹤資料表,請使用 sys.sp_cdc_enable_table 預存程序。

舉例來說,您可以指定類似以下的指令:

EXEC sys.sp_cdc_enable_table
  @source_schema = N'dbo',
  @source_name = N'customer',
  @role_name = N'CDC'

檢查資料表是否已啟用 CDC

如要檢查資料表是否已啟用 CDC,請使用 sys.sp_cdc_help_change_data_capture 儲存程序。

舉例來說,您可以指定類似以下的指令:

EXECUTE sys.sp_cdc_help_change_data_capture
  @source_schema = N'dbo',
  @source_name = N'customer'

透過 CDC 變更表格查詢變更

如要查看資料表上的 CDC 變更,請對資料表執行 SELECT 查詢,該資料表會在啟用 CDC 時自動建立。

資料表的名稱如下:

<schema>_<table_name>_CT

舉例來說,您可以指定類似以下的指令:

SELECT * FROM cdc.dbo_customer_CT

在指定擷取例項的表格上啟用 CDC

如要追蹤具有「擷取例項」的資料表,請使用 sys.sp_cdc_enable_table 預存程序。

舉例來說,您可以指定類似以下的指令:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name = N'customer',
    @role_name = N'CDC',
    @capture_instance = N'customer_cdc',
    @supports_net_changes = 1

查詢擷取例項中的所有變更

如要查看「擷取例項」中表格的 CDC 變更,請使用 cdc.fn_cdc_get_all_changes_<capture_instance> 預存程序。

舉例來說,您可以指定類似下方的 SQL 陳述式:

DECLARE @from_lsn binary(10), @to_lsn binary(10)
SET @from_lsn = sys.fn_cdc_get_min_lsn(N'customer_cdc')
SET @to_lsn = sys.fn_cdc_get_max_lsn()
SELECT * FROM cdc.fn_cdc_get_all_changes_customer_cdc(@from_lsn, @to_lsn, N'all');

為資料表停用 CDC

如要停用資料表的 CDC 追蹤功能,請使用 sys.sp_cdc_disable_table 儲存程序。指定要停用的擷取例項。或者,您也可以將擷取例項指定為 'all'

舉例來說,您可以指定類似下方的指令,為資料表停用 CDC:

EXEC sys.sp_cdc_disable_table
  @source_schema = N'dbo',
  @source_name = N'customer',
  @capture_instance = N'all'

刪除已啟用 CDC 的資料庫

如果資料庫已啟用 CDC,而您嘗試刪除資料庫,則可能會發生錯誤。如果發生這種情況,請為資料庫停用 CDC,然後刪除資料庫。

舉例來說,您可以指定類似下列的指令,停用及刪除資料庫:

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'
DROP DATABASE 'DATABASE_NAME'

如果資料庫有開放連線,您就無法刪除資料庫,請使用下列查詢來查看這些連線:

select db_name(dbid),* from sys.sysprocesses where db_name(dbid)= 'DATABASE_NAME'

關閉所有已開啟的連線。為資料庫停用 CDC,然後刪除資料庫。

匯入支援 CDC 的資料庫

匯入啟用 CDC 的資料庫時,Cloud SQL for SQL Server 會持續啟用 KEEP_CDC 旗標,並自動使用預設參數建立擷取和清理工作。