启用变更数据捕获 (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 标志的启用状态,并使用默认参数自动创建捕获和清理作业。