本页面介绍如何在 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 标志的启用状态,并使用默认参数自动创建捕获和清理作业。