重要
MICROSOFT SQL Server 连接器为 公共预览版。
本页提供在 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 文档中的为数据库启用变更数据捕获。
为源表启用内置 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 数据库上运行脚本。
如果在第三方工具中运行脚本,请在运行脚本之前选择整个脚本。
变更数据捕获 (CDC) 权限要求
如果在脚本中设置 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 ON object::dbo.lakeflowDisableOldCaptureInstance_1_1 TO <database-user>;
GRANT VIEW DEFINITION ON object::dbo.lakeflowRefreshCaptureInstance_1_1 TO <database-user>;
GRANT VIEW DEFINITION ON object::dbo.lakeflowMergeCaptureInstances_1_1 TO <database-user>;
GRANT VIEW DEFINITION TO <database-user>;
GRANT VIEW DATABASE PERFORMANCE STATE TO <database-user>;
GRANT UPDATE ON object::dbo.lakeflowCaptureInstanceInfo_1_1 TO <database-user>;
GRANT EXECUTE 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.lakeflowRefreshCaptureInstance_1_1 TO <database-user>;