Diagnosticar problemas nas migrações do Oracle para o Cloud SQL para PostgreSQL

Esta página lista erros conhecidos e etapas recomendadas de solução de problemas para:

Erros de jobs 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 job de migração é retomado automaticamente depois que esses erros são corrigidos.
  • Alguns erros são irrecuperáveis, como os de replicação de dados. É necessário reiniciar o job de migração depois que esses erros forem corrigidos.

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 ver o erro e siga as etapas descritas na mensagem de erro. Para ver mais detalhes sobre o erro, navegue até 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 eles podem ser resolvidos:

Sintoma Causas possíveis O que você pode tentar
Mensagem de erro: Database Migration Service can't set up a tunnel to be connected to the bastion host O Database Migration Service não conseguiu acessar o Bastion Host ou ele não está aceitando conexões. Verifique as configurações do túnel SSH de encaminhamento no perfil de conexão de origem e na configuração do servidor de túnel SSH. Depois, tente de novo.
Mensagem de erro: Database Migration Service can't connect to the database ou Database Migration Service private connectivity error, cannot connect to the database. O Database Migration Service não conseguiu estabelecer conectividade com o banco de dados Oracle de origem.

Verifique se você pode acessar o banco de dados de origem no seu projeto. Verifique as configurações relacionadas ao seu método de configuração de conectividade de origem.

Se houver um código de erro específico do Oracle, por exemplo ORA-12170: TNS:Connect timeout occurred, consulte a documentação do Oracle para mais informações.

Mensagem de erro: Archiving mode is not ARCHIVELOG O banco de dados de origem não está sendo executado no modo ARCHIVELOG. Configure o banco de dados de origem para usar o modo ARCHIVELOG. Para mais informações, consulte Configurar seu banco de dados Oracle de origem.
Mensagem de erro: Supplemental logging ("ALL COLUMN LOGGING") isn't turned on for the tables listed below O banco de dados de origem não tem dados de registro complementar ativados. Ative os dados de registro complementares e defina o modo como ALL. Para mais informações, consulte Configurar seu banco de dados Oracle de origem.
Mensagem de erro: No Archive Log Files were found in the source O Database Migration Service lê apenas registros de arquivamento fechados, e nenhum registro foi encontrado no banco de dados de origem.
  1. Execute o comando a seguir no banco de dados de origem para fechar o arquivo de registro atual: ALTER SYSTEM SWITCH LOGFILE.
  2. Tente encontrar os registros novamente.

Se o banco de dados não tiver operações de gravação ativas, talvez seja necessário realizar pelo menos uma operação INSERT para acionar a criação do registro.

Mensagem de erro: We're missing the necessary permissions to read from the source A conta de usuário de migração no banco de dados de origem não tem as permissões necessárias.

O Database Migration Service se conecta à sua origem como a conta de usuário que você configura no perfil de conexão de origem. Essa conta precisa de um conjunto específico de permissões (por exemplo, SELECT ANY TABLE) para ler dados no banco de dados de origem.

Verifique se a conta de usuário da migração tem os privilégios necessários. Para mais informações, consulte Configurar seu banco de dados Oracle de origem.

Mensagem de erro: Unable to connect to the destination database Ocorreu um problema ao se conectar ao banco de dados de destino. Verifique se você pode acessar o banco de dados de destino no seu projeto. Verifique as configurações relacionadas ao seu método de configuração de conectividade de destino.
Mensagem de erro: The following tables don't exist in the destination database: {table_names} As tabelas listadas que você está tentando migrar não existem no banco de dados de destino. O Database Migration Service cria a tabela e as definições necessárias quando você converte o esquema de origem.
Mensagem de erro: password authentication failed for user {username} O nome de usuário ou a senha do banco de dados de destino estão mal configurados. Verifique se o perfil de conexão de destino do PostgreSQL está configurado corretamente com o nome de usuário e a senha certos.
Mensagem de erro: The following tables in the destination database don't have primary keys: {table_names} As tabelas listadas na mensagem de erro existem no banco de dados de destino, mas não têm chaves primárias.

Os espaços de trabalho de conversão do Database Migration Service adicionam automaticamente chaves primárias para tabelas que não as têm ao converter o esquema.

Se você usa espaços de trabalho de conversão legados, precisa criar as chaves primárias manualmente no destino. Para mais informações, consulte Espaços de trabalho de conversão legados.

Aviso: The following tables have foreign keys: {table_names}. As tabelas listadas na mensagem de erro existem no banco de dados de destino, mas têm chaves externas.

O Database Migration Service não replica dados de maneira transacional, então as tabelas podem ser migradas fora de ordem. Se houver chaves estrangeiras e uma tabela filha que usa uma chave externa for migrada antes da mãe, poderão ocorrer erros de replicação.

Para evitar esses problemas de integridade de dados, pule as chaves externas usando a opção REPLICATION para o usuário da migração. Para mais informações, consulte Considerações sobre chaves externas e triggers.

Mensagem de erro: Unable to resume replication as log position is lost Esse erro pode ocorrer quando o processo de replicação está pausado por muito tempo, o que leva à perda da posição do registro. Um job de migração não pode ser pausado por um período maior ou próximo ao período de armazenamento de registros. Se a posição do registro for perdida, será necessário recriar o job de migração.
Mensagem de erro: ORA-00942: table or view does not exist Esse erro pode ocorrer devido ao armazenamento em cache no servidor Oracle. Recrie o usuário do banco de dados para corrigir o problema de armazenamento em cache.
O job de migração permanece na fase de despejo completo e não avança para a fase de captura de dados alterados (CDC). O Database Migration Service ainda está realizando o despejo completo de algumas tabelas, ou uma ou mais tabelas não podem concluir o despejo completo devido a erros.
  • Verifique os erros do job de migração e corrija os que se aplicam às tabelas ou remova as tabelas associadas do job.
  • Verifique os registros do Database Migration Service para ver a atividade de despejo completo em andamento e aguarde até que ela termine.

Problemas de conectividade

Nesta seção, listamos e descrevemos as etapas de solução de problemas para possíveis problemas de conectividade de rede.

Não foi possível se conectar ao banco de dados de destino: EOF

A execução de um teste de conectividade retorna a mensagem de erro [DATABASE] unable to connect to the destination database: EOF.

Possível causa:o anexo de serviço está configurado incorretamente.

O que tentar:verifique se enable_proxy_protocol está definido como false no arquivo de configuração do Terraform do anexo de serviço. O protocolo proxy é compatível apenas com servidores HTTP, como NGINX e Apache.

Ao usar gcloud para criar a configuração do Private Service Connect, o protocolo proxy é desativado por padrão.

Tempo limite de conexão, conexão recusada

A execução do teste de conectividade falha ou expira. Isso provavelmente é causado por roteamento mal configurado na configuração do Private Service Connect. Esse problema pode ocorrer por vários motivos.

Possível causa:há uma regra de firewall ausente que permite que o intervalo CIDR NAT do Private Service Connect acesse a sub-rede do Private Service Connect em que o bastion está localizado, especificamente a interface nic0 da VM do bastion.

O que fazer: verifique se a política da organização não restringe regras de firewall internas, como a regra psc_sp_in_fw definida no script de exemplo do Terraform para configurar a conectividade de IP privado de destino para instâncias do Cloud SQL não ativadas para PSC.

Possível causa:o proxy está inativo. Não há um listener na porta fornecida e, portanto, a conexão fica pendente.

O que tentar:estabeleça uma conexão SSH com a VM bastion e pesquise o proxy usando o seguinte comando:

  • netstat -tunalp | grep PORT

Analise as respostas ao comando:

  • Se você receber uma resposta vazia, o proxy está inativo. Tente executar os seguintes comandos:

    sudo su; cd / e verifique se o servidor Dante está instalado executando sudo dpkg -s dante-server:

    • Se o proxy estiver instalado, você vai receber a seguinte mensagem:

      Status: install ok installed

    • Se o proxy não estiver instalado, o problema provável é a falta de um roteador. Adicione um roteador e verifique se é possível fazer o download do proxy executando apt-get install dante-server.

  • Se o proxy estiver em execução e escutando na porta fornecida, tente abrir uma conexão com ele fazendo o seguinte:

    1. Instale o cliente PostgreSQL:

      sudo apt-get install postgresql-client.

    2. Conecte-se ao banco de dados PostgreSQL:

      psql -h 127.0.0.1 -p PORT -U DBUSERNAME -W (será necessário inserir a senha).

      Substitua:

      • PORT: o número da porta do banco de dados.
      • DBUSERNAME: o nome de usuário usado para se conectar ao banco de dados do PostgreSQL.
    3. Instale o cliente telnet:

      sudo apt-get install telnet

    4. Conecte-se ao cliente telnet:

      telnet 127.0.0.1 PORT

      Substitua PORT pelo número da porta do banco de dados.

    Dependendo dos resultados dos comandos:

    • Se os comandos não abrirem uma conexão, consulte os registros do proxy para localizar a causa raiz. A causa raiz pode variar dependendo da configuração da instância do Cloud SQL.

    • Se a conexão for aberta usando telnet, mas ficar travada no cliente, o problema provável é o roteamento do endereço IP do bastion. Na VM, digite ip route no terminal. Verifique se é possível localizar uma regra de roteamento que roteia conexões para o endereço IP particular da instância do Cloud SQL usando o nic secundário (nic1, o endereço IP DB_SUBNETWORK_GATEWAY).

Possível causa:o anexo de serviço não aceita a conexão de endpoint do Database Migration Service. O anexo de serviço tem uma lista de projetos aceitos, e o projeto do Database Migration Service não está incluído nela.

O que fazer:para resolver o problema, tente uma das seguintes opções:

  • No Google Cloud console, acesse Private Service Connect.

    Acessar o Private Service Connect

    Na guia Serviços publicados, aceite a conexão do Database Migration Service para seu anexo de serviço (se estiver pendente).

  • Adicione o projeto solicitante aos projetos na lista de permissões do anexo de serviço (se ele for rejeitado).

    Se isso não resolver o problema, recrie o perfil de conexão.

  • Exclua e recrie o perfil de conexão associado à conectividade do Private Service Connect.

Resolver erros do Oracle SCAN

Esta seção descreve possíveis problemas que você pode ter ao migrar de fontes do Oracle Real Application Clusters (RAC) usando o recurso Single Client Access Name (SCAN).

Não é possível estabelecer conectividade com um banco de dados SCAN do Oracle

A execução do teste de conectividade falha ou expira.

Possível causa:talvez você esteja tentando estabelecer conectividade diretamente com o banco de dados de origem do Oracle SCAN. O Database Migration Service não oferece suporte à conectividade direta com bancos de dados usando o recurso SCAN em ambientes Oracle RAC.

O que fazer:para resolver o problema, tente uma das seguintes opções:

  • Conecte-se diretamente a um dos nós.

  • Use o Oracle Connection Manager.

  • Crie uma configuração de conectividade privada usando uma solução de proxy reverso, como o HAProxy.