啟用變更資料擷取 (CDC)

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

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

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

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

事前準備

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

確認功能支援情形

下列 SQL Server 適用的 Cloud SQL 資料庫版本支援 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 旗標,並自動使用預設參數建立擷取和清除工作。