Compartir a través de

排查 Azure 数据工厂中更改数据捕获资源的问题

适用于:Azure 数据工厂 Azure Synapse Analytics

本文提供有关如何排查 Azure 数据工厂中更改数据捕获资源的常见问题的建议。

问题:在 SQL 源中启用本机 CDC 时出现问题。

对于 SQL 中的源,可以使用两组表:启用了本机 SQL CDC 的表和具有基于时间的增量列的表。

按照以下步骤为 SQL 数据库中的特定源表配置本机 CDC。

假设你有下表,其中 ID 作为主键。 如果架构中存在主键,则默认情况下,supports_net_changes 设置为 true。 如果没有,请使用查询 3 中的脚本对其进行配置。

查询 1


CREATE TABLE Persons (
	ID int,
	LastName varchar(255) NOT NULL,
	FirstName varchar(255),
	Age int,
	Last_login DATETIME,
    	PRIMARY KEY (ID));

注意

目前,ADF CDC 资源仅加载插入、更新和删除操作的净更改。

若要在数据库级别启用 CDC,请执行以下查询:

查询 2

EXEC sys.sp_cdc_enable_db

若要在表级别启用 CDC,请执行以下查询:

查询 3

EXEC sys.sp_cdc_enable_table  
	@source_schema = N'dbo'  
	, @source_name = N'Persons'  
	, @role_name = N'cdc_admin'  
	, @supports_net_changes = 1
        , @captured_column_list = N'ID';

问题:无法在 CDC 资源配置过程中选择表。

如果 SQL 源没有启用了 net_changed 的 SQL Server CDC,或者没有任何基于时间的增量列,则将无法选择源中的表。

问题:调试群集在暖池中不可用。

调试群集在暖池中不可用。 等待时间将超过 1 分钟。

问题:跟踪删除操作时出现问题。

目前,CDC 资源支持以下接收器类型的删除操作 - Azure SQL 数据库和 Delta。 要在列映射页面中实现此目的,请选择可用于确定源中的行是否与接收器中的行匹配的“”列。 

问题:当目标 SQL 表具有标识列时,我的 CDC 资源失败。

当目标接收器表具有标识列时,运行 CDC 时出现以下错误:

当 IDENTITY_INSERT 设置为 OFF 时,不能为表“TableName”中的标识列插入显式值。

运行以下查询,以确定基于 SQL 的目标中是否存在标识列。

查询 4

SELECT * 
FROM sys.identity_columns 
WHERE OBJECT_NAME(object_id) = 'TableName'

要解决此问题,用户可以执行以下任一步骤:

  1. 通过在数据库级别运行以下查询将 IDENTITY_INSERT 设置为 ON,然后重新运行 CDC 映射器

查询 5

SET IDENTITY_INSERT dbo.TableName ON; 

(或者)

  1. 在执行插入时,用户可以从映射中删除特定的标识列。

问题:使用自承载集成运行时期间出现问题。

目前,CDC 资源不支持自承载集成运行时。 如果尝试连接到本地源,请将 Azure 集成运行时与托管虚拟网络配合使用。