排查来自 Azure SQL 数据库的 Fabric 镜像数据库的问题

本文介绍镜像 Azure SQL 数据库的故障排除步骤。

有关为 Fabric SQL 数据库自动配置的镜像进行故障排除,请参阅排查来自 Fabric SQL 数据库(预览版)的镜像问题

Fabric 容量或工作区的更改

参阅对 Fabric 容量做出更改以了解详细信息。

此外,请记下下表来排查 Azure SQL 数据库问题:

原因 结果 建议的解决方案
已删除工作区 镜像会自动停止,并禁用 Azure SQL 数据库中的更改源 如果镜像在 Azure SQL 数据库上仍然处于活动状态,请在 Azure SQL 数据库上执行以下存储过程:exec sp_change_feed_disable_db;
任何其他资源错误 镜像已禁用 若要确保计算资源不受影响并保护 Azure SQL 数据库,可以在任何持久性资源错误上禁用镜像。
“用户可以使用 Fabric 外部的应用访问 OneLake 中存储的数据”设置已禁用 “复制器 - 表无法达到复制状态” 启用租户设置 用户可以使用 Fabric外部的应用访问 OneLake 中存储的数据。

用于故障排除的 T-SQL 查询

如果遇到镜像问题,请使用动态管理视图 (DMV) 和存储过程执行以下数据库级检查,以验证配置。

  1. 执行下面的查询,检查更改是否正确得到应用:

    SELECT * FROM sys.dm_change_feed_log_scan_sessions;
    
  2. 如果 sys.dm_change_feed_log_scan_sessions DMV 没有显示任何处理增量更改的进展,请执行以下 T-SQL 查询,检查是否报告了任何问题:

    SELECT * FROM sys.dm_change_feed_errors;
    
  3. 如果没有报告任何问题,请执行以下存储过程,查看镜像 Azure SQL 数据库的当前配置。 请确认它已正确启用。

    EXEC sp_help_change_feed;
    

    table_namestate 是此处需要注意的关键列。 除 4 之外的任何值都表明存在潜在问题。

  4. 如果复制仍然不起作用,请验证是否为具有权限的正确 SAMI 对象。

    1. 在 Fabric 门户中,选择镜像数据库项上的“...”省略号选项。
    2. 选择“管理权限”选项。
    3. 确认 Azure SQL 逻辑服务器名称显示具有读取、写入权限。
    4. 确保显示的 AppId 与 Azure SQL 数据库逻辑服务器的 SAMI ID 匹配。
  5. 如需排除故障,请联系支持人员

托管的标识

需要启用 Azure SQL 逻辑服务器的系统分配托管标识 (SAMI),并且必须是主要标识。 有关详细信息,请参阅创建 Azure SQL 数据库服务器。 在 Azure 门户中的“标识”页的“安全”下,启用其中“资源”菜单内的 SAMI

启用后,如果 SAMI 设置状态为关闭,或者一开始为启用,然后为禁用,然后又为启用,则从 Azure SQL 数据库到 Fabric OneLake 的镜像会失败。

SAMI 必须是主要标识。 使用以下 T-SQL 脚本验证 SAMI 是否为主要标识: SELECT * FROM sys.dm_server_managed_identities;

用户分配的托管标识 (UAMI) 不受支持。 如果添加 UAMI,它将成为主要标识,并取代作为主要标识的 SAMI。 这会导致复制失败。 若要解决问题,请执行以下操作:

  • 移除所有 UAMIS。 确认已启用 SAMI。

SAMI 权限

Azure SQL 逻辑服务器的系统分配托管标识(SAMI)需要对 Microsoft Fabric 中的镜像数据库项具有 读取写入 权限。 从 Fabric 门户创建镜像数据库时,会自动授予权限。 如果在设置过程中遇到错误 Unable to grant required permission to the source server. User does not have permission to reshare,请确保您在工作区中拥有足够权限的成员角色或管理员角色。 使用 API 创建镜像数据库时,请确保显式授予权限。

请勿删除对 Fabric 镜像数据库项的 SAMI 读取写入 权限。 如果意外删除了权限,镜像 Azure SQL 数据库将无法按预期工作。 无法从源数据库镜像新数据。

如果删除 Azure SQL 数据库 SAMI 权限或权限未正确设置,请使用以下步骤。

  1. 通过选择 ... 镜像数据库项上的省略号选项,将 SAMI 添加为用户。
  2. 选择“管理权限”选项。
  3. 输入 Azure SQL 数据库逻辑服务器的名称。 提供读取写入权限。

过时权限导致的 Microsoft Entra 登录错误

在使用 Microsoft Entra ID 身份验证之前,请查看 Microsoft Entra 服务器主体的限制。

使用 Microsoft Entra 登录名创建的数据库用户在被授予角色和权限时可能会遇到延迟。 这可能会导致 Fabric 门户中出现如下错误:“由于以下错误,数据库无法镜像到 Fabric:无法检索 SQL Server 托管标识。 数据库作失败,并出现以下错误:“VIEW SERVER SECURITY STATE 权限在对象”server“、数据库”master“上被拒绝。 用户无权执行此作。 在对象“server”、数据库“master”上,拒绝了 VIEW SERVER SECURITY STATE 权限。 用户没有执行此操作的权限。 SqlErrorNumber=300,Class=14,State=1,活动 ID: ...”

在当前预览期间,应使用以下命令来解决这些问题。

  • 从用户数据库中删除用户
  • 执行 DBCC FREESYSTEMCACHE('TokenAndPermUserStore') 以清除数据库上的安全缓存。
  • 执行 DBCC FLUSHAUTHCACHE 以清除联合身份验证上下文缓存。
  • 在用户数据库中,根据登录名 重新创建用户