Solucionar problemas de bancos de dados espelhados da solução Fabric no servidor flexível do Banco de Dados do Azure para PostgreSQL

Este artigo aborda as etapas de solução de problemas para replicar servidores flexíveis do Azure Database para PostgreSQL.

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

Ao criar um novo banco de dados espelhado, na página Escolher dados , você poderá receber alguns comentários visuais sobre tabelas específicas no banco de dados de origem. A tabela a seguir fornece uma lista de possíveis problemas, incluindo a mensagem exibida e a descrição relacionada sobre como resolver o problema.

Código de status Tipo de status Message Description
SCHEMA_DOES_NOT_EXIST ERRO O esquema {} não existe Determinado esquema não existe. Poderia ter sido removido enquanto Fabric estava obtendo informações relevantes da tabela. Repita.
TABLE_DOES_NOT_EXIST ERRO No esquema {}, a tabela {} não existe. Determinada tabela não existe. Poderia ter sido removido enquanto Fabric estava obtendo informações relevantes da tabela. Repita.
FORBIDDEN_CHARS_IN_COLUMN_NAME ERRO Tabela {}.{} contém caracteres proibidos em nome de colunas {} A coluna tem um caractere não suportado no nome. 1
UNSUPPORTED_DATA_TYPE ERRO Tabela {}.{} tem tipo de dado não suportado na coluna {} Uma (ou mais) colunas da tabela têm tipos de dados sem suporte no momento. 3
FORBIDDEN_CHARS_IN_TABLE_NAME ERRO Tabela {}.{} contém caracteres proibidos no nome O nome da tabela tem caracteres sem suporte. 1
NOT_REGULAR_TABLE ERRO Tabela {}.{} não é uma tabela regular Tipo de tabela não é compatível com espelhamento. 2
HAS_PRIMARY_KEY OKEY 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 OKEY Tabela {}.{} tem um índice exclusivo adequado A tabela não tem uma chave primária, mas tem um índice exclusivo não anulável que deve ser usado para espelhamento. Índices exclusivos anuláveis causarão um erro durante a fase de replicação e não terão suporte.
NO_INDEX_FULL_IDENTITY AVISO A tabela {}.{} não tem um índice exclusivo adequado. Usando a identidade completa A tabela não tem uma chave primária ou um índice exclusivo, portanto REPLICA IDENTITY FULL é necessário para dar suporte ao espelhamento, o que pode causar problemas de desempenho e um uso adicional de WAL.

1 Não há suporte para identificadores de objeto com um caractere de espaço (' ').

2 Este tipo de tabela não tem suporte para espelhamento. Atualmente, não há suporte para exibições, exibições materializadas, tabelas estrangeiras e tabelas particionadas. Hipertabelas do TimescaleDB também não têm suporte para o espelhamento de Fabric.

3 Para obter uma lista de tipos de dados sem suporte, consulte Limitações. Há suporte apenas para colunas com os seguintes tipos:

  • 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 uma 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 "hora com fuso horário" que correspondem exatamente ao mesmo momento, mas em fusos horários diferentes, são tratados como distintos. Por exemplo: 06:24:00.59+05 e 05:24:00.59+04 correspondem ao mesmo tempo de época, mas o Postgres os trata de forma diferente.

Colunas numéricas sem restrições em esquemas de bancos de dados de origem (sem precisão e escala definidas) são convertidas em Decimal128(38, 0) antes de serem replicadas em tabelas OneLake, alinhando-se à convenção padrão do SQL, onde a escala não especificada significa precisão de número inteiro.

Operações de DDL (linguagem de definição de dados) com suporte no banco de dados de origem

  • Renomear coluna: uma coluna com o novo nome é adicionada à tabela espelhada no Fabric e contém dados para linhas recém-inseridas (para linhas existentes é NULL). A coluna antiga ainda é mantida com valores para as linhas existentes (para 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 (para linhas existentes são NULL).
  • Remover coluna: a coluna removida permanece visível na tabela espelhada e contém dados para linhas existentes (nas novas linhas, os dados são NULL).
  • Alterar chave primária: a sessão de espelhamento continua regularmente.

No momento, não há suporte para qualquer outra operação DDL em tabelas de origem e pode causar falhas de replicação.

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

Motivo Resultado Resolução recomendada
Capacidade da malha pausada/excluída Interrupção do espelhamento 1. Retomar ou atribuir capacidade do portal do Azure
2. Vá para o item espelhado do banco de dados do Fabric. Na barra de ferramentas, selecione Parar replicação.
3. Inicie a replicação selecionando o banco de dados Espelho para o item espelhado no portal do Fabric.
Capacidade da malha retomada O espelhamento não será retomado 1. Vá para o item espelhado do banco de dados do Fabric. Na barra de ferramentas, selecione Parar replicação.
2. Inicie a replicação selecionando o banco de dados Espelho para o item espelhado no portal do Fabric.
Área de trabalho excluída O espelhamento é interrompido automaticamente Se o espelhamento ainda estiver ativo no servidor flexível do Banco de Dados do Azure para PostgreSQL, conecte-se usando um administrador de servidor e execute os seguintes comandos no servidor PostgreSQL: select azure_cdc.list_tracked_publications();, em seguida, use o nome da publicação retornado e execute select azure_cdc.stop_publication(<publication_name>);
A capacidade de avaliação da Fabric expirou O espelhamento é interrompido automaticamente Veja "expiração da capacidade de teste do Fabric".
Capacidade de malha excedida Pausas de espelhamento Aguarde até que o estado de sobrecarga termine ou atualize sua capacidade. Saiba mais em Ações que você pode executar para se recuperar de situações de sobrecarga. O espelhamento continua assim que a capacidade é recuperada.
Quaisquer outros erros de recursos O espelhamento está desabilitado Para garantir que os recursos de computação não sejam afetados e minimizar o impacto no servidor flexível do Banco de Dados do Azure para PostgreSQL, o espelhamento desabilita quaisquer erros de recurso persistentes.
A configuração "Os usuários podem acessar dados armazenados no OneLake com aplicativos externos ao Fabric" está desabilitada. "Replicador – Tabelas não conseguem alcançar o estado de replicação" Habilite a configuração do locatário Os usuários podem acessar dados armazenados no OneLake com aplicativos externos ao Fabric.

Consultas SQL para solução de problemas

Se você estiver enfrentando problemas de espelhamento, conecte-se ao servidor de Banco de Dados do Azure para PostgreSQL de origem e execute essas verificações usando exibições e funções do sistema para validar a configuração.

  1. Execute a consulta seguinte para verificar se todos os pré-requisitos são atendidos antes de iniciar o espelhamento CDC. Essa função verifica vários requisitos de sistema e configuração para garantir que o servidor esteja pronto para operações 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"}]

Retorna:(status text, data jsonb)

  • status: status geral - OK se todas as verificações forem aprovadas, ERROR se alguma verificação falhar
  • data: matriz JSONB que contém entradas de status detalhadas com status, status_codee opcional details

Códigos de status:

Código de status Level Description
IDENTIDADE_NÃO_CONFIGURADA ERRO As credenciais da entidade de serviço não estão configuradas (azure.service_principal_id ou azure.service_principal_tenant_id GUCs não definidos)
CDC_ADMIN_ROLE_NOT_EXISTS (Função de administrador CDC não existe) ERRO A função azure_cdc_admin não existe no banco de dados
USUÁRIO_NÃO_É_ADMINISTRADOR_DO_CDC ERRO O usuário atual não tem a função azure_cdc_admin
SEM_PRIVILÉGIO_PARA_CRIAR_NO_BANCO_DE_DADOS ERRO O usuário atual não tem privilégio CREATE no banco de dados
LIMITE_DE_PUBLICAÇÃO_ATINGIDO ERRO O número máximo de publicações (1) foi atingido para o banco de dados
SERVIDOR_EM_RECUPERAÇÃO ERRO O servidor é uma réplica em espera em modo de recuperação (espelhamento CDC não é suportado em réplicas em espera)
MAX_WORKER_PROCESSES_TOO_LOW ERRO max_worker_processes está abaixo do limite recomendado (13)
  1. Execute a consulta a seguir para validar se as tabelas no banco de dados de origem estão qualificadas para replicação. Exclui esquemas do sistema (pg_catalog, information_schema, pg_toast) e tabelas pertencentes a extensões.
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"}]

Retorna: 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: status geral - OK, WARNING, ou ERROR
  • mirroring_data: matriz JSONB que contém entradas de status detalhadas com status, status_codee opcional details

Códigos de status:

Código de status Level Description
ESQUEMA_NÃO_EXISTE ERRO O esquema especificado não existe
TABELA_NÃO_EXISTE ERRO A tabela especificada não existe no esquema
FORBIDDEN_CHARS_IN_COLUMN_NAME ERRO Os nomes de coluna contêm caracteres proibidos (por exemplo, espaços)
FORBIDDEN_CHARS_IN_TABLE_NAME (Caracteres_Proibidos_Na_Nome_Tabela) ERRO O nome da tabela contém caracteres proibidos
UNSUPPORTED_DATA_TYPE AVISO A tabela tem colunas com tipos de dados sem suporte
UNSUPPORTED_TYPE_IN_REPLICA_IDENTITY ERRO Tipo de dados não suportado em colunas de identidade de réplica (quando nenhum índice único existe)
TABELA_NÃO_REGULAR ERRO Tabela não é uma tabela regular e permanente (por exemplo, visão, temporária, partição)
NOT_TABLE_OWNER ERRO O usuário atual não é o proprietário da tabela
TEM_CHAVE_PRIMÁRIA OKEY A tabela tem uma chave primária
TEM_ÍNDICE_ÚNICO OKEY A tabela tem um índice exclusivo adequado
NO_INDEX_FULL_IDENTITY AVISO Nenhum índice exclusivo adequado; identidade de linha completa será usada (pode afetar o desempenho)
  1. Execute a consulta a seguir para retornar erros e problemas detectados durante operações de replicação, incluindo erros em todo o 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 do banco de dados
  • pub_name (texto): nome da publicação

Comportamento:

  • Quando chamado com cadeias de caracteres vazias para ambos os parâmetros (azure_cdc.get_health_status('', '')): retorna somente erros em todo o sistema (tipo de erro 'S').
  • Quando chamado com nomes válidos de banco de dados e publicação: retorna erros em todo o sistema e erros específicos de publicação/tabela para a publicação especificada.

Retorna: 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 da publicação
T Erro específico da tabela

Códigos de erro:

Código de erro Tipo Description
CDC_ERR_SYS_MAX_NUMBER_OF_WORKERS_REACHED (Número máximo de trabalhadores do sistema atingido) S Número máximo de trabalhadores atingidos
CDC_ERR_SYS_NUMERO_MAXIMO_DE_PUBLICAÇÕES_ATINGIDO S Número máximo de publicações para o banco de dados atingido
CDC_ERR_SYS_ONELAKE_PERMISSAO_NEGADA S Permissão negada para a ação do OneLake
CDC_ERR_SYS_ONELAKE_ARTIFACT_DOES_NOT_EXIST S Artefato OneLake não encontrado
CDC_ERR_SYS_ONELAKE_COMM_FAILED - Falha na comunicação com o sistema Onelake. S Falha na comunicação do OneLake
CDC_ERR_SYS_ONELAKE_BAD_REQUEST S Solicitação incorreta para o OneLake
CDC_ERR_PUB_SNAPSHOT_TIMEOUT (Erro de Tempo de Espera da Publicação de Snapshot do CDC) P Instantâneo não pronto após o tempo limite
CDC_ERR_PUB_SNAPSHOT_WORKER_TIMEOUT P Tempo limite do trabalho de instantâneo para uma tabela específica
CDC_ERR_PUB_ONELAKE_PERMISSION_DENIED (Permissão negada para publicação no OneLake) P Permissão negada para a ação do OneLake
CDC_ERR_PUB_ONELAKE_ARTIFACT_DOES_NOT_EXIST P Artefato OneLake não encontrado
CDC_ERR_PUB_ONELAKE_COMM_FAILED P Falha na comunicação do OneLake
CDC_ERR_PUB_MAX_NUMBER_OF_WORKERS_REACHED (Número máximo de trabalhadores atingido) P Número máximo de trabalhadores atingidos para publicação
CDC_ERR_PUB_ONELAKE_BAD_REQUEST P Solicitação incorreta no OneLake
CDC_ERR_PUB_TOO_MANY_ERRORS (Erro: Publicação com muitos erros) P Muitos erros durante o processamento da publicação
CDC_ERR_TABLE_TRUNCATE_NOT_SUPPORTED T Operação de truncamento sem suporte (pode causar inconsistência de dados)
  1. Execute a consulta a seguir para verificar se a publicação foi criada corretamente e as alterações de replicação fluem corretamente:

    select * from azure_cdc.tracked_publications;
    

    Verifique se a publicação está ativa e se o instantâneo foi gerado. Você também pode verificar se os lotes de alteração subsequentes foram gerados consultando:

    select * from azure_cdc.tracked_batches;
    
  2. Se a exibição azure_cdc.tracked_publications não mostrar nenhum progresso no processamento de alterações incrementais, execute a seguinte consulta SQL para verificar se há algum problema relatado:

    SELECT * FROM pg_stat_activity WHERE state = 'idle in transaction';
    
  3. Se não houver nenhum problema relatado, execute o comando a seguir para examinar a configuração atual do banco de dados PostgreSQL espelhado. Confirme se ele foi habilitado corretamente.

    SELECT * FROM pg_replication_slots;
    

    As colunas de chave a serem procuradas aqui são slot_name e active. Qualquer valor além t (true) indica um possível problema.

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

Identidade gerenciada

A SAMI (Identidade Gerenciada Atribuída pelo Sistema) do servidor flexível do Banco de Dados do Azure para PostgreSQL precisa ser habilitada e deve ser a identidade primária. Para obter mais informações, consulte a identidade gerenciada atribuída pelo sistema para o servidor flexível postgreSQL.

Após a habilitação, se o status de configuração do SAMI for posteriormente desabilitado e depois habilitado novamente, o espelhamento do servidor flexível do Banco de Dados do Azure para PostgreSQL no Fabric OneLake falhará.

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

Permissões SAMI

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

Se você remover permissões SAMI, o Espelhamento do Banco de Dados do Azure para o servidor flexível PostgreSQL não funcionará conforme o esperado, acidentalmente. Nenhum dado novo pode ser espelhado do banco de dados de origem.

Se você remover permissões SAMI do Azure Database para servidor flexível PostgreSQL ou as permissões não estiverem configuradas corretamente, use os passos a seguir.

  1. Adicione o servidor flexível SAMI como um usuário selecionando a opção de reticências ... no item de banco de dados espelhado.
  2. Selecione a opção Gerenciar Permissões .
  3. Insira o nome do servidor flexível do PostgreSQL no Banco de Dados do Azure. Forneça permissões de leitura e gravação.