Référence des problèmes et des schémas de conversion

Les espaces de travail de conversion regroupent tous les problèmes de conversion en groupes et catégories pour vous aider à planifier la correction des erreurs et des avertissements de conversion. Chaque catégorie représente le type de travail que vous devrez peut-être effectuer pour résoudre les problèmes (examiner, refactoriser, ajuster les types de données). Les groupes permettent une agrégation plus poussée, car ils font la distinction entre des cas spécifiques à un niveau inférieur :

Écran de présentation de l'espace de travail de conversion affichant les groupes et catégories de problèmes de conversion.
Figure 1. Écran de présentation de l'espace de travail de conversion avec des groupes et des catégories de problèmes de conversion.
Écran de présentation de l'espace de travail de conversion affichant les groupes et catégories de problèmes de conversion.

Le tableau suivant liste tous les groupes de problèmes de conversion que vous pouvez rencontrer lors de la conversion de schéma :

ID de groupe de problèmes Description

Code source non valide

Cause possible

Les erreurs de ce groupe se produisent souvent lorsque Database Migration Service rencontre une syntaxe inconnue ou lorsque le code source Oracle n'est pas valide (par exemple, une procédure stockée ne contient pas le mot clé END;).

Atténuation possible

Corrigez les objets non valides dans la base de données Oracle source. Ensuite, actualisez l'instantané du schéma source dans Database Migration Service et réessayez le processus de conversion du schéma. Vous pouvez également exclure l'objet de la migration.

Objets référencés manquants

Cause possible

Database Migration Service utilise les métadonnées des objets de l'arborescence source pour améliorer la qualité de la conversion du code des objets dépendants. Si votre code fait référence à des objets qui ne sont pas inclus dans le schéma source, vous pouvez rencontrer des problèmes de conversion, car Database Migration Service ne peut pas déterminer la structure ni les types de données des colonnes, attributs ou objets référencés manquants.

Les erreurs possibles dans ce groupe incluent des types de données incorrects pour les types définis par l'utilisateur (UDT) ou les types de données VARCHAR par défaut pour les colonnes, les paramètres ou les variables.

Atténuation possible

Assurez-vous que tous les objets référencés sont ajoutés à l'arborescence source de Database Migration Service, ou ajustez manuellement le code PostgreSQL en fonction de votre connaissance du modèle de données source pour les dépendances manquantes.

Tables sans clé primaire

Cause possible

Database Migration Service nécessite que toutes les tables possèdent une clé primaire. Pour les tables sans clé primaire, Database Migration Service ajoute une colonne NUMERIC nommée rowid à la table PostgreSQL cible. Cette colonne est renseignée avec les valeurs numériques correspondantes de la pseudo-colonne ROWID Oracle source. Pour s'assurer que les instructions INSERT ne génèrent pas d'erreur après la migration, Database Migration Service crée une séquence et l'utilise pour incrémenter automatiquement la colonne rowid.

Atténuation possible

Vous pouvez conserver ou supprimer la colonne rowid après la migration.

Fonctionnalité intégrée Oracle non compatible

Cause possible

Vous utilisez peut-être une fonctionnalité Oracle intégrée qui n'est pas prise en charge.

Atténuation possible

Recherchez une fonctionnalité similaire dans PostgreSQL et modifiez le code converti en conséquence. Dans certains cas, la fonctionnalité manquante peut être fournie par l' extension Orafce, disponible pour les migrations Cloud SQL pour PostgreSQL et AlloyDB pour PostgreSQL.

SQLCODE n'est pas encore disponible

Cause possible

La fonction Oracle SQLCODE n'est pas acceptée pour la conversion. SQLCODE renvoie une valeur INTEGER, alors que la fonction SQLSTATE, qui est l'équivalent le plus proche dans PostgreSQL, renvoie des valeurs TEXT.

Atténuation possible

Si votre code source ne repose pas sur le renvoi d'un entier par SQLCODE (par exemple, SQLCODE n'est jamais consigné que dans une colonne VARCHAR2 ou avec un message DBMS_OUTPUT), SQLSTATE peut être utilisé sans risque dans le code PostgreSQL.

Si votre code source repose sur SQLCODE renvoyant un entier (par exemple, si vous l'utilisez avec des variables NUMBER ou INTEGER, ou si vous enregistrez les valeurs renvoyées par SQLCODE en tant que paramètres ou colonnes), vous devez refactoriser le code converti.

Fonction Oracle SQL pas encore compatible

Cause possible

Certaines fonctions intégrées Oracle ne sont pas compatibles avec Database Migration Service pour la conversion.

Certaines fonctions peuvent avoir des équivalents dans PostgreSQL (par exemple, ASCII), tandis que d'autres peuvent partager le même nom, mais avoir des spécifications différentes (par exemple, les fonctions REGEXP%). Il est possible que certaines fonctions n'existent pas.

Atténuation possible

Inspectez la fonction Oracle qui a généré l'erreur.

  • Si la fonction existe avec le même comportement dans PostgreSQL, vous pouvez ignorer le message d'erreur, car le code converti devrait fonctionner de la même manière après la migration.
  • Si une fonction porte le même nom, mais fonctionne différemment ou n'existe pas dans PostgreSQL, vous pouvez essayer de corriger le code converti :

    • Créez une fonction définie par UDF;utilisateur portant le même nom dans la base de données de destination.
    • Remplacez l'appel de fonction dans la source par une expression équivalente.
    • Utilisez l'assistance pour la conversion optimisée par Gemini. Pour en savoir plus, consultez Convertir le code et le schéma SQL Server avec l'assistance Gemini.

    • Certaines fonctions ou fonctionnalités de base de données Oracle peuvent être répliquées avec des extensions, telles que Orafce. Pour en savoir plus sur les extensions compatibles avec votre base de données de destination, consultez Extensions de base de données compatibles.

Packages intégrés Oracle non entièrement compatibles

Cause possible

Database Migration Service est compatible avec certains packages intégrés Oracle, mais la conversion n'est pas entièrement prise en charge pour beaucoup d'entre eux, par exemple DBMS_STATS, DBMS_UTILITY ou DBMS_SQL.

Atténuation possible

Si vous utilisez des packages non compatibles, vous devrez peut-être :

  • Modifiez votre code. Par exemple, au lieu d'utiliser DBMS_STATS.GATHER_TABLE_STATS, vous pouvez utiliser une commande plus simple telle que ANALYZE.

    Les packages tels que UTL_FILE et DBMS_AQ peuvent nécessiter une refactorisation, car ils ne peuvent pas être facilement répliqués dans PostgreSQL.

  • Certaines fonctions ou caractéristiques de la base de données Oracle peuvent être répliquées avec des extensions, telles que Orafce. Pour en savoir plus sur les extensions compatibles avec votre base de données de destination, consultez Extensions de base de données compatibles.

Type de données Oracle pas encore accepté pour la conversion

Cause possible

Certains types de données Oracle ne sont actuellement pas compatibles avec la conversion ni le transfert de données.

Atténuation possible

Dans la plupart des cas, PostgreSQL dispose d'un type de données équivalent. Vous pouvez utiliser des fichiers de mappage de conversion pour personnaliser la logique de conversion et transformer le type de données Oracle non compatible en type de données PostgreSQL requis.

Pour en savoir plus sur la compatibilité des types de données, consultez Espaces de travail de conversion : présentation et objets compatibles.

Fonctionnalité source pas encore compatible

Cause possible

Ce groupe regroupe tous les problèmes génériques liés aux fonctionnalités Oracle qui ne sont pas compatibles avec la migration. Les problèmes de ce groupe ne relèvent d'aucun autre groupe de problèmes plus spécifique.

Atténuation possible

Type d'objet de schéma non compatible

Cause possible

Database Migration Service n'est pas compatible avec certains types d'objets de schéma Oracle pour la conversion de code, car PostgreSQL ne dispose pas d'équivalents appropriés. Il peut s'agir, par exemple, de tables indexées (IOT), d'index de recherche de texte ou de corps pour les types définis par l'utilisateur (UDT).

Atténuation possible

Database Migration Service convertit les objets non compatibles en leur équivalent PostgreSQL le plus proche. Par exemple, les tables IOT deviennent des tables standards avec une contrainte de clé primaire, et les index de recherche de texte sont convertis en index B-tree. Gardez à l'esprit que ces conversions peuvent entraîner une perte de fonctionnalités spécifiques au type d'objet d'origine.

Fonctionnalité PL/SQL pas encore compatible

Cause possible

Ce groupe regroupe tous les problèmes génériques liés aux fonctionnalités PL/SQL qui ne sont pas compatibles avec la conversion. Les problèmes de ce groupe ne relèvent d'aucun autre groupe de problèmes plus spécifique.

Atténuation possible

Liaison groupée pas encore compatible

Cause possible

La conversion de code Database Migration Service n'est actuellement pas compatible avec les fonctionnalités de liaison groupée Oracle telles que BULK COLLECT, FORALL ou SAVE EXCEPTIONS.

Atténuation possible

Pour résoudre ce problème, vous devez modifier le code qui utilise les fonctionnalités de liaison groupée. Vous pouvez tenir compte des différences d'architecture entre PostgreSQL et Oracle, et déterminer si le traitement de tableaux est nécessaire dans PostgreSQL pour votre cas d'utilisation.

Il existe plusieurs stratégies pour aborder les opérations de liaison groupée Oracle dans PostgreSQL. Leur utilisation dépend de votre scénario spécifique. Nous vous recommandons donc d'utiliser l' assistance à la conversion optimisée par Gemini pour répondre à vos besoins spécifiques. Voici d'autres exemples de recommandations pour vous aider à vous lancer :

  • Pour une BULK COLLECT complète (sans LIMIT), vous pouvez essayer d'utiliser la fonction ARRAY_AGG.
  • Pour BULK COLLECT avec LIMIT, vous pouvez essayer d'utiliser un CURSOR FOR LOOP pour charger et traiter des lots de lignes dans des tableaux. Toutefois, si votre cas d'utilisation autorise les modifications fonctionnelles, une alternative potentiellement plus simple serait d'utiliser CURSOR FOR LOOP pour traiter une ligne à la fois (plutôt que de les charger dans des tableaux).
  • Pour les opérations FORALL, vous pouvez essayer le LMD basé sur des ensembles avec UNNEST si vous choisissez d'utiliser le traitement de tableaux.
  • Pour SAVE EXCEPTIONS, vous devrez peut-être écrire un gestionnaire d'exceptions dans un CURSOR FOR LOOP basé sur les lignes, car il n'existe pas de clause équivalente dans PostgreSQL.

Collections pas encore compatibles

Cause possible

La conversion de code Database Migration Service est partiellement compatible avec les collections Oracle.

Atténuation possible

Vous devez modifier le code PostgreSQL converti en conséquence. Lorsque vous résolvez des problèmes liés aux collections, n'oubliez pas que les tableaux PostgreSQL ne sont jamais épars. Si vous attribuez des éléments de manière éparse, les tableaux PostgreSQL peuvent renvoyer des résultats et des nombres de cardinalité différents de ceux des tableaux Oracle.

Comme PostgreSQL n'est pas compatible avec les tableaux indexés par des chaînes, vous pouvez utiliser les extensions JSON/JSONB ou hstore, selon la nature des données.

Fonctions de pipeline pas encore compatibles

Cause possible

Database Migration Service n'est pas compatible avec les fonctions de pipeline.

Atténuation possible

Vous pouvez remplacer les fonctions pipelinées Oracle par des fonctions de renvoi d'ensemble PostgreSQL. Nous vous recommandons d'adapter le code à votre cas d'utilisation. Voici quelques exemples pour vous aider à vous lancer :

  1. Faites référence au type PostgreSQL (UDT) converti à partir du type d'objet ou d'enregistrement Oracle source qui définit le type de ligne de la fonction de pipeline. Modifiez ensuite la clause de retour de la fonction PostgreSQL pour qu'elle soit RETURNS SETOF <type name> ou RETURNS TABLE, selon votre cas spécifique.

  2. Remplacez la valeur renvoyée dans le code PIPE ROW converti par RETURN NEXT <row or record variable>.

Le type de collection de la fonction pipelinée source, utilisé dans la clause RETURN de la fonction Oracle, n'est pas nécessaire dans PostgreSQL.

Option SQL dynamique pas encore compatible

Cause possible

Database Migration Service est partiellement compatible avec la conversion de SQL dynamique. Les mots clés Oracle EXECUTE IMMEDIATE, OPEN FOR et USING/INTO sont correctement convertis en leurs équivalents PostgreSQL, mais les chaînes SQL dynamique, LMD ou LDD réelles ne le sont pas.

Atténuation possible

Vous devez modifier le code converti pour qu'il corresponde à vos besoins. Nous vous recommandons vivement d'utiliser l' assistance à la conversion optimisée par Gemini pour gérer le langage SQL dynamique.

Option CONNECT BY pas encore compatible

Cause possible

La plupart des opérateurs, fonctions et pseudocolonnes CONNECT BY sont compatibles avec Database Migration Service et convertis en expressions de table communes (CTE) récursives PostgreSQL. Toutefois, certaines exceptions peuvent nécessiter votre attention. Par exemple, la clause ORDER SIBLINGS BY n'est acceptée que pour l'ordre croissant.

Atténuation possible

Il n'est pas possible de répliquer la clause ORDER SIBLINGS BY pour l'ordre décroissant de manière simple. Vous devrez peut-être restructurer votre code pour qu'il fonctionne avec l'ordre croissant.

Examinez les problèmes signalés avec les opérateurs CONNECT BY et ajustez le code si nécessaire. Nous vous recommandons d'explorer les fonctionnalités de conversion automatique optimisées par Gemini pour accélérer ces corrections. Pour en savoir plus, consultez Convertir le code et le schéma Oracle avec l'aide de Gemini.

JSON pas encore compatible

Cause possible

Database Migration Service présente certaines limites concernant la façon dont il prend en charge JSON pour le transfert de données et la conversion de code :

  • JSONB n'est pas compatible avec le transfert de données.
  • La conversion de code n'est pas compatible avec les fonctions ni les opérateurs de requête JSON dans Oracle (tels que JSON_TABLE, JSON_QUERY, JSON_OBJECT[AGG], JSON_ARRAYAGG et JSON_PATCH).
  • Dans les versions d'Oracle antérieures à 21c, vous pouvez stocker les données JSON dans les colonnes VARCHAR2, CLOB ou BLOB, et les valider avec la condition IS JSON. Database Migration Service n'est pas compatible avec la conversion de cette condition.
Atténuation possible
  • Pour transférer les données JSON stockées dans les colonnes VARCHAR2, CLOB ou BLOB vers PostgreSQL, vous devrez peut-être écrire un fichier de mappage de conversion avec la directive MODIFY_TYPE.

    Exemple :

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

    Pour en savoir plus sur les fichiers de mappage des conversions, consultez Fichiers de mappage des conversions.

  • Pour convertir les fonctions et opérateurs JSON d'Oracle en PostgreSQL, vous pouvez utiliser des fonctions PostgreSQL telles que JSONB_ARRAY_ELEMENTS et JSON_AGG. Pour en savoir plus, consultez la section Fonctions et opérateurs JSON de la documentation PostgreSQL.

Problèmes de verrouillage et de transactions

Cause possible

La conversion de code Database Migration Service n'est pas compatible avec les instructions LOCK ni SAVEPOINT. PostgreSQL n'est pas compatible avec SAVEPOINT.

Atténuation possible
  • Séparez les blocs SAVEPOINT dans Oracle pour séparer les blocs de transaction dans PostgreSQL qui utilisent l'instruction ROLLBACK.
  • Pour implémenter DBMS_LOCK, utilisez l'extension PostgreSQL pg_dbms_lock. Cette extension simplifie la migration des verrous Oracle définis par l'utilisateur vers PostgreSQL en émulant la fonctionnalité du package Oracle DBMS_LOCK.

Format XML pas encore compatible

Cause possible

Database Migration Service n'est pas compatible avec Oracle XMLTYPE ni avec les fonctions et opérateurs XML associés.

Atténuation possible

Bien que Database Migration Service ne soit pas directement compatible avec XMLTYPE, vous pouvez personnaliser les colonnes BLOB, CLOB, NVARCHAR2 ou VARCHAR2 au format XML pour le transfert de données. PostgreSQL est compatible avec la fonctionnalité XML.

Pour migrer vos données XML, procédez comme suit :

  1. Créez un fichier de mappage des conversions avec la directive MODIFY_TYPE pour les données XML. Exemple :

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_XML_DATA:XML

    Pour en savoir plus sur les fichiers de mappage des conversions, consultez Fichiers de mappage des conversions.

  2. Démarrez le job de migration. Ce processus migre toutes les données d'Oracle vers PostgreSQL, à l'exception des données des colonnes de type XMLTYPE. Ces colonnes sont remplies avec des valeurs NULL dans PostgreSQL.
  3. Créez une table externe dans PostgreSQL en sélectionnant uniquement la colonne XMLTYPE d'Oracle. Incluez la colonne de clé primaire de la table source.
  4. Fusionnez les données XML de la table externe dans la table PostgreSQL d'origine.

Pour en savoir plus sur le fonctionnement de PostgreSQL avec XMLTYPE, consultez Fonctions XML dans la documentation PostgreSQL.

PIVOT n'est pas encore disponible

Cause possible

Database Migration Service n'est pas compatible avec les opérateurs de transposition PIVOT et UNPIVOT pour la conversion de code.

Atténuation possible

Vous pouvez transposer PIVOT dans PostgreSQL à l'aide de l'extension tablefunc ou en réécrivant l'expression PIVOT source en agrégations conditionnelles. Exemple :

  • SUM(CASE WHEN <condition> THEN <value> ELSE 0 END)
  • COUNT(CASE WHEN <condition> THEN 1 END)

Dans PostgreSQL, vous pouvez créer des transpositions UNPIVOT, qui créent des paires clé/valeur à partir d'un ensemble de colonnes, de différentes manières :

  • Combiner une jointure LATERAL avec un ensemble VALUES. Par exemple, SELECT ... FROM <table> CROSS JOIN LATERAL (VALUES ('<column1-name>', <column1>), ('<column2-name>', <column2>) AS u(column_name, column_value)).
  • Utiliser UNNEST avec des ARRAY. Par exemple, SELECT ..., UNNEST(ARRAY['<column1-name>', '<column2-name>']) AS column_name, UNNEST(ARRAY[column1, column2]) AS column_value FROM <table>.

Option d'instruction ALTER pas encore compatible

Cause possible

Database Migration Service ne convertit pas les instructions ALTER (qui sont souvent exécutées dans le SQL dynamique).

Atténuation possible

Remplacez les instructions ALTER d'Oracle par la commande SET dans PostgreSQL. Nous vous recommandons d'explorer les fonctionnalités de conversion automatique optimisées par Gemini pour accélérer ces corrections. Pour en savoir plus, consultez Convertir le code et le schéma Oracle avec l'aide de Gemini.

Fonctionnalité SQL pas encore compatible

Cause possible

Ce groupe regroupe tous les problèmes génériques liés aux fonctionnalités SQL qui ne sont pas compatibles avec la conversion. Les problèmes de ce groupe ne relèvent d'aucun autre groupe de problèmes plus spécifique. Par exemple, les déclencheurs d'événements de base de données, les instructions GRANT, les opérations INSERT multitables, le LMD sur les vues intégrées (INSERT INTO (SELECT ... FROM ...)) et les vues latérales.

Atténuation possible

Syntaxe pas compatible

Cause possible

Ce groupe regroupe tous les problèmes génériques liés à la syntaxe Oracle SQL ou PL/SQL non compatible. Les problèmes de ce groupe ne relèvent d'aucun autre groupe de problèmes plus spécifique.

Atténuation possible

Modifiez votre code pour utiliser une syntaxe PostgreSQL fonctionnellement équivalente. Nous vous recommandons d'explorer les fonctionnalités de conversion automatique optimisées par Gemini pour ajuster le code. Pour en savoir plus, consultez Convertir le code et le schéma Oracle avec l'aide de Gemini.

Syntaxe SQL pas compatible

Cause possible

Votre code source utilise une syntaxe ou des éléments SQL non compatibles avec Database Migration Service. Par exemple, le paramètre NLS_LANG de la fonction Oracle TO_DATE n'est pas accepté.

Atténuation possible
Syntaxe PL/SQL non compatible

Cause possible

Votre code source utilise une syntaxe ou des éléments PL/SQL non compatibles avec Database Migration Service. Par exemple, les instructions INSERT basées sur des enregistrements (telles que INSERT INTO table VALUES r_variable) et PRAGMA RESTRICT_REFERENCES ne sont pas compatibles.

Atténuation possible

Modifiez votre code pour utiliser une syntaxe PostgreSQL fonctionnellement équivalente. Nous vous recommandons d'explorer les fonctionnalités de conversion automatique optimisées par Gemini pour ajuster le code. Pour en savoir plus, consultez Convertir le code et le schéma Oracle avec l'aide de Gemini.

Syntaxe de date et code temporel pas compatible

Cause possible

Database Migration Service peut générer des erreurs ou des avertissements pour les syntaxes, opérations ou expressions de date ou d'horodatage non compatibles. Par exemple, il peut s'agir de comparaisons entre des types de données incompatibles ou de l'utilisation du modèle de format TZH:TZM dans les codes temporels. Pour en savoir plus sur les objets et les types de données acceptés, consultez À propos des espaces de travail de conversion.

Atténuation possible

Vous pouvez recréer la plupart des expressions de date et d'horodatage à l'aide d'équivalents PostgreSQL. Nous vous recommandons d'explorer les fonctionnalités de conversion automatique optimisées par Gemini pour accélérer ces corrections. Pour en savoir plus, consultez Convertir le code et le schéma Oracle avec l'aide de Gemini.

Éléments non compatibles de la syntaxe de gestion des exceptions d'Oracle

Cause possible

La conversion de code Database Migration Service n'est pas compatible avec les éléments de syntaxe d'exception PL/SQL Oracle suivants :

  • L'utilisation de RAISE_APPLICATION_ERROR avec des codes d'erreur variables au lieu de codes -20nnn littéraux.
  • L'utilisation de SQLERRM avec un argument de code d'erreur, car cette syntaxe n'est pas compatible avec PostgreSQL.
Atténuation possible

Vous devez résoudre manuellement ces problèmes dans le code converti. Nous vous recommandons d'explorer les fonctionnalités de conversion automatique optimisées par Gemini pour accélérer ces corrections. Pour en savoir plus, consultez Convertir le code et le schéma Oracle avec l'aide de Gemini.

Problèmes liés aux types de données et aux conversions

Cause possible

Database Migration Service peut regrouper les problèmes de conversion en fonction du contexte (par exemple, les problèmes de conversion qui se produisent dans les expressions de comparaison de types). Le groupe CW_OP0500 capture tous les problèmes de conversion de type de données génériques qui ne relèvent pas d'autres groupes de problèmes.

Atténuation possible

Dans la plupart des cas, Database Migration Service émet un message ERROR_UNIMPLEMENTED ou ERROR_TYPE dans le code PostgreSQL converti. Résolvez cette erreur en fonction de votre connaissance des types de données concernés.

Problèmes de masque de format de date

Cause possible

Vous pouvez rencontrer des avertissements ou des problèmes lorsque vous convertissez des expressions de date ou de code temporel en chaînes ou inversement, en fonction d'un modèle de format. Database Migration Service utilise un modèle par défaut (actuellement DD-MON-RR) lorsque les casts dans le code source Oracle excluent un modèle de format de date ou d'horodatage explicite.

Cela peut parfois entraîner des problèmes dans le code converti si le modèle de format émis pour le cast implicite est en conflit avec un modèle de format explicite dans la même expression. Vous pouvez également rencontrer ce problème si vos données sont susceptibles d'être affectées par les différences entre le format Oracle RR et le format PostgreSQL YY.

Atténuation possible

Examinez et validez les expressions PostgreSQL converties dans l'espace de travail de conversion.

Problèmes de masque de format numérique

Cause possible

Database Migration Service n'est pas compatible avec tous les modèles de format Oracle. Par exemple, 'L' ou 'X' ne sont pas acceptés. Vous pouvez rencontrer des problèmes ou des avertissements avec le code qui convertit des chaînes en nombres en fonction des modèles de format Oracle.

Atténuation possible

Pour les modèles de format Oracle qui n'ont pas d'équivalent dans PostgreSQL, vous devrez peut-être refactoriser vos expressions ou vos modèles de format. Nous vous recommandons d'explorer les fonctionnalités de conversion automatique optimisées par Gemini pour accélérer ces corrections. Pour en savoir plus, consultez Convertir le code et le schéma Oracle avec l'aide de Gemini.

Problèmes de conversion de types de données

Cause possible

Vous pouvez rencontrer des erreurs en raison d'une conversion de type de données non compatible ou inexacte. Database Migration Service émet généralement ERROR_UNIMPLEMENTED. Cela est généralement dû à des métadonnées manquantes ou incomplètes. Il est possible que Database Migration Service ne dispose pas de suffisamment d'informations pour caster un type, par exemple dans les arguments de fonction ou les paramètres de procédure.

Atténuation possible

Ajustez le code PostgreSQL pour assurer la conversion correcte des types de données. Pour effectuer ces corrections, vous devez connaître les attributs, variables et colonnes auxquels vous faites référence.

Problèmes de comparaison

Cause possible

Il est possible que Database Migration Service ne dispose pas de suffisamment de métadonnées ni d'informations sur les types de données lors de la conversion des expressions de comparaison de données. Par exemple, cela peut se produire lorsqu'un type défini par l'utilisateur (UDT) est comparé à NULL.

Atténuation possible

Examinez les expressions PostgreSQL converties et résolvez les problèmes. Nous vous recommandons d'explorer les fonctionnalités de conversion automatique optimisées par Gemini pour accélérer ces corrections. Pour en savoir plus, consultez Convertir le code et le schéma Oracle avec l'aide de Gemini.

Les problèmes de cette catégorie représentent les cas où le code source Oracle est correctement converti en l'équivalent PostgreSQL le plus proche, mais où le code obtenu peut présenter des différences sémantiques ou fonctionnelles mineures qui nécessitent votre examen. Cela est dû aux différences dans la façon dont Oracle et PostgreSQL gèrent les types de données, les formats ou les objets.

À première vue, cette catégorie peut sembler chevaucher les problèmes de la catégorie Types de données et conversion (CW_05), mais notez qu'elles représentent des problèmes différents. CW_05 contient les problèmes connus pour lesquels Database Migration Service ne peut pas convertir le code Oracle en son équivalent PostgreSQL.

Examinez le masque de format de date

Cause possible

La plupart des modèles de format de date et d'horodatage Oracle ont des équivalents appropriés dans PostgreSQL. Le code converti ne présente donc aucune différence sémantique ni fonctionnelle. Certains modèles n'ont pas de correspondance exacte et leur comportement varie. Par exemple, le format Oracle RR est converti au format PostgreSQL YY.

Atténuation possible

Examinez et validez les expressions avec les conversions de modèle de format pour vous assurer que le code converti se comporte comme prévu.

Examinez le masque de format numérique

Cause possible

La plupart des modèles de format numérique source ont un équivalent dans PostgreSQL. Le code converti ne présente donc aucune différence sémantique ni fonctionnelle. Toutefois, il est possible que certains modèles de format ne correspondent pas exactement ou se comportent légèrement différemment.

Atténuation possible

Passez en revue et validez les expressions avec les conversions de modèles de format pour vous assurer que le code converti fonctionne comme prévu.

Examiner le code d'exception

Cause possible

Lorsque vous utilisez RAISE_APPLICATION_ERROR avec un code d'erreur compris entre -20000 et -20999, Database Migration Service le convertit en RAISE EXCEPTION PostgreSQL avec un SQLSTATE compris entre CW0000 et CW999. La conversion conserve les trois derniers chiffres du code d'erreur source et les fait précéder de CW.

Atténuation possible

Examinez ce comportement pour déterminer s'il répond à vos besoins. Cet examen n'est nécessaire que si les codes d'erreur source sont utiles à votre application, à vos équipes d'assistance ou à votre documentation. Si la valeur du code d'erreur lui-même n'a pas de sens, vous pouvez ignorer cet avertissement.

Examinez le message d'exception

Cause possible

La fonction SQLERRM existe à la fois dans Oracle PL/SQL et dans PostgreSQL, mais elle peut renvoyer un texte d'erreur différent dans chaque moteur. Par exemple, la division par zéro dans Oracle renvoie le texte d'erreur ORA-01476: divisor is equal to zero, mais ERROR: division by zero dans PostgreSQL.

Atténuation possible

Si votre application, votre infrastructure d'assistance ou votre documentation dépendent du texte d'erreur, vérifiez la conversion. Sinon, vous pouvez ignorer cette différence.

Examiner l'émulation de la fonction intégrée Oracle

Cause possible

La conversion de code et de schéma de Database Migration Service vise à fournir le comportement des fonctions Oracle avec des équivalents PostgreSQL, mais les résultats ne sont pas toujours satisfaisants pour votre scénario. Par conséquent, les espaces de travail de conversion fournissent toujours un avertissement consultatif avec les conversions de fonctions qui peuvent nécessiter votre examen.

Atténuation possible

Nous vous recommandons d'examiner les objets pour lesquels les espaces de travail de conversion émettent des avertissements dans le groupe de problèmes CW_OP0605.

Examiner le type de données de la colonne de clé étrangère

Cause possible

Database Migration Service a identifié des spécifications de type de données non concordantes entre les objets parents et enfants (par exemple, lorsqu'une colonne parente est NUMBER(4) et que la colonne enfant est NUMBER(10)).

Atténuation possible

La plupart du temps, de légères incompatibilités de types de données ne posent pas de problème au niveau des fonctionnalités de la base de données. Toutefois, nous vous recommandons de vérifier le modèle de données converti pour détecter d'éventuelles incohérences.

Examen fonctionnel recommandé
Cause possible

Ce groupe englobe tous les problèmes génériques liés aux différences fonctionnelles potentielles dans le code Oracle et PostgreSQL. Les problèmes de ce groupe ne relèvent d'aucun autre groupe de problèmes plus spécifique.

Atténuation possible

Examiner l'émulation de la fonction intégrée Oracle

Cause possible

De nombreuses fonctions intégrées Oracle n'ont pas d'équivalent direct dans PostgreSQL. Pour atténuer ce problème lors des migrations, Database Migration Service convertit votre code en utilisant différentes expressions SQL afin de produire un comportement fonctionnel équivalent dans PostgreSQL.

Dans certains cas, les expressions converties peuvent être complexes. Database Migration Service émet des avertissements dans le groupe CW_OP0702 pour mettre en évidence les problèmes potentiels et indiquer qu'une fonction a été émulée avec une expression.

Atténuation possible

Examinez le code converti pour vous assurer que les fonctions converties se comportent comme prévu dans votre environnement PostgreSQL.

Refactorisation des transactions autonomes requise

Cause possible

PostgreSQL n'est pas compatible avec les transactions autonomes.

Atténuation possible

Vous pouvez effectuer des transactions autonomes dans PostgreSQL à l'aide des extensions dblink, pg_background ou PL/Proxy. Les appels de base de données effectués avec l'une de ces extensions s'exécutent dans une session différente et génèrent donc une transaction autonome.

Refactorisation des liens de base de données requise

Cause possible

Database Migration Service n'est pas compatible avec les liens de base de données Oracle. Les objets qui utilisent des liens doivent être refactorisés.

Atténuation possible

En fonction de la cible de votre lien de base de données, vous pouvez implémenter une fonctionnalité équivalente dans PostgreSQL avec des extensions de base de données, telles que dblink, postgres_fdw, oracle_fdw ou PL/Proxy.

Refactorisation avancée de la mise en file d'attente requise

Cause possible

Les packages Oracle Advanced Queuing (DBMS_AQ, DBMS_AQADM) n'ont pas d'équivalents PostgreSQL et nécessitent une refactorisation.

Atténuation possible

Vous avez le choix entre les options suivantes :

  • Refactorisez la fonctionnalité de mise en file d'attente en dehors de la base de données et dans le niveau application.
  • Utilisez les tables, les alertes et les déclencheurs PostgreSQL pour implémenter un comportement équivalent.
  • Contactez le représentant de votre équipe de solutions techniques pour obtenir de l'aide.

Refactorisation de l'adresse e-mail de la base de données requise

Cause possible

Cloud SQL pour PostgreSQL n'est pas compatible avec l'envoi d'e-mails directement depuis la base de données. Les extensions qui activent cette fonctionnalité ne sont pas non plus prises en charge. Par conséquent, Database Migration Service ne convertit pas les utilisations du package UTL_SMTP.

Atténuation possible

Refactorisez le code de votre base de données pour les e-mails et transférez la responsabilité de l'envoi des e-mails au niveau de l'application. Vous pouvez toujours utiliser la base de données pour enregistrer les conditions dans lesquelles l'envoi d'e-mails est requis.

Par exemple, vous pouvez écrire les détails des e-mails dans une table dédiée. Cette table peut également servir de file d'attente d'e-mails que vous interrogez avec une fonction Cloud Run Functions et gérez le traitement SMTP proprement dit.

Refactorisation des jobs et de la planification requise

Cause possible

Les packages Oracle DBMS_JOB et DBMS_SCHEDULER ne sont pas convertis par Database Migration Service. Vous devez refactoriser le code qui référence ces packages.

Atténuation possible

Pour les tâches simples sans dépendances, vous pouvez créer manuellement des tâches planifiées dans la base de données PostgreSQL cible avec l' extension pg_cron.

Pour les plannings plus complexes que pg_cron ne prend pas en charge, vous devrez peut-être utiliser un planificateur au niveau de l'application ou un planificateur tiers.

Refactorisation des E/S de fichiers requise

Cause possible

Database Migration Service n'est pas compatible avec le package Oracle UTL_FILE. Vous devez refactoriser le code qui référence ce package.

L'extension Orafce inclut l'émulation UTL_FILE, mais il est possible qu'elle ne fonctionne pas dans un environnement PostgreSQL géré par Google en raison de capacités d'E/S de fichier limitées.

Atténuation possible
  • Refactorisez votre code pour supprimer les dépendances sur UTL_FILE.
  • Cloud SQL pour PostgreSQL présente certaines restrictions concernant les capacités d'E/S de fichier. Il n'est donc pas possible d'implémenter ce comportement directement dans la base de données de destination.

    Une autre solution consiste à installer PostgreSQL avec l' extension orafce sur une VM Compute Engine de votre VPC. Vous pouvez ensuite utiliser l' extension PL/Proxy dans votre base de données de destination pour appeler la version UTL_FILE compatible avec PostgreSQL qui s'exécute dans la base de données sur la VM Compute Engine.

Synonymes

Cause possible

PostgreSQL n'est pas compatible avec les synonymes. Pour les objets de code, Database Migration Service remplace automatiquement les références de synonymes par leur schéma source et leur nom d'objet. Si vous utilisez des synonymes en dehors des objets de code, par exemple dans des schémas en lecture seule pour les utilisateurs d'applications de base de données, vous devez les convertir manuellement.

Atténuation possible

Pour utiliser des synonymes en dehors des objets de code, vous pouvez utiliser le paramètre SEARCH_PATH de PostgreSQL ou refactoriser votre code pour utiliser des vues pour les objets de requête.

Tables temporaires globales

Cause possible

Ce groupe de problèmes est un avertissement indiquant que Database Migration Service a détecté une table temporaire globale dans votre code source Oracle. Pour migrer des tables temporaires globales, vous devez avoir installé et créé l'extension PostgreSQL pgtt sur la base de données de destination.

Atténuation possible

Nous vous recommandons de vérifier que l'extension PostgreSQL pgtt est installée et créée dans la base de données de destination.

Examiner les suggestions de Gemini

Cause possible :

Ce groupe de problèmes regroupe toutes les erreurs et tous les avertissements génériques liés à la conversion de code optimisée par Gemini.

Mesures d'atténuation possibles : les problèmes détectés ici ne sont pas toujours réels, mais nous vous recommandons vivement d'examiner toutes les conversions optimisées par Gemini pour vous assurer qu'elles correspondent à vos attentes.

Examiner le code optimisé par l'IA

Cause première potentielle : ce code DDL a été converti avec des fonctionnalités optimisées par Gemini et peut nécessiter votre examen pour vérifier son exactitude.

Mesures d'atténuation possibles : nous vous recommandons d'examiner attentivement le code converti avec des augmentations d'IA pour vous assurer que le résultat final correspond à la fonctionnalité de votre schéma source.

Citations

Cause première potentielle : les suggestions optimisées par Gemini peuvent inclure du contenu cité à partir de plusieurs sources. Certaines citations peuvent être soumises à des restrictions de licence. Nous vous recommandons de vérifier les citations dans le code converti.

Problèmes de conversion des métadonnées

Cause possible :

Ce groupe regroupe tous les problèmes de conversion qui ne relèvent d'aucun autre groupe de problèmes plus spécifiques.

Atténuation possible

Nous vous recommandons d'examiner le code converti en fonction de vos connaissances du modèle de données source et d'ajuster le code si nécessaire.

Problèmes de conversion des métadonnées

Cause possible :

Ce groupe regroupe tous les problèmes de suivi des métadonnées qui ne relèvent d'aucun autre groupe de problèmes plus spécifique.

Mesures d'atténuation possibles :

Les problèmes de ce groupe sont généralement liés à des erreurs ou des avertissements de compilation qui peuvent entraîner des problèmes avec les types de données dans le PostgreSQL converti. Nous vous recommandons d'examiner le code converti en fonction de vos connaissances du modèle de données source et d'ajuster les références incorrectes.

Contactez votre équipe d'assistance

Cause possible

Dans certains cas extrêmes, vous pouvez rencontrer une erreur interne avec un objet source Oracle valide. Si c'est le cas, contactez votre équipe d'assistance pour obtenir de l'aide.

Problèmes de conversion génériques

Cause possible

Ce groupe contient tous les problèmes qui ne relèvent d'aucune autre catégorie ou groupe de problèmes plus spécifiques.

Atténuation possible

Nous vous recommandons de vérifier le code converti en fonction de vos connaissances du modèle de données et du code source, et de l'ajuster si nécessaire.