本頁面說明如何在 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_dbmsdb.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 旗標,並自動使用預設參數建立擷取和清除工作。