Diagnostiquer les problèmes liés aux migrations d'Oracle vers Cloud SQL pour PostgreSQL

Cette page liste les erreurs connues et les étapes de dépannage recommandées pour :

Erreurs de tâches de migration

Le processus de tâche de migration peut générer des erreurs lors de l'exécution.

  • Certaines erreurs, telles qu'un mot de passe incorrect dans la base de données source, peuvent être récupérées. Le job de migration reprend automatiquement une fois ces erreurs corrigées.
  • Certaines erreurs sont irrécupérables, comme les erreurs de réplication des données. Vous devez redémarrer le job de migration une fois ces erreurs corrigées.

Lorsqu'une erreur se produit, l'état du job de migration passe à Failed et le sous-état reflète le dernier état avant l'échec. Pour résoudre une erreur, accédez à la tâche de migration ayant échoué pour afficher l'erreur, puis suivez les étapes décrites dans le message d'erreur. Pour afficher plus de détails sur l'erreur, accédez à Cloud Monitoring à l'aide du lien sur le job de migration. Les journaux sont filtrés en fonction du job de migration spécifique.

Le tableau suivant contient quelques exemples de problèmes et leur solution :

Problème constaté Causes possibles Solutions possibles
Message d'erreur : Database Migration Service can't set up a tunnel to be connected to the bastion host. Database Migration Service n'a pas pu accéder à l'hôte bastion ou celui-ci n'accepte pas les connexions. Vérifiez les paramètres du tunnel SSH de transfert dans le profil de connexion source et la configuration du serveur de tunnel SSH, puis réessayez.
Message d'erreur : Database Migration Service can't connect to the database ou Database Migration Service private connectivity error, cannot connect to the database. Database Migration Service n'a pas pu établir de connexion à la base de données Oracle source.

Vérifiez que vous pouvez accéder à la base de données source depuis votre projet. Vérifiez les paramètres liés à votre méthode de configuration de la connectivité source.

Si un code d'erreur Oracle spécifique est inclus, par exemple ORA-12170: TNS:Connect timeout occurred, consultez la documentation Oracle pour en savoir plus.

Message d'erreur : Archiving mode is not ARCHIVELOG. Votre base de données source ne s'exécute pas en mode ARCHIVELOG. Configurez votre base de données source pour qu'elle utilise le mode ARCHIVELOG. Pour en savoir plus, consultez Configurer votre base de données Oracle source.
Message d'erreur : Supplemental logging ("ALL COLUMN LOGGING") isn't turned on for the tables listed below. La journalisation complémentaire n'est pas activée pour votre base de données source. Activez les données de journalisation supplémentaires et définissez leur mode sur ALL. Pour en savoir plus, consultez Configurer votre base de données Oracle source.
Message d'erreur : No Archive Log Files were found in the source. Database Migration Service ne lit que les journaux d'archive fermés. Aucun journal n'a été trouvé dans la base de données source.
  1. Exécutez la commande suivante dans la base de données source pour fermer le fichier journal actuel : ALTER SYSTEM SWITCH LOGFILE.
  2. Essayez de retrouver les journaux.

Si la base de données n'a aucune opération d'écriture active, vous devrez peut-être effectuer au moins une opération INSERT pour déclencher la création du journal.

Message d'erreur : We're missing the necessary permissions to read from the source. Le compte utilisateur de migration dans votre base de données source ne dispose pas des autorisations requises.

Database Migration Service se connecte à votre source en tant que compte utilisateur que vous configurez dans le profil de connexion source. Ce compte doit disposer d'un ensemble spécifique d'autorisations (par exemple, SELECT ANY TABLE) pour lire les données de votre base de données source.

Assurez-vous que le compte utilisateur de migration dispose des droits nécessaires. Pour en savoir plus, consultez Configurer votre base de données Oracle source.

Message d'erreur : Unable to connect to the destination database. Un problème est survenu lors de la connexion à la base de données de destination. Vérifiez que vous pouvez accéder à la base de données de destination depuis votre projet. Vérifiez les paramètres liés à votre méthode de configuration de la connectivité de destination.
Message d'erreur : The following tables don't exist in the destination database: {table_names}. Les tables listées que vous essayez de migrer n'existent pas dans la base de données de destination. Database Migration Service crée la table et les définitions nécessaires lorsque vous convertissez votre schéma source.
Message d'erreur : password authentication failed for user {username}. Le nom d'utilisateur ou le mot de passe de la base de données de destination sont mal configurés. Assurez-vous que le profil de connexion PostgreSQL de destination est correctement configuré avec le bon nom d'utilisateur et le bon mot de passe.
Message d'erreur : The following tables in the destination database don't have primary keys: {table_names}. Les tables listées dans le message d'erreur existent dans la base de données de destination, mais il leur manque des clés primaires.

Les espaces de travail de conversion Database Migration Service ajoutent automatiquement des clés primaires aux tables qui n'en ont pas lorsque vous convertissez le schéma.

Si vous utilisez d'anciens espaces de travail de conversion, vous devez créer manuellement les clés primaires dans votre destination. Pour en savoir plus, consultez Anciens espaces de travail de conversion.

Avertissement : The following tables have foreign keys: {table_names}. Les tables listées dans le message d'erreur existent dans la base de données de destination, mais elles comportent des clés étrangères.

Database Migration Service ne réplique pas les données de manière transactionnelle. Il est donc possible que les tables soient migrées dans le désordre. Si des clés étrangères sont présentes et qu'une table enfant qui utilise une clé étrangère est migrée avant son parent, vous risquez de rencontrer des erreurs de réplication.

Pour éviter de tels problèmes d'intégrité des données, ignorez les clés étrangères en utilisant l'option REPLICATION pour l'utilisateur de la migration. Pour en savoir plus, consultez Considérations relatives aux clés étrangères et aux déclencheurs.

Message d'erreur : Unable to resume replication as log position is lost. Cette erreur peut se produire lorsque le processus de réplication est suspendu pendant une longue période, ce qui entraîne la perte de la position dans le journal. Un job de migration ne doit pas être mis en pause pendant une durée supérieure (ou proche) à la période de conservation des journaux. Si la position du journal est perdue, vous devez recréer le job de migration.
Message d'erreur : ORA-00942: table or view does not exist. Cette erreur peut se produire en raison de la mise en cache sur le serveur Oracle. Recréez l'utilisateur de la base de données pour résoudre le problème de mise en cache.
Le job de migration reste dans la phase de vidage complet et ne passe pas à la phase de capture des données modifiées (CDC). Database Migration Service effectue toujours un vidage complet pour certaines tables, ou une ou plusieurs tables ne peuvent pas terminer le vidage complet en raison d'erreurs.
  • Vérifiez les erreurs de la tâche de migration, puis corrigez celles qui s'appliquent aux tables ou supprimez les tables associées de la tâche.
  • Consultez les journaux Database Migration Service pour vérifier l'activité de vidage complet en cours et attendez qu'elle soit terminée.

Problèmes de connectivité

Cette section liste et décrit les étapes de dépannage pour les éventuels problèmes de connectivité réseau.

Impossible de se connecter à la base de données de destination : EOF

L'exécution d'un test de connectivité renvoie le message d'erreur [DATABASE] unable to connect to the destination database: EOF.

Cause possible : le rattachement de service est mal configuré.

À essayer : assurez-vous que enable_proxy_protocol est défini sur false dans le fichier de configuration Terraform du rattachement de service. Le protocole proxy n'est accepté que pour les serveurs HTTP tels que NGINX et Apache.

Lorsque vous utilisez gcloud pour créer la configuration Private Service Connect, le protocole proxy est désactivé par défaut.

Délai de connexion expiré, connexion refusée

L'exécution du test de connectivité échoue ou expire. Cela est probablement dû à un routage mal configuré dans la configuration Private Service Connect. Plusieurs raisons peuvent expliquer ce problème.

Cause possible : il manque une règle de pare-feu qui autorise la plage CIDR NAT Private Service Connect à accéder au sous-réseau Private Service Connect où se trouve le bastion, en particulier l'interface nic0 de la VM bastion.

À essayer : assurez-vous que votre règle d'administration ne limite pas les règles de pare-feu internes, comme la règle de pare-feu psc_sp_in_fw définie dans l'exemple de script Terraform pour configurer la connectivité IP privée de destination pour les instances Cloud SQL non compatibles avec PSC.

Cause possible : le proxy est hors service. Aucun écouteur n'est disponible sur le port fourni. La connexion est donc suspendue.

À essayer : vous pouvez essayer d'établir une connexion SSH à la VM bastion et de rechercher le proxy à l'aide de la commande suivante :

  • netstat -tunalp | grep PORT

Analysez les réponses à la commande :

  • Si vous obtenez une réponse vide, cela signifie que le proxy est hors service. Essayez d'exécuter les commandes suivantes :

    sudo su; cd / et vérifiez si le serveur Dante est installé en exécutant sudo dpkg -s dante-server :

    • Si le proxy est installé, le message suivant s'affiche :

      Status: install ok installed

    • Si le proxy n'est pas installé, le problème est probablement dû à l'absence de routeur. Ajoutez un routeur et vérifiez si vous pouvez télécharger le proxy en exécutant apt-get install dante-server.

  • Si le proxy est en cours d'exécution et écoute sur le port fourni, essayez d'ouvrir une connexion en procédant comme suit :

    1. Installez le client PostgreSQL :

      sudo apt-get install postgresql-client.

    2. Connectez-vous à la base de données PostgreSQL :

      psql -h 127.0.0.1 -p PORT -U DBUSERNAME -W (vous serez invité à saisir le mot de passe).

      Remplacez les éléments suivants :

      • PORT : numéro de port de la base de données.
      • DBUSERNAME : nom d'utilisateur utilisé pour se connecter à la base de données PostgreSQL
    3. Installez le client Telnet :

      sudo apt-get install telnet

    4. Connectez-vous au client Telnet :

      telnet 127.0.0.1 PORT

      Remplacez PORT par le numéro de port de la base de données.

    En fonction des résultats des commandes :

    • Si les commandes ne parviennent pas à ouvrir une connexion, essayez de consulter les journaux du proxy pour trouver la cause du problème. La cause première peut varier en fonction de la configuration de l'instance Cloud SQL.

    • Si la connexion est ouverte à l'aide de telnet, mais qu'elle se bloque dans le client, le problème est probablement lié au routage de l'adresse IP du bastion. Sur votre VM, saisissez ip route dans le terminal. Vérifiez si vous pouvez trouver une règle de routage qui route les connexions vers l'adresse IP privée de l'instance Cloud SQL à l'aide de l'nic secondaire (nic1, adresse IP DB_SUBNETWORK_GATEWAY).

Cause possible : le rattachement de service n'accepte pas la connexion au point de terminaison provenant de Database Migration Service. Le rattachement de service contient une liste des projets acceptés, et le projet Database Migration Service n'y figure pas.

Solutions à essayer : Pour résoudre le problème, essayez l'une des solutions suivantes :

  • Dans la console Google Cloud , accédez à Private Service Connect.

    Accéder à Private Service Connect

    Dans l'onglet Services publiés, acceptez la connexion de Database Migration Service pour votre rattachement de service (si elle est en attente).

  • Ajoutez le projet demandeur aux projets autorisés sur le rattachement de service (s'il est refusé).

    Si le problème persiste, recréez le profil de connexion.

  • Supprimez le profil de connexion associé à la connectivité Private Service Connect, puis recréez-le.

Résoudre les erreurs Oracle SCAN

Cette section décrit les problèmes potentiels que vous pouvez rencontrer lors de la migration depuis des sources Oracle Real Application Clusters (RAC) à l'aide de la fonctionnalité Single Client Access Name (SCAN).

Impossible d'établir une connexion à une base de données Oracle SCAN

L'exécution du test de connectivité échoue ou expire.

Cause possible : vous essayez peut-être d'établir une connectivité directement à votre base de données source Oracle SCAN. Database Migration Service n'est pas compatible avec la connectivité directe aux bases de données à l'aide de la fonctionnalité SCAN dans les environnements Oracle RAC.

Solutions à essayer : Pour résoudre le problème, essayez l'une des solutions suivantes :

  • Connectez-vous directement à l'un des nœuds.

  • Utilisez le gestionnaire de connexion Oracle.

  • Créez une configuration de connectivité privée à l'aide d'une solution de proxy inverse telle que HAProxy.