本页面介绍如何在 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 更改,请针对该表启用 CDC 时,该表自动创建的 SELECT
查询。
表的名称如下:
<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 标志的启用状态,并使用默认参数自动创建捕获和清理作业。