有关基于 Capture (CDC) 的 CDC Replication Engine for Microsoft SQL Server 选项的常见问题
以下是有关 CDC Replication Engine for Microsoft SQL Server with Capture (CDC) based 选项的常见问题。
- 如何检查数据库是否已启用 CDC?
- 要检查数据库是否已启用 CDC ,请使用 sys.databases 目录视图中的
is_cdc_enabled列。SELECT is_cdc_enabled FROM sys.databases where name='<database_name>’;- Value 1= 已在数据库上启用 CDC
- Value 0= 未在数据库上启用 CDC
- 如何检查是否启用了表捕获?
- 要检查是否激活了源表以进行更改数据捕获,请使用 sys.databases 目录视图中的
is_cdc_enabled列。SELECT is_cdc_enabled FROM sys.databases where name='<database_name>’;- Value 1= 已在数据库上启用 CDC
- Value 0= 未在数据库上启用 CDC
- 如何在表上禁用捕获?
运行以下命令:
EXEC sys.sp_cdc_disable_table @source_schema = N'dbo', @source_name= N'MyTable',@capture_instance = N'dbo_MyTable'- 在复制期间关闭捕获时会发生什么情况? 是否会导致数据丢失或错误消息?
- 如果已除去其他数据库中的补充日志记录,那么如果禁用捕获,那么不会在捕获表中生成任何数据。 因此,不会发生复制。 所以,没有数据丢失,而是没有复制。 当您关闭捕获时,将除去 Capture 表。 因此,当 IDR 预订尝试查询捕获表时,它将失败。 一旦启动复制,就会执行检查。 如果未启用捕获,那么复制无法开始。
- 是需要在源表上手动启用捕获,还是 CDC 会自动执行此操作?
- 您需要
db_owner许可权才能在源表上手动启用捕获。-> new mapping -> check if cdc enabled -> if not -> check if cdc user is db_owner -> yes -enable cdc -> no -throw error ask user to create -> continue with mapping请参阅 页面 以了解捕获表清除作业所需的参数/更改。
- 用于查看所有捕获实例的数据库查询是什么?
- 运行以下命令:
SELECT * FROM [cdc].[change_tables] - 在捕获基于表的配置方式期间,是否不需要 "登台存储磁盘配额" 和 "归档方式" 字段?
- 是,如果在创建实例期间使用捕获表配置方式,那么将禁用这两个字段。
- 对于基于日志的:已启用登台存储磁盘配额和仅归档方式
- 对于基于捕获表的:已启用登台存储磁盘配额和仅归档方式
- 对于基于日志的:
- 哪些数据存储器属性不适用于捕获表配置方式?
和stagingstore_can_run_inedpendentlystagingstore_disk_quota_gb- 当我们开启表捕获时,会收到错误 "这超过了允许的最大表行大小 8060 字节"。 行数据不能大于此大小吗?
- 具有固定大小列的 SQL Server 表的最大行大小为 8060 字节。 启用 CDC 时,该表具有另一个捕获表元数据列,这将添加到 8060 行大小限制。 这将限制可以启用 CDC 的表。
- 启用 CDC 时是否允许 UPDATETEXT 功能?
- 如果列是下列其中一项,那么不允许 UPDATETEXT :
- 由并发快照处理
- 已复制到非SQL Server 订户
- 在允许数据转换服务 (DTS) 的出版物中发布
- 由变更数据捕获跟踪。
- 捕获实例名称的最大长度是多少?
- 对表启用 Microsoft SQL Server CDC 时,将使用捕获实例的名称来标识特定于实例的更改数据捕获对象。 @capture_instance 是系统名称,不能为 NULL。 如果未提供,那么该名称将派生自格式为 <schemaname>_<sourcename>的源模式和源表名称。 @capture_instance 不能超过 100 个字符,并且在数据库中必须唯一。 无论是给定的还是派生的,都将修剪 @capture_instance 以除去字符串右侧的任何空格。
- 当将基于捕获表的配置用于 IIDR CDC 实例时,创建 IIDR 模式时要考虑哪些要点?
如果名为 CDC 的模式或用户存在,那么启用 Microsoft SQL Server CDC 将失败。 在数据库上启用 Microsoft SQL Server CDC 时,将生成名为 CDC 的新模式和用户。 建议不要手动创建名为 CDC 的定制模式或用户,因为它保留供系统使用。
如果您在未连接到 Microsoft SQL Server CDC 的数据库中创建了名为 cdc 的定制模式或用户,那么系统存储过程sys.sp_cdc_enable_db无法在数据库上启用 CDC ,错误消息如下所示:The database <database_name> cannot capture change data since it already has a database user or schema named 'cdc'. These items are only required by the CDC. Delete or rename the user or schema.- 配置基于捕获表的 IIDR CDC 实例时,连续捕获命令是否适用?
- 仅当激活共享擦除时,连续捕获命令 (dmenablecontinuouscapture 和 dmdisablecontinuouscapture) 才适用。 因此,在基于捕获表的设置中不支持共享擦除,命令不适用。
- 要从基于日志的配置更改为基于捕获的配置方式 IIDR CDC 实例,需要执行哪些步骤?
- 通过对源数据库使用基于捕获的配置选择,为 Microsoft SQL Server 实例创建源 CDC。
- 从需要导入的每个预订的目标收集 dmshowbookmark 输出。
- 将需要从基于日志的源 CDC 数据存储移动到基于捕获的源的预订导出。
- 通过使用基于源捕获的实例作为源数据存储器来导入预订。
- 要避免刷新导入的预订,请标记表捕获点。
- 通过使用步骤 2 中收集的书签值,针对每个导入的预订运行
dmsetbookmark。
- Microsoft SQL Server CDC 的数据类型注意事项是什么?
表 1. 更改数据捕获的数据类型注意事项 列类型 在变更表中捕获的变更 限制 稀疏列 是 不支持在使用列集时捕获更改。 计算列 False 不会跟踪对计算列的更改。 该列显示在具有相应类型的更改表中,但其值将为 NULL。 XML 是 不会跟踪对单个 XML 元素的更改。 时间戳记 是 更改表中的数据类型将转换为二进制。 BLOB 数据类型 是 仅当更改了 BLOB 列本身时,才会存储该列的先前图像。 - dmshowlogdependency 如何在基于捕获表的配置方式下工作?
- 以下是具有不同选项的命令输出:
- 每个预订的命令输出显示该预订的最小 LSN:
C:\mscdc_latest_devlop\bin>dmshowlogdependency.exe -I dev_inst -s TB86141A -i 0000006c:00012121:0003 C:\mscdc_latest_devlop\bin>dmshowlogdependency.exe -I dev_inst -s TB58547A -i 000000a8:00017edc:0183 - 所有单个预订的命令输出:
C:\mscdc_latest_devlop\bin>dmshowlogdependency.exe -I dev_inst -a -i TB86141A 0000006c:00012121:0003 TB58547A 000000a8:00017edc:0183 TB21456A 000000a8:000189f1:0003 TB43381A 000000a8:0001972b:0003
- 每个预订的命令输出显示该预订的最小 LSN:
- 哪些 IIDR CDC 命令行不适用于单次擦除?
- 使用捕获表配置的 IIDR CDC 实例使用专用提取器,因此以下登台存储命令不适用:
dmclearstagingstore.exedmgetstagingstorestatus.exe
- 如何对以捕获表方式配置的 IIDR CDC 实例执行网络更改镜像功能?
- 当镜像以网络更改开始时, CDC 会添加保存点事务,而 CDC 会将 LSN 位置视为镜像的结束位置。 当达到基于日志的 CDC LSN 时,将终止预订。 在基于捕获的系统中,当插入保存点时,该操作不会记录在捕获表中,并且预订永不终止。 当前的答案是,当镜像网络更改满足 LSN-mapping 表中包含
lsn >= end lsn的操作时,将退出该镜像网络更改。 - 使用捕获表设置时,是否错误地复制了扩展
ascii表中的 5 代码点 (129,141,143,144,157)? - 是,这些 5 代码 点未成功复制到目标,因此我们将其视为 (3F)? 可能会显示 C1 控制字符。 我们尝试使用样本软件从选择结果集中收集字节,但接收到不正确的值 9D。 当我们使用 DD 驱动程序时,我们希望针对他们创建凭单,获取他们共享的信息,并将其记录到我们的文档中。
- 我们是否支持双向复制?
- 编号 在基于捕获的情况下,我们可以将递归预防所需的详细信息添加到目标落实。 但是,我们无法从目标捕获表获取信息。 因此,如果我们需要 bidi ,我们可能必须开发一种新颖的方法。 如果我们可以在客户表中创建新列,或者使用 JCF 在其中输入信息。 这可确保捕获列数据并可用于确定 CDC 是否使用了该列数据。
- 是否支持临时落实?
- 当预订中存在单个表映射,但存在多个表映射时,支持临时落实。 有关更多详细信息, 请参阅
- 我们是否支持 Azure SQL Server?
- 是的,我们支持。 CDC 可以在通过 JDBC对数据库具有读访问权的任何机器 /VM 上运行。 有关更多详细信息, 请参阅
- CDC 代理程序是否存在任何 CPU 开销?
- 关于 CDC ,它的 I/O 比基于日志的系统少。 因此,它应该使用较少的 CPU。 但是,由于频繁选择数据库,可能会有更多网络使用情况。 此 页面 说明 Azure SQL 和 Microsoft SQL Server CDC 的性能注意事项。
- 捕获表清除作业的运行频率如何?
- 缺省情况下,它将在 72 小时后运行。 但是,您必须根据其捕获表保留策略对其进行调整,该策略基于命令
dmshowlogdependency的输出,并定义要在捕获表中维护的最小 LSN 位置。 基于此,必须在 SQL Server (Management Studio) 中设置捕获表的清除作业。 - 当使用 Azure 作为 SaaS, 时,CDC 代理将安装在何处?
- SaaS 表示受管实例; 您必须在用户可以通过 JDBC访问数据库的虚拟机中安装 CDC。 虚拟机 (VM) 可以是 Azure 资源,也可以是本地资源。 此外,为了获得最佳速度, VM 应该与数据库位于同一子网中。
- 为 Azure SQL 创建 CDC 实例时必须指定哪些高级 JDBC 选项?
- 要使用基于捕获表的配置方式创建 CDC 实例,必须在实例配置窗口中提供以下高级 JDBC 设置:
ValidateServerCertificate=false hostNameInCertificate=*.database.windows.net loginTimeout=60 CryptoProtocolVersion=TLSv1.2