Solucionar problemas de bases de dados espelhadas do Fabric de Azure Database para servidor flexível PostgreSQL

Este artigo aborda os passos de resolução de problemas para configurar a replicação do servidor flexível do Base de Dados do Azure para PostgreSQL.

Resolução de problemas de mensagens de erro / aviso durante a seleção de tabela para espelhamento

Quando cria uma nova base de dados espelhada, na página Escolher dados pode receber algum feedback visual sobre tabelas específicas na base de dados de origem. A tabela seguinte apresenta uma lista de potenciais problemas, incluindo a mensagem apresentada e a descrição relacionada sobre como resolver o problema.

Código de estado Tipo de status Message Description
SCHEMA_DOES_NOT_EXIST ERROR O esquema {} não existe Dado esquema não existe. Pode ter sido removido enquanto o Fabric estava a extrair informações relevantes da tabela. Tentar novamente.
TABLE_DOES_NOT_EXIST ERROR No esquema {}, tabela {} não existe. A tabela dada não existe. Pode ter sido removido enquanto o Fabric estava a recolher informações relevantes da tabela. Tentar novamente.
FORBIDDEN_CHARS_IN_COLUMN_NAME ERROR Tabela {}.{} contém caracteres proibidos no nome das colunas {} A coluna dada tem carácter não suportado no nome. 1
UNSUPPORTED_DATA_TYPE ERROR Tabela {}.{} tem um tipo de dado não suportado na coluna {} Uma (ou mais) colunas da tabela têm atualmente tipos de dados não suportados. 3
FORBIDDEN_CHARS_IN_TABLE_NAME ERROR Tabela {}.{} contém caracteres proibidos no nome O nome da tabela tem caracteres não suportados. 1
NOT_REGULAR_TABLE ERROR Tabela {}.{} não é uma tabela regular O tipo de tabela não é suportado para espelhamento. 2
HAS_PRIMARY_KEY OK Tabela {}.{} tem uma chave primária A tabela é uma tabela regular e tem uma chave primária válida usada para espelhamento.
HAS_UNIQUE_INDEX OK Tabela {}.{} tem um índice único adequado A tabela não tem uma chave primária, mas possui um índice único não anulável que deve ser usado para espelhamento. Índices únicos anuláveis causam erro durante a fase de replicação e não são suportados.
NO_INDEX_FULL_IDENTITY ADVERTÊNCIA Tabela {}.{} não tem um índice único adequado. Usando identidade completa A tabela não possui uma chave primária nem um índice único, pelo que REPLICA IDENTITY FULL é obrigada a suportar espelhamento, o que pode causar problemas de desempenho e uso adicional de VAL.

1 Identificadores de objeto com um carácter espaço (' ') não são suportados.

2 Este tipo de tabela não é suportado para espelhamento. Atualmente, vistas, vistas materializadas, tabelas estrangeiras e tabelas particionadas não são suportadas. As hipertabelas TimescaleDB também não são suportadas para Fabric Mirroring.

3 Para uma lista de tipos de dados não suportados, veja Limitações. Apenas colunas com os seguintes tipos são suportadas:

  • 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 (* não como chave primária)
  • timestamp without time zone
  • timestamp with time zone
  • uuid
  • xml
  • json
  • jsonb
  • inet
  • cidr
  • macaddr
  • macaddr8
  • tsvector
  • tsquery
  • int4range
  • int8range
  • numrange
  • tsrange
  • tstzrange
  • daterange
  • circle
  • line
  • lseg
  • box
  • path
  • point
  • polygon
  • interval

No Postgres, dois valores de 'tempo com fuso horário' que correspondem exatamente ao mesmo momento, mas em fusos horários diferentes, são considerados diferentes. Por exemplo: 06:24:00.59+05 e 05:24:00.59+04 correspondem à mesma época de época, mas o Postgres trata-os de forma diferente.

Colunas numéricas não restritas por defeito nos esquemas de base de dados de origem (sem precisão e escala definidas) são convertidas para Decimal128(38, 0) antes de serem replicadas para tabelas OneLake, alinhando-se com a convenção padrão SQL de que escala não especificada significa precisão inteira.

Operações de linguagem de definição de dados (DDL) suportadas na base de dados de origem

  • Renomear coluna: uma coluna com o novo nome é adicionada à tabela espelhada em Fabric e contém dados das linhas recém-inseridas (para as linhas existentes serão NULL). A coluna antiga continua a ser mantida com os valores das linhas existentes (pois as novas linhas são NULL).
  • Adicionar coluna: a coluna adicionada é visível na tabela espelhada e contém dados para linhas recém-inseridas (pois as linhas existentes são NULL).
  • Remover coluna: a coluna removida permanece visível na tabela espelhada e contém dados para linhas existentes (pois as novas linhas são NULL).
  • Alterar chave primária: a sessão de espelhamento continua normalmente.

Qualquer outra operação DDL em tabelas de origem não é atualmente suportada e pode causar falhas de replicação.

Alterações na capacidade do Fabric ou no espaço de trabalho

Motivo Result Resolução recomendada
Capacidade Fabric pausada/eliminada Paradas de espelhamento 1. Retomar ou atribuir capacidade a partir do portal Azure
2. Ir ao item da base de dados espelhada do Fabric. Na barra de ferramentas, selecione Parar a replicação.
3. Iniciar a replicação selecionando a base de dados espelhada para o item espelhado no portal Fabric.
Capacidade de malha retomada O espelhamento não será retomado 1. Ir ao item da base de dados espelhada do Fabric. Na barra de ferramentas, selecione Parar a replicação.
2. Iniciar a replicação selecionando a base de dados espelhada para o item espelhado no portal Fabric.
Espaço de trabalho excluído O espelhamento termina automaticamente Se o mirroring ainda estiver ativo no Base de Dados do Azure para PostgreSQL servidor flexível, conecte-se usando um administrador de servidor e execute os seguintes comandos no seu servidor PostgreSQL: select azure_cdc.list_tracked_publications();, depois use o nome de publicação devolvido e execute select azure_cdc.stop_publication(<publication_name>);
A capacidade de avaliação da malha expirou O espelhamento termina automaticamente Veja A capacidade de teste do Fabric expira.
Capacidade de tecido ultrapassada Pausas de espelhamento Aguarde até que o estado de sobrecarga termine ou atualize sua capacidade. Saiba mais em Ações que você pode tomar para se recuperar de situações de sobrecarga. O espelhamento continua assim que a capacidade é recuperada.
Quaisquer outros erros de recursos O espelhamento está desativado Para garantir que os seus recursos de computação não são afetados e para minimizar o impacto no servidor flexível Base de Dados do Azure para PostgreSQL, o espelhamento desativa quaisquer erros persistentes de recursos.
Configuração "Os utilizadores podem aceder a dados armazenados no OneLake com aplicações externas ao Fabric" desativada "Replicador - As tabelas não podem alcançar o status de replicação" Habilite a configuração Locatário , os utilizadores podem acessar dados armazenados no OneLake com aplicativos externos ao Fabric.

Consultas SQL para resolução de problemas

Se estiver a ter problemas de espelhamento, ligue-se ao servidor fonte Base de Dados do Azure para PostgreSQL e realize estas verificações usando visualizações e funções do sistema para validar a configuração.

  1. Execute a seguinte consulta para validar se todos os pré-requisitos são cumpridos antes de iniciar o espelhamento CDC. Esta função verifica vários requisitos do sistema e de configuração para garantir que o servidor está pronto para operações do CDC.
-- Check if all prerequisites are met
SELECT * FROM azure_cdc.check_prerequisites();

-- Example output when all checks pass (on mock mode with identity configured):
 status |                                                               data
--------+----------------------------------------------------------------------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "details": {"current_value": "12", "required_value": "13"}, "status_code": "MAX_WORKER_PROCESSES_TOO_LOW"}]

-- Example output on standby replica:
 status |                                               data
--------+---------------------------------------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "status_code": "SERVER_IN_RECOVERY"}]

-- Example output when identity not configured:
 status |                                data
--------+---------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "status_code": "IDENTITY_NOT_CONFIGURED"}]

Retornos:(status text, data jsonb)

  • status: Estado geral - OK se todos os testes passarem, ERROR se algum teste falhar
  • data: array JSONB contendo entradas de estado detalhadas com status, status_code, e details opcional

Códigos de Estado:

Código de estado Nível Description
IDENTITY_NOT_CONFIGURED ERROR As credenciais do principal de serviço não estão configuradas (azure.service_principal_id ou azure.service_principal_tenant_id GUCs não estão definidos)
CDC_ADMIN_ROLE_NOT_EXISTS ERROR O papel azure_cdc_admin não existe na base de dados
USER_NOT_CDC_ADMIN (Usuário não é administrador do CDC) ERROR O utilizador atual não tem o papel azure_cdc_admin
SEM_PRIVILÉGIO_DE_CRIAÇÃO_NO_BANCO_DE_DADOS ERROR O utilizador atual não tem privilégio CRIAR na base de dados
Limite de publicação atingido ERROR Foi atingido o número máximo de publicações (1) para a base de dados
SERVIDOR_EM_RECUPERAÇÃO ERROR O servidor é uma réplica em modo de espera, em modo de recuperação (o espelhamento CDC não é suportado nos servidores de espera)
Processos_de_Trabalho_Máximos_Muito_Baixos ERROR max_worker_processes está abaixo do limiar recomendado (13)
  1. Execute a seguinte consulta para validar se as tabelas na sua base de dados de origem são elegíveis para replicação. Exclui esquemas de sistema (pg_catalog, information_schema, pg_toast) e tabelas pertencentes à extensão.
SELECT * FROM azure_cdc.get_all_tables_mirror_status();
 table_schema | table_name | mirroring_status |                      mirroring_data
--------------+------------+------------------+------------------------------------------------------
 public       | customers  | OK               | [{"status": "OK", "status_code": "HAS_PRIMARY_KEY"}]
 public       | orders     | OK               | [{"status": "OK", "status_code": "HAS_UNIQUE_INDEX"}]
 public       | logs       | WARNING          | [{"status": "WARNING", "status_code": "NO_INDEX_FULL_IDENTITY"}]

Retornos: Conjunto de (table_schema text, table_name text, mirroring_status text, mirroring_data jsonb)

  • table_schema: Nome do esquema da tabela
  • table_name: Nome da tabela
  • mirroring_status: Estado geral - OK, WARNING, ou ERROR
  • mirroring_data: array JSONB contendo entradas de estado detalhadas com status, status_code e opcionais details

Códigos de Estado:

Código de estado Nível Description
ESQUEMA_NÃO_EXISTE ERROR O esquema especificado não existe
TABELA_NÃO_EXISTE ERROR A tabela especificada não existe no esquema
CARACTERES_PROIBIDOS_NO_NOME_DA_COLUNA ERROR Os nomes das colunas contêm caracteres proibidos (por exemplo, espaços)
CARACTERES_PROIBIDOS_NOME_TABELA ERROR O nome da tabela contém caracteres proibidos
UNSUPPORTED_DATA_TYPE ADVERTÊNCIA A tabela tem colunas com tipos de dados não suportados
UNSUPPORTED_TYPE_IN_REPLICA_IDENTITY ERROR Tipo de dado não suportado em colunas de identidade réplica (quando não existe um índice único)
TABELA_NÃO_REGULAR ERROR Tabela não é uma tabela regular, permanente (por exemplo, vista, temporária, partição).
NÃO_PROPRIETÁRIO_DA_TABELA ERROR O utilizador atual não é o proprietário da tabela
POSSUI_CHAVE_PRIMÁRIA OK A tabela tem uma chave primária
TEM_ÍNDICE_ÚNICO OK A tabela tem um índice único adequado
NO_INDEX_FULL_IDENTITY ADVERTÊNCIA Não existe um índice único adequado; a identidade completa da linha será usada (pode afetar o desempenho)
  1. Execute a consulta seguinte para devolver erros e problemas detetados durante operações de replicação, incluindo erros a nível de sistema, erros específicos de publicação e erros por tabela.
-- Get only system-wide errors
SELECT * FROM azure_cdc.get_health_status('', '');

-- Get system-wide errors and publication-specific errors
SELECT * FROM azure_cdc.get_health_status('my_database', 'my_publication');

Parâmetros:

  • db_name (texto): Nome da base de dados
  • pub_name (texto): Nome da publicação

Comportamento:

  • Quando chamado com cadeias vazias para ambos os parâmetros (azure_cdc.get_health_status('', '')): Retorna apenas erros a nível de sistema (tipo de erro 'S').
  • Quando invocada com nomes válidos de base de dados e publicação: Retorna tanto erros a nível de sistema como erros específicos de publicação/tabela para a publicação especificada.

Retornos: Conjunto de (error_time timestamptz, schema_name text, table_name text, error_type char(1), error_code text, params jsonb)

Tipos de Erro:

Tipo de Erro Description
S Erro em todo o sistema
P Erro específico de publicação
T Erro específico da tabela

Códigos de Erro:

Código de Erro Tipo Description
CDC_ERR_SYS_NÚMERO_MÁXIMO_DE_TRABALHADORES_ATINGIDO S Número máximo de trabalhadores atingidos
CDC_ERR_SYS_Número máximo de publicações atingido S Número máximo de publicações para a base de dados atingido
CDC_ERR_SYS_ONELAKE_PERMISSION_DENIED S Permissão negada para ação OneLake
CDC_ERR_SYS_ONELAKE_ARTIFACT_DOES_NOT_EXIST S Artefato de OneLake não encontrado
CDC_ERR_SYS_ONELAKE_COMM_FAILED S A comunicação OneLake falhou
CDC_ERR_SYS_ONELAKE_BAD_REQUEST S Mau pedido ao OneLake
CDC_ERR_PUB_SNAPSHOT_TIMEOUT P Snapshot não está pronto após o timeout
CDC_ERR_PUB_SNAPSHOT_WORKER_TIMEOUT P Timeout do trabalhador instantâneo para uma tabela específica
CDC_ERR_PUB_ONELAKE_PERMISSION_DENIED P Permissão negada para ação OneLake
CDC_ERR_PUB_ONELAKE_ARTIFACT_DOES_NOT_EXIST P Artefato de OneLake não encontrado
CDC_ERR_PUB_ONELAKE_COMM_FAILED P A comunicação com o sistema OneLake falhou
CDC_ERR_PUB_MAX_NUMBER_OF_WORKERS_REACHED P Número máximo de trabalhadores alcançados para publicação
CDC_ERR_PUB_ONELAKE_BAD_REQUEST P Mau pedido ao OneLake
CDC_ERR_PUB_TOO_MANY_ERRORS P Demasiados erros durante o processamento da publicação
CDC_ERR_TABLE_TRUNCATE_NOT_SUPPORTED T Operação de truncamento não suportada (pode causar inconsistência nos dados)
  1. Execute a seguinte consulta para verificar se a publicação foi criada corretamente e se as alterações de replicação fluem corretamente:

    select * from azure_cdc.tracked_publications;
    

    Verifique se a publicação está ativa e se o snapshot foi gerado. Também pode verificar se foram gerados lotes de alterações subsequentes através de consultas:

    select * from azure_cdc.tracked_batches;
    
  2. Se a azure_cdc.tracked_publications visualização não mostrar qualquer progresso no processamento de alterações incrementais, execute a seguinte consulta SQL para verificar se há problemas reportados:

    SELECT * FROM pg_stat_activity WHERE state = 'idle in transaction';
    
  3. Se não forem reportados problemas, execute o seguinte comando para rever a configuração atual da base de dados PostgreSQL espelhada. Confirme se ele foi ativado corretamente.

    SELECT * FROM pg_replication_slots;
    

    As principais colunas a procurar aqui são as slot_name e active. Qualquer valor diferente de t (true) indica um problema potencial.

  4. Entre em contato com o suporte se a solução de problemas for necessária.

Identidade gerenciada

A Identidade Gerida Atribuída ao Sistema (SAMI) do servidor flexível Base de Dados do Azure para PostgreSQL precisa de estar ativada e deve ser a identidade principal. Para mais informações, consulte Identidade gerida atribuída pelo sistema para o servidor flexível PostgreSQL.

Após a ativação, se o estado da configuração SAMI for posteriormente desativado e novamente ativado, o espelhamento do servidor flexível "Base de Dados do Azure para PostgreSQL" para o Fabric OneLake falha.

Verifique se o SAMI está ativado com a seguinte consulta: show azure.service_principal_id;

Permissões SAMI

Não remova as permissões do contributo do Base de Dados do Azure para PostgreSQL para servidor flexível System Assigned Managed Identity (SAMI) no item espelhado da base de dados Fabric.

Se remover acidentalmente permissões SAMI, o Mirroring Base de Dados do Azure para PostgreSQL flexible server não funciona como esperado. Nenhum novo dado pode ser espelhado do banco de dados de origem.

Se remover as permissões SAMI do servidor flexível do Base de Dados do Azure para PostgreSQL ou se as permissões não estiverem configuradas corretamente, use os seguintes passos.

  1. Adicione o servidor flexível SAMI como utilizador selecionando a ... opção de elipses no item espelhado da base de dados.
  2. Selecione a opção Gerenciar permissões .
  3. Insira o nome do Base de Dados do Azure para PostgreSQL flexible server. Forneça permissões de Leitura e Gravação.