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

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

若要对 Fabric SQL 数据库自动配置的镜像进行故障排除,请参阅“排查 Fabric SQL 数据库的镜像问题”(预览版)。

对 Fabric 容量或工作区的更改

对 Fabric 容量或工作区的更改可能会影响镜像。 有关详细信息,请查看 Fabric 容量更改 对镜像的影响。

Azure SQL 数据库故障排除

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

有关其他故障排除方案,请参阅 Fabric 镜像数据库疑难解答 - Microsoft Fabric

用于故障排除的 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 门户中出现如下错误:

"The database cannot be mirrored to Fabric due to below error: Unable to retrieve SQL Server managed identities. A database operation failed with the following error: 'VIEW SERVER SECURITY STATE permission was denied on object 'server', database 'master'. The user does not have permission to perform this action.' VIEW SERVER SECURITY STATE permission was denied on object 'server', database 'master'. The user does not have permission to perform this action. SqlErrorNumber=300,Class=14,State=1, Activity ID: ..."

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

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

事务日志使用情况

启用了镜像功能的数据库,其事务日志的使用可能持续增加,并妨碍日志截断。 事务日志大小达到最大定义的限制后,写入数据库会失败。 为了防止这种情况发生,当使用的日志空间超过配置的日志空间总阈值时,镜像会触发自动重新分配整个数据库。 若要诊断此问题并了解自动重新分配,请参阅 Azure SQL 数据库中的 Fabric 镜像数据库的自动重新分配

重播进程已自动启动

Azure SQL 数据库中的构造镜像可以在特定条件下自动重新分配,适用于单个表级别或整个数据库。 若要了解详细信息, 请从 Azure SQL 数据库自动重新分配 Fabric 镜像数据库