添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
魁梧的葫芦  ·  Go Package: survey | ...·  2 周前    · 
怕老婆的柠檬  ·  Perl ...·  1 年前    · 
玩足球的红薯  ·  Solved: Extract text ...·  2 年前    · 

本页提供在 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 保留期

    将保留期设置为网关可能关闭的最大时间(以分钟为单位)。 经过此时间后,需要完全刷新才能恢复网关。

    EXEC sys.sp_cdc_change_job @job_type = N'cleanup', @retention = 20160;
    

    为源表启用内置 CDC

    若要在源表上启用 CDC,请在 Azure SQL 中运行以下存储过程。 替换 source_schemasource_namerole_name 的值。 如果表具有主键,@support_net_changes 仅支持值 1

  • 替换 source_schemasource_namerole_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>;
                  创建引入管道