本页提供在 Microsoft SQL Server 中启用内置更改数据捕获(CDC)的说明。 必须启用更改跟踪或 CDC 才能使用 SQL Server 连接器。 Databricks 建议对具有主键的任何表使用更改跟踪,以最大程度地减少源数据库上的负载。 如果同时启用了更改跟踪和 CDC,连接器将使用更改跟踪。 有关选择哪个选项的指导,请参阅
更改跟踪与更改数据捕获
。
为源数据库启用内置 CDC
登录到要启用 CDC 的数据库。
在数据库上下文中运行以下 T-SQL 命令:
Azure SQL 数据库和本地 SQL Server
EXEC sys.sp_cdc_enable_db
Amazon RDS for SQL Server
EXEC msdb.dbo.rds_cdc_enable_db '<database-name>'
有关详细信息,请参阅 SQL Server 文档中的为数据库启用变更数据捕获。
将保留期设置为网关可能关闭的最大时间(以分钟为单位)。 经过此时间后,需要完全刷新才能恢复网关。
EXEC sys.sp_cdc_change_job @job_type = N'cleanup', @retention = 20160;
为源表启用内置 CDC
若要在源表上启用 CDC,请在 Azure SQL 中运行以下存储过程。 替换 source_schema、source_name 和 role_name 的值。 如果表具有主键,@support_net_changes 仅支持值 1。
替换 source_schema、source_name 和 role_name 的值。
如果表具有主键, @support_net_changes 则仅支持值 1。
EXEC sys.sp_cdc_enable_table
@source_schema = N'MySchema',
@source_name = N'MyTable',
@role_name = NULL,
@supports_net_changes = 1
有关详细信息,请参阅 SQL Server 文档中的为表启用变更数据捕获。
授予对 CDC 架构的 SELECT 权限
除了 源设置中所述的权限外,数据库用户还需要 SELECT 对架构 cdc具有特权。 此架构包含启用 CDC 时创建的更改表。 运行以下 T-SQL 命令:
GRANT SELECT ON SCHEMA::cdc to <database-user>;
授予 VIEW SERVER STATE(本地和 RDS)
对于本地实例和 RDS 实例,只能通过 VIEW SERVER STATE 权限查询 sys.dm_server_services,该权限用于检查 SQL Server 代理的状态。 运行以下 T-SQL 命令:
GRANT VIEW SERVER STATE to <database-user>
设置 DDL 捕获和架构演变
SQL 连接器能够在复制的数据库对象上跟踪数据定义语言 (DDL),并将相关的表架构更改应用于目标表,或者在进行完整架构复制时添加新表。
DDL 捕获需要额外设置数据库对象,例如内部表、存储过程和触发器。 本文ddl_support_objects.sql()中提供的 Transact-SQL(T-SQL)脚本会删除任何预先存在的 DDL 支持对象,并创建捕获数据库中发生的 DDL 更改所需的 DDL 支持对象。
下载 ddl_support_objects.sql 脚本。
修改脚本以设置 mode 值:
BOTH:初始化 CT 和 CDC 对象(默认值)
CT:初始化 CT 对象
CDC
:初始化 CDC 对象
NONE
:删除所有预先存在的 CT 和 CDC 对象
(推荐)(可选)修改脚本,将
replicationUser
变量设置为 SQL Server 数据库用户。
如果定义了
replicationUser
,该脚本会向用户授予
使用 DDL 支持对象所需的所有权限
。 否则,必须手动授予每个特权。
对要引入的每个数据库运行脚本。
不要在 master 数据库上运行脚本。
如果在第三方工具中运行脚本,请在运行脚本之前选择整个脚本。
如果在脚本中设置
replicationUser
变量,该脚本会将对 DDL 支持对象所需的权限授予数据库用户。 所需的权限包括:
在
VIEW DEFINITION
对象上执行
lakeflowDisableOldCaptureInstance_1_1
在
VIEW DEFINITION
对象上执行
lakeflowRefreshCaptureInstance_1_1
在
VIEW DEFINITION
对象上执行
lakeflowMergeCaptureInstances_1_1
在要引入的数据库上执行
VIEW DEFINITION
在要引入的数据库上执行
VIEW DATABASE PERFORMANCE STATE
在
UPDATE
对象上执行
lakeflowCaptureInstanceInfo_1_1
在
EXECUTE
架构上执行
dbo
在
EXECUTE
对象上执行
lakeflowMergeCaptureInstances_1_1
在
EXECUTE
对象上执行
lakeflowDisableOldCaptureInstance_1_1
在
EXECUTE
对象上执行
lakeflowRefreshCaptureInstance_1_1
如果
replicationUser
脚本中未设置,则必须手动为 CDC 授予所需的权限。 为此,请运行以下 T-SQL 命令,替换
<database-user>
:
GRANT VIEW DEFINITION TO <database-user>;
GRANT VIEW DATABASE STATE TO <database-user>;
GRANT SELECT, UPDATE ON OBJECT::dbo.lakeflowCaptureInstanceInfo_1_1 TO <database-user>;
GRANT SELECT ON SCHEMA::dbo TO <database-user>;
GRANT SELECT, INSERT ON SCHEMA::cdc TO <database-user>;
GRANT SELECT ON SCHEMA::dbo TO <database-user>;
GRANT EXECUTE ON OBJECT::dbo.lakeflowMergeCaptureInstances_1_1 TO <database-user>;
GRANT EXECUTE ON OBJECT::dbo.lakeflowDisableOldCaptureInstance_1_1 TO <database-user>;
GRANT EXECUTE ON OBJECT::dbo.lakeflowMergeCaptureInstances_1_1 TO <database-user>;
/* the currentUser must have DBO permission */
GRANT IMPERSONATE ON USER::currentUser TO <database-user>;
创建引入管道