Azure Synapse Link for SQL 的限制和已知问题

本文列出了 Azure Synapse Link for SQL 的限制已知问题

限制

以下部分列出了 Azure Synapse Link for SQL 的限制。

Azure SQL 数据库和 SQL Server 2022

  • 源表必须有主键。
  • 仅支持将可写主要副本用作 Azure Synapse Link for SQL 的数据源。
  • 源表中的主键不支持以下数据类型。
    • real
    • float
    • hierarchyid
    • sql_variant
    • timestamp
  • 源表行大小不能超过 7,500 字节。 对于可变长度列存储在行外的表,主记录中存储 24 字节指针。
  • 最初对源表创建快照时,包含大于 1 MB 的大型对象 (LOB) 数据的任何源表数据均不受支持。 这些 LOB 数据类型包括:varchar(max)、nvarchar(max)、varbinary(max)。 将引发错误,并且不会将数据导出到 Azure Synapse Analytics。 使用存储过程 sp_configure 来增大 max text repl size 选项的最大配置值(默认值为 64 K)。配置值 -1 表示除了按数据类型施加的限制以外没有其他限制。
  • 为 Azure Synapse Link for SQL 启用的表最多可以有 1,020 列(而非 1,024)。
  • 虽然数据库可以启用多个链接,但给定的表不能属于多个链接。
  • 如果数据库所有者没有映射的登录,Azure Synapse Link for SQL 在启用链接连接时会出错。 用户可以使用 ALTER AUTHORIZATION 命令将数据库所有者设置为有效用户来解决此问题。
  • 如果源表包含计算列或数据类型不受专用 SQL 池支持的列,则不会复制这些列。 不受支持的列包括以下列。
    • image
    • text
    • xml
    • timestamp
    • sql_variant
    • UDT
    • geometry
    • 地理
  • 单个链接连接最多可添加 5,000 个表。
  • 如果为 Azure Synapse Link for SQL 启用了以下表数据定义语言 (DDL) 操作,则不允许对源表执行这些操作。 允许所有其他 DDL 操作,但不会将它们复制到 Azure Synapse Analytics。
    • 切换分区
    • 添加/删除/更改列
    • 更改主键
    • 删除/截断表
    • 重命名表
  • 如果在显式事务中执行数据定义语言 (DDL) 和数据操作语言 (DML)(在 BEGIN TRANSACTIONEND TRANSACTION 语句之间),则相应表的复制将在链接连接中失败。

    注意

    如果表对于链接连接级别的事务一致性至关重要,请在“监视”选项卡中查看 Azure Synapse Link 表的状态。

  • 如果源表正在使用以下任何功能,则无法启用 Azure Synapse Link for SQL。
    • 更改数据捕获
    • 时态历史记录表
    • Always Encrypted
    • 内存中表
    • 列存储索引
    • Graph
  • 无法复制系统表。
  • 来自源数据库的安全配置不会反映在目标专用 SQL 池中。
  • 启用 Azure Synapse Link for SQL 会创建一个名为 changefeed 的新架构。 请勿使用此架构,因为它要留作系统使用。
  • 无法复制具有专用 SQL 池不支持的排序规则(如 UTF-8 和某些日语排序规则)的源表。 请参阅 Synapse SQL 池中支持的排序规则
    • 此外,Azure Synapse Link for SQL 不支持某些泰语排序规则:
      • Thai100CaseInsensitiveAccentInsensitiveKanaSensitive
      • Thai100CaseInsensitiveAccentSensitiveSupplementaryCharacters
      • Thai100CaseSensitiveAccentInsensitiveKanaSensitive
      • Thai100CaseSensitiveAccentInsensitiveKanaSensitiveWidthSensitiveSupplementaryCharacters
      • Thai100CaseSensitiveAccentSensitiveKanaSensitive
      • Thai100CaseSensitiveAccentSensitiveSupplementaryCharacters
      • ThaiCaseSensitiveAccentInsensitiveWidthSensitive
  • 不支持超过 370MB 的单行更新(包括页外存储)。
  • 在 Azure SQL 数据库或 SQL Server 2022 上启用 Azure Synapse Link for SQL 后,将自动禁用加速数据库恢复 (ADR) 的主动日志截断功能。 这是必需的,因为 Azure Synapse Link for SQL 访问数据库事务日志。 此行为类似于变更数据捕获 (CDC)。 活动事务将继续保留事务日志截断,直到事务提交并且 Azure Synapse Link for SQL 跟上进度,或事务中止。 这可能会导致事务日志填充比平时更多的内容,因此应对其进行监视以防止事务日志被填满。

仅限 Azure SQL 数据库

  • 少于 100 个 DTU 的免费、基本或标准层不支持 Azure Synapse Link for SQL。
  • SQL 托管实例不支持 Azure Synapse Link for SQL。
  • 不支持使用服务主体对源 Azure SQL DB 进行身份验证,因此在创建 Azure SQL DB 链接服务时,请选择 SQL 身份验证、用户分配的托管标识 (UAMI) 或服务分配的托管标识 (SAMI)。
  • 如果 Azure SQL 数据库逻辑服务器同时配置了 SAMI 和 UAMI,Azure Synapse Link 将使用 SAMI。
  • 如果辅助数据库的名称与主数据库不同,则 GeoDR 故障转移后,无法在辅助数据库上启用 Azure Synapse Link。
  • 如果将 Azure Synapse Link for SQL 作为 Microsoft Entra 用户启用,则时间点还原 (PITR) 将失败。 仅当以 SQL 用户身份在数据库上启用 Azure Synapse Link for SQL 时,PITR 才会起作用。
  • 如果以 Microsoft Entra 用户的身份创建数据库并启用 Azure Synapse Link for SQL,SQL 身份验证用户(例如,即使是 sysadmin 角色)也无法禁用/更改 Azure Synapse Link for SQL 项目。 但是,另一位 Microsoft Entra 用户将能够在同一数据库上启用/禁用 Azure Synapse Link for SQL。 同样,如果以 SQL 身份验证用户的身份创建数据库,则无法以 Microsoft Entra 用户身份启用/禁用 Azure Synapse Link for SQL。
  • 如果 Azure SQL 数据库和 Azure Synapse 工作区位于单独的租户中,则不支持跨租户数据复制。

仅限 SQL Server 2022

  • 无法在作为事务复制发布服务器或分发服务器的数据库上启用 Azure Synapse Link for SQL。
  • 对于可用性组中的异步副本,必须先将事务写入所有副本,然后再发布到 Azure Synapse Link for SQL。
  • 启用了数据库镜像的数据库不支持 Azure Synapse Link for SQL。
  • 不支持将已启用 Azure Synapse Link for SQL 的数据库从本地还原到 Azure SQL 托管实例。

注意

同时使用托管实例链接的数据库不支持 Azure Synapse Link for SQL。 请注意,在这些情况下,当托管实例转换为读写模式时,可能会遇到事务日志已满的问题。

已知问题

  • 适用范围:适用于 Azure SQL Database 和 SQL Server 2022 的 Azure Synapse Link

  • 问题 - 删除 Azure Synapse Analytics 工作区时,可能不会停止正在运行的链接,这将导致源数据库认为该链接仍在正常运行,还可能导致日志不被截断,且会继续填充。

  • 解决方法 - 这种情况有两种可能的解决方案:

    1. 在删除 Azure Synapse Analytics 工作区之前停止所有正在运行的链接。
    2. 手动清理源数据库中的链接定义。
      1. 使用以下查询查找需要停止的 table_group_id
        SELECT table_group_id, workspace_id, synapse_workgroup_name
        FROM [changefeed].[change_feed_table_groups]
        WHERE synapse_workgroup_name = <synapse workspace name>;
        
      2. 使用以下过程删除已识别的每个链接。
        EXEC sys.sp_change_feed_drop_table_group @table_group_id = <table_group_id>;
        
      3. (可选)如果要禁用给定数据库的所有表组,还可以使用以下命令禁用数据库上的更改源。
        EXEC sys.sp_change_feed_disable_db;
        

对最近禁用了更改源的表重新启用更改源会显示错误

  • 适用范围:适用于 Azure SQL Database 和 SQL Server 2022 的 Azure Synapse Link
  • 这是一种不常见的行为。
  • 问题 - 尝试启用最近禁用的表,而该表的元数据尚未清理且状态标记为“已禁用”时引发错误,该错误指出 A table can only be enabled once among all table groups
  • 解决方法 - 先等待系统处理好已禁用的表,然后再次尝试重新启用该表。
  • 适用范围:适用于 Azure SQL Database 和 SQL Server 2022 的 Azure Synapse Link
  • 问题 - 对于启用了 Azure Synapse Link 的 SQL 数据库,使用 SSDT 导入/导出和提取/部署操作导入/设置新数据库时,新数据库中不会排除 changefeed 架构和用户。 但是,DacFX 会忽略更改源的表,因为它们在 sys.objects 中标记为 is_ms_shipped=1,并且这些对象永远不会包含在 SSDT 导入/导出和提取/部署操作中。 在导入/部署的数据库上启用 Azure Synapse Link 时,如果 changefeed 用户和架构已存在,则系统存储过程 sys.sp_change_feed_enable_db 将失败。 如果你所创建的名为 changefeed 的用户或架构与 Azure Synapse Link 更改源功能之间没有关联,则会遇到此问题。
  • 解决方法 -
    • 手动删除空的 changefeed 架构和 changefeed 用户。 然后就能在导入/部署的数据库上成功启用 Azure Synapse Link。
    • 如果在数据库中定义了与 Azure Synapse Link 无关的自定义架构或用户(名为 changefeed)并且不打算使用 Azure Synapse Link for SQL,则无需删除 changefeed 架构或用户。
    • 如果在数据库中定义了名为 changefeed 的客户架构或用户,则当前此数据库不能使用 Azure Synapse Link for SQL。