Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
bigintbigserialbooleanbyteacharactercharacter varyingdatedouble precisionintegernumericrealserialoidmoneysmallintsmallserialtexttime without time zone-
time with time zone(* não como chave primária) timestamp without time zonetimestamp with time zoneuuidxmljsonjsonbinetcidrmacaddrmacaddr8tsvectortsqueryint4rangeint8rangenumrangetsrangetstzrangedaterangecirclelinelsegboxpathpointpolygoninterval
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.
- 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 -OKse todos os testes passarem,ERRORse algum teste falhar -
data: array JSONB contendo entradas de estado detalhadas comstatus,status_code, edetailsopcional
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) |
- 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, ouERROR -
mirroring_data: array JSONB contendo entradas de estado detalhadas comstatus,status_codee opcionaisdetails
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) |
- 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) |
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;Se a
azure_cdc.tracked_publicationsvisualizaçã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';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_nameeactive. Qualquer valor diferente det(true) indica um problema potencial.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.
- Adicione o servidor flexível SAMI como utilizador selecionando a
...opção de elipses no item espelhado da base de dados. - Selecione a opção Gerenciar permissões .
- Insira o nome do Base de Dados do Azure para PostgreSQL flexible server. Forneça permissões de Leitura e Gravação.