对 Fabric 中来自 Azure Database for PostgreSQL 灵活服务器的镜像数据库进行故障排除

本文介绍 Azure Database for PostgreSQL 灵活服务器镜像的故障排除步骤。

对镜像表选择过程中出现的错误/警告消息进行故障排除

创建新的镜像数据库时,在“选择数据”页上,你可能会收到有关源数据库中特定表的一些可视化反馈。 下表提供了潜在问题的列表,包括显示的消息以及有关如何解决问题的相关说明。

状态代码 状态类型 消息 说明
SCHEMA_DOES_NOT_EXIST ERROR 架构 {} 不存在 给定架构不存在。 在 Fabric 拉取相关表信息时,它可能已被移除。 再重试。
TABLE_DOES_NOT_EXIST ERROR 在架构 {} 中,表 {} 不存在。 给定表不存在。 在 Fabric 拉取相关表信息时,它可能已被移除。 再重试。
FORBIDDEN_CHARS_IN_COLUMN_NAME ERROR 表 {}.{} 的列 {} 的名称中包含禁止使用的字符 给定列的名称中包含不受支持的字符。 1
UNSUPPORTED_DATA_TYPE ERROR 表 {}.{} 的列 {} 中包含不受支持的数据类型 表的一个(或多个)列当前具有不受支持的数据类型。 3
FORBIDDEN_CHARS_IN_TABLE_NAME ERROR 表 {}.{} 的名称中包含禁止使用的字符 表名称包含不受支持的字符。 1
NOT_REGULAR_TABLE ERROR 表 {}.{} 不是常规表 镜像不支持表类型。 2
HAS_PRIMARY_KEY OK 表 {}.{} 具有主键 表是常规表,并且具有用于镜像的有效主键。
HAS_UNIQUE_INDEX OK 表 {}.{} 具有合适的唯一索引 表没有主键,但有一个可用于镜像的唯一索引。
NO_INDEX_FULL_IDENTITY WARNING 表 {}.{} 没有合适的唯一索引。 使用完整标识 表没有主键或唯一索引,因此需要 REPLICA IDENTITY FULL 来支持镜像,这可能会导致性能问题。

1 不支持包含空格 (' ') 字符的对象标识符。

2 此表类型不支持镜像。 目前,视图、具体化视图、外部表和分区表均不受支持。

3 有关不支持的数据类型的列表,请参阅限制。 仅支持以下类型的列:

  • bigint
  • bigserial
  • boolean
  • bytea
  • character
  • character varying
  • date
  • double precision
  • integer
  • numeric
  • real
  • serial
  • oid
  • money
  • smallint
  • smallserial
  • text
  • time without time zone
  • time with time zone(* 不作为主键)
  • timestamp without time zone
  • timestamp with time zone
  • uuid

在 Postgres 中,两个精确对应同一时刻但处于不同时区的“带时区的时间”值会被视为不同的值。 例如:06:24:00.59+0505:24:00.59+04 对应于相同时期时间,但 Postgres 会对它们进行不同的处理。

Fabric 容量或工作区的更改

原因 结果 建议的解决方案
Fabric 容量已暂停/删除 镜像停止 1. 从 Azure 门户恢复或分配容量
2. 转到 Fabric 镜像数据库项。 在工具栏中,选择“停止复制”。
3. 通过在 Fabric 门户中为镜像项选择“镜像数据库”来启动复制。
已恢复 Fabric 容量 镜像将不会恢复 1. 转到 Fabric 镜像数据库项。 在工具栏中,选择“停止复制”。
2. 通过在 Fabric 门户中为镜像项选择“镜像数据库”来启动复制。
已删除工作区 镜像自动停止 如果 Azure Database for PostgreSQL 灵活服务器上的镜像仍处于活动状态,请使用服务器管理员身份进行连接,并在 PostgreSQL 服务器上执行以下命令:select azure_cdc.list_tracked_publications();,然后使用返回的发布名称执行 select azure_cdc.stop_publication(<publication_name>);
Fabric 试用容量已过期 镜像自动停止 请参阅 Fabric 试用容量过期
超出 Fabric 容量 镜像暂停 等待过载状态结束或更新容量。 通过为从过载情况中恢复可采取的操作了解详细信息。 容量恢复后镜像继续运行。
任何其他资源错误 镜像已禁用 为确保计算资源不受影响,并最大限度地减少对 Azure Database for PostgreSQL 灵活服务器的影响,在出现任何持久性资源错误时,镜像会禁用。
“用户可以使用 Fabric 外部的应用访问 OneLake 中存储的数据”设置已禁用 “复制器 - 表无法达到复制状态” 启用租户设置 用户可以使用 Fabric外部的应用访问 OneLake 中存储的数据。

用于故障排除的 SQL 查询

如果你遇到镜像问题,请使用系统视图和函数执行以下服务器级检查,以验证配置。

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

    select * from azure_cdc.tracked_publications;
    

    检查发布是否处于活动状态且快照是否已生成。 你也可以通过查询来检查是否已生成后续更改批处理:

    select * from azure_cdc.tracked_batches;
    
  2. 如果 azure_cdc.tracked_publications 视图未显示处理增量更改的任何进度,请执行以下 SQL 查询以检查是否报告了任何问题:

    SELECT * FROM pg_stat_activity WHERE state = 'idle in transaction';
    
  3. 如果没有报告任何问题,请执行以下命令以查看镜像的 PostgreSQL 数据库的当前配置。 请确认它已正确启用。

    SELECT * FROM pg_replication_slots;
    

    slot_nameactive 是此处需要注意的关键列。 除 t (true) 之外的任何值都表示可能存在潜在问题。

  4. 如需排除故障,请联系支持人员

托管标识

需要启用 Azure Database for PostgreSQL 灵活服务器的系统分配的托管标识 (SAMI),并且该标识必须是主标识。 有关更多信息,请参阅 PostgreSQL 灵活服务器的系统分配的托管标识

启用后,如果 SAMI 设置状态随后被禁用,然后再次启用,Azure Database for PostgreSQL 灵活服务器到 Fabric OneLake 的镜像将失败。

使用以下查询验证 SAMI 是否已启用:show azure.service_principal_id;

SAMI 权限

请勿移除 Fabric 镜像数据库项上 Azure Database for PostgreSQL 灵活服务器的系统分配的托管标识 (SAMI) 参与者权限。

如果意外移除了 SAMI 权限,Azure Database for PostgreSQL 灵活服务器的镜像将无法按预期运行。 无法从源数据库镜像新数据。

如果移除了 Azure Database for PostgreSQL 灵活服务器的 SAMI 权限或权限设置不正确,请按照以下步骤操作。

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