Resolver erros de migração
O processo de job de migração pode apresentar erros durante o tempo de execução.
- Alguns erros, como uma senha incorreta no banco de dados de origem, são recuperáveis, o que significa que eles podem ser corrigidos e o job de migração é retomado automaticamente.
- Alguns são irreversíveis, como erros na replicação de dados, o que significa que o job de migração precisa ser reiniciado desde o início.
Quando um erro ocorre, o status do job de migração muda para Failed
, e o substatus reflete o último status antes da falha.
Para resolver um problema, acesse o job de migração com falha para conferir o erro e siga as etapas descritas na mensagem de erro.
Para conferir mais detalhes sobre o erro, acesse o Cloud Monitoring usando o link no job de migração. Os registros são filtrados para o job de migração específico.
Na tabela a seguir, confira alguns exemplos de problemas e como resolvê-los:
Sintoma | Causas possíveis | O que você pode tentar |
---|---|---|
Falha ao se conectar à instância do banco de dados de origem. | Houve um problema de conectividade entre a instância de origem e a de destino do banco de dados. | Siga as etapas em Como depurar a conectividade. |
Falha ao executar o job de migração devido a versões incompatíveis do banco de dados de origem e de destino. | As versões do banco de dados de origem e de destino não são uma combinação compatível. Especificamente, a versão do banco de dados de origem fornecida é incompatível com a versão do banco de dados de destino. | Verifique se a versão do banco de dados de destino é igual ou uma versão principal mais recente do que a versão do banco de dados de origem. Em seguida, crie um novo job de migração. |
As linguagens de definição de dados (DDLs) ou de manipulação de dados (DMLs) são bloqueadas na origem. | Os DDLs que exigem o bloqueio ACCESS EXCLUSIVE e estão em execução durante a fase de despejo completo são bloqueados. |
Durante o processo de sincronização inicial (dump completo), DDLs ou programas que exigem bloqueios Por exemplo, se uma tabela ainda estiver no processo de sincronização inicial e um comando |
Mensagem de erro: No pglogical extension installed on databases (X)
|
Um ou mais bancos de dados de origem não têm pglogical instalado. |
Siga estas diretrizes para instalar o pglogical nos bancos de dados da instância de origem. |
Mensagem de erro: Replication user 'x' doesn't have sufficient privileges.
|
O usuário que está usando o Database Migration Service não tem os privilégios necessários para realizar a operação designada. | Siga estas diretrizes para garantir que esse usuário tenha os privilégios necessários. |
Mensagem de erro: Unable to connect to source database server.
|
O Database Migration Service não consegue estabelecer uma conexão com o servidor de banco de dados de origem. | Verifique se as instâncias de banco de dados de origem e de destino podem se comunicar entre si e se você concluiu todos os pré-requisitos necessários que apareceram quando definiu as configurações do job de migração. |
Mensagem de erro: The source database 'wal_level' configuration must be equal to 'logical'.
|
O wal_level do banco de dados de origem é definido como um valor diferente de logical . |
Defina wal_level como logical . |
Mensagem de erro: The source database 'max_replication_slots' configuration is not sufficient.
|
O parâmetro max_replication_slots não foi configurado corretamente. |
Siga estas diretrizes para definir esse parâmetro corretamente. |
Mensagem de erro: The source database 'max_wal_senders' configuration is not sufficient.
|
O parâmetro max_wal_senders não foi configurado corretamente. |
Siga estas diretrizes para definir esse parâmetro corretamente. |
Mensagem de erro: The source database 'max_worker_processes' configuration is not sufficient.
|
O parâmetro max_worker_processes não foi configurado corretamente. |
Siga estas diretrizes para definir esse parâmetro corretamente. |
Mensagem de erro: OU
Mensagem de erro: |
As configurações necessárias para a replicação não podem ser limpas durante a promoção de um job de migração. | Para cada banco de dados, execute comandos como um usuário com o privilégio Para mais informações sobre quais comandos executar, consulte Limpar slots de replicação. |
Mensagem de erro: |
O certificado da AC de origem fornecido ao Database Migration Service pode conter apenas o certificado raiz. No entanto, o certificado de origem exige o certificado raiz e todos os certificados intermediários. Por exemplo, no Amazon Relational Database Service, o uso do certificado rds-ca-2019-root.pem pode resultar nesse problema. |
Crie um certificado de CA de origem combinado que contenha o certificado raiz e todos os certificados intermediários necessários. Para o caso de uso do Amazon Relational Database Service, em vez do certificado rds-ca-2019-root.pem, use o certificado rds-combined-ca-bundle.pem. |
Mensagem de erro: |
O valor definido para o parâmetro max_locks_per_transaction não é suficiente. |
Defina o valor desse parâmetro como pelo menos {max_number_of_tables_per_database }/(max_connections + max_prepared_transactions ). |
Mensagem de erro: |
O pacote pglogical não está instalado corretamente na instância de origem. | Para mais informações sobre como instalar esse pacote corretamente, consulte Instalar o pacote pglogical na instância de origem. |
Mensagem de erro: |
A origem configurada está no modo de recuperação. | Configure uma origem que não esteja no modo de recuperação. |
O despejo completo é lento. | O destino do AlloyDB pode ser lento ao importar dados grandes do banco de dados de origem. |
|
Mensagem de erro: subscriber {subscriber_name} initialization failed during nonrecoverable step (d), please try the setup again |
O job de migração falhou durante a fase de despejo completa e não pode ser recuperado. A instância do banco de dados de origem foi reiniciada ou está no modo de recuperação. As conexões de replicação foram encerradas devido a um valor insuficiente definido para o parâmetro Para encontrar a causa raiz do problema:
|
|
Mensagem de erro: ERROR: unknown column name {column_name} |
Uma coluna foi adicionada a uma tabela replicada no nó principal, mas não no nó de réplica. |
Somente as mudanças na linguagem de manipulação de dados (DML) são atualizadas automaticamente durante as migrações contínuas. O gerenciamento de mudanças na linguagem de definição de dados (DDL) para que os bancos de dados de origem e destino permaneçam compatíveis é responsabilidade do usuário e pode ser feito de duas maneiras:
Consulte Migração contínua para encontrar os exemplos de uso do |
Mensagem de erro: ERROR: cannot truncate a table referenced in a foreign key constraint |
O usuário tentou truncar uma tabela com uma restrição de chave externa. |
Remova a restrição chave externa primeiro e, em seguida, trunce a tabela. |
Mensagem de erro: ERROR: connection to other side has died |
A conexão de replicação foi encerrada devido a um valor insuficiente definido para |
Aumente o valor do parâmetro |
Limpar slots de replicação
Você verá uma das seguintes mensagens:
Cleanup may have failed on source due to error: generic::unknown: failed to connect to on-premises database.
Error promoting EM replica: finished drop replication with errors.
Causas possíveis
Ao promover uma instância do AlloyDB, se a instância de origem não puder ser acessada pela instância do AlloyDB (por exemplo, se a instância de origem não estiver em execução ou se você tiver removido a instância do AlloyDB da lista de permissões de instâncias de origem), as configurações necessárias para a replicação não poderão ser limpas durante a promoção de um job de migração. É necessário limpar os slots de replicação manualmente.
O que você pode tentar
Para cada banco de dados, execute os seguintes comandos como um usuário com o privilégio superuser
:
Acesse os nomes dos slots de replicação na mensagem de erro e execute o comando a seguir para excluir os slots, um por um:
select pg_drop_replication_slot({slot_name});
-
Se os nomes dos slots de replicação não estiverem disponíveis na mensagem de erro, execute o comando a seguir para consultar os slots de replicação atuais:
select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name like '%alloydb%' and active = 'f';
-
Se não houver réplicas do AlloyDB usando a instância de origem, execute o comando a seguir para limpar as configurações de
pglogical
:select pglogical.drop_node(node_name) from pglogical.node where node_name like
'alloydb';
-
Se a extensão
pglogical
não for mais necessária, execute o seguinte comando para desinstalá-la:DROP EXTENSION IF EXISTS pglogical;
Excluir clusters órfãos do AlloyDB no modo de inicialização
Em casos extremos raros, talvez o job de migração tenha sido excluído, mas o cluster do AlloyDB associado não, e ainda esteja no modo de inicialização. É possível excluir o cluster usando o comando gcloud do AlloyDB para excluir um cluster, combinado com a opção --force
.
A exclusão de um cluster de inicialização enquanto ele está sendo usado por um job de migração resulta em comportamento indefinido.
Gerenciar usuários e funções
Migrar usuários atuais
No momento, o Database Migration Service não oferece suporte à migração de usuários de uma instância de origem para uma instância de destino do AlloyDB. É possível gerenciar essa migração criando os usuários no AlloyDB manualmente.
Sobre o usuário alloydbexternalsync
Durante a migração, todos os objetos no primário do AlloyDB são de propriedade do usuário alloydbexternalsync
. Depois que os dados forem migrados, você poderá modificar a propriedade dos objetos para outros usuários seguindo estas etapas:
- Execute o comando
GRANT alloydbexternalsync to {USER}
. - Em cada banco de dados, execute o comando
reassign owned by alloydbexternalsync to {USER};
. - Para remover o usuário
alloydbexternalsync
, execute o comandodrop role alloydbexternalsync
.