启用变更数据捕获 (CDC)

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