啟用變更資料擷取 (CDC)

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

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

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

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

事前準備

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

確認功能適用情形

下列 Cloud SQL for SQL Server 資料庫版本支援 CDC:

  • 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 的資料庫時,SQL Server 適用的 Cloud SQL 會保持啟用 KEEP_CDC 旗標,並自動建立擷取和清除工作,使用預設參數。