Je veux déplacer mon schéma de base de données Oracle vers PostgreSQL, mais la casse n'est pas compatible. Quelles sont mes options ?

Oracle enregistre les métadonnées en majuscules dans son dictionnaire de données, tandis que PostgreSQL les enregistre en minuscules. Dans les deux bases de données, il est possible d'outrepasser ces formats par défaut en insérant les noms des objets dans des guillemets lors de leur création. Toutefois, cette méthode n'est pas recommandée, car elle peut entraîner un comportement inattendu. AWS Database Migration Service ne peut pas corriger automatiquement le format de stockage des métadonnées et, par conséquent, les objets créés sont placés entre des guillemets. Pour contourner ce problème, vous pouvez remplacer les guillemets DMS par des règles de mappage.

Dans cet exemple, nous allons migrer le schéma SCOTT Oracle vers PostgreSQL. Si vous utilisez une base de données Oracle sur site, vous pouvez créer ce schéma en exécutant :

$ORACLE_HOME/rdbms/admin/utlsampl.sql

Si vous utilisez une instance de base de données Oracle Amazon RDS, vous pouvez rechercher un script similaire en ligne. Il crée 4 tables dans le schéma SCOTT : EMP, DEPT, BONUS et SALGRADE. Ensemble, elles contiennent quelques lignes.

Assurez-vous qu'aucune table de la base de données Oracle ne comporte de minuscules dans la table ou les noms de colonnes. Si l'application gère sans problème les tables et les noms de colonnes à casse mixte, il est préférable d'autoriser DMS à répliquer les tables exactement telles qu'elles sont (autrement dit, n'utilisez pas ces règles de mappage).

oracle> SELECT table_name from dba_tables where owner='SCOTT' and table_name <> upper(table_name);

oracle> SELECT table_name, column_name from dba_tab_columns where owner='SCOTT' and column_name <> upper(column_name);

Créez des points de terminaison, une instance de réplication et une connexion test :

  1. A partir de la console AWS DMS ou à l'aide de l'interface de ligne de commande AWS, créez les points de terminaison et l'instance de réplication.
  2. Choisissez Test connection pour les deux points de terminaison.
  3. Si les deux connexions test réussissent, passez à la création de la tâche. Assurez-vous de choisir Enable Logging.
  4. Au bas de la section Table mappings, sélectionnez Custom et utilisez un code similaire à l'exemple suivant pour créer les règles de transformation pour la gestion de la casse pour les schémas, les tables et les colonnes, puis choisissez Create Task.

{

    "rules": [

        {

            "rule-type": "selection",

            "rule-id": "1",

            "rule-name": "select-scott",

            "object-locator": {

                "schema-name": "SCOTT",

                "table-name": "%"

            },

            "rule-action": "include"

        },

        {

            "rule-type": "transformation",

            "rule-id": "2",

            "rule-name": "convert-schemas-to-lower",

            "rule-action": "convert-lowercase",

            "rule-target": "schema",

            "object-locator": {

                "schema-name": "%"

            }

        },

        {

            "rule-type": "transformation",

            "rule-id": "3",

            "rule-name": "convert-tables-to-lower",

            "rule-action": "convert-lowercase",

            "rule-target": "table",

            "object-locator": {

                "schema-name": "%",

                "table-name": "%"

            }

        },

        {

            "rule-type": "transformation",

            "rule-id": "4",

            "rule-name": "convert-columns-to-lowercase",

            "rule-action": "convert-lowercase",

            "rule-target": "column",

            "object-locator": {

                "schema-name": "%",

                "table-name": "%",

                "column-name": "%"

            }

        }

    ]

}

Remarque : Vous pouvez également utiliser une règle de modification de nom de schéma au lieu de convertir le schéma en minuscules, si vous préférez.

Une fois l'opération terminée, vérifiez que tous les objets ont été créés en minuscules dans PostgreSQL :

postgres> select table_name from information_schema.tables where table_schema='scott';

 table_name

------------

 bonus

 dept

 salgrade

 emp

(4 rows)

postgres> select table_name, column_name from information_schema.columns    where table_schema='scott' order by table_name;

 table_name | column_name

------------+-------------

 bonus      | ename

 bonus      | job

 bonus      | sal

 bonus      | comm

 dept       | deptno

 dept       | dname

 dept       | loc

 emp        | deptno

 emp        | hiredate

 emp        | sal

 emp        | comm

 emp        | empno

 emp        | ename

 emp        | job

 emp        | mgr

 salgrade   | losal

 salgrade   | hisal

 salgrade   | grade

(18 lignes)

AWS Database Migration Service, AWS DMS, Oracle, PostgreSQL


Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support

Date de publication : 26/08/2016