Comment utiliser les règles de mappage AWS DMS pour migrer un schéma Oracle en minuscules dans PostgreSQL ?

Date de la dernière mise à jour : 01/09/2020

Je souhaite déplacer mon schéma de base de données Oracle dans PostgreSQL, mais la casse n'est pas compatible. Quelles sont les options qui s'offrent à moi ?

Brève description

Oracle stocke les métadonnées en majuscules dans son dictionnaire de données, et PostgreSQL en minuscules. Avec l'une ou l'autre des bases de données, il est possible de remplacer ces formats par défaut en mettant les noms d'objets entre guillemets lors de leur création. Cette pratique n'est toutefois pas recommandée, car elle peut entraîner un fonctionnement inattendu. Dans la mesure où AWS Database Migration Service (AWS DMS) ne peut pas corriger automatiquement le formatage des métadonnées, il place les objets créés entre guillemets. Pour remédier à cela, vous pouvez remplacer AWS DMS par des règles de mappage. Pour plus d'informations, consultez Utilisation d'AWS Schema Conversion Tool (AWS SCT) pour convertir un schéma Oracle au format PostgreSQL.

Résolution

Cet exemple montre comment migrer le schéma Oracle SCOTT vers PostgreSQL. Si vous disposez d'une base de données Oracle sur site, vous pouvez créer ce schéma en exécutant la commande suivante :
$ORACLE_HOME/rdbms/admin/utlsampl.sql

Si vous disposez d'une instance de base de données Amazon Relational Database Service (Amazon RDS) exécutant Oracle, recherchez un script similaire en ligne.

Ce script crée quatre tables pour le schéma SCOTT : les tables EMP, DEPT, BONUS et SALGRADE. Celles-ci contiennent toutes un petit nombre de lignes.

Vérifiez qu'aucune table de la base de données Oracle ne comporte de lettres minuscules, au niveau de son nom ou de celui des colonnes. Si l'application induit habituellement une casse mixte pour les noms de tables et de colonnes, il est recommandé d'autoriser AWS DMS à répliquer les tables exactement telles qu'elles sont détectées. Pour cette raison, 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éer des points de terminaison et une instance de réplication :

1.    Utilisez la console AWS DMS ou l'interface en ligne de commande AWS (AWS CLI) pour créer l'instance de réplication, puis créez les points de terminaison source et cible.

2.    Créez une tâche. Veillez à sélectionner l'option Enable logging (Activer la journalisation).

3.    Dans la vue Table mappings (Mappages des tables), sélectionnez l'onglet JSON, puis choisissez Enable JSON editing (Activer l'édition JSON). Ensuite, utilisez un code similaire à l'exemple suivant afin de créer les règles de transformation applicables à la casse du schéma, des tables et des colonnes. Pour plus d'informations, consultez Utilisation du mappage des tables pour spécifier les paramètres d'une tâche.

{
  "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": "%"
      }
    }
  ]
}

4.    Sélectionnez Create task (Créer une tâche).

Remarque : au lieu de convertir le schéma en minuscules, vous pouvez également appliquer une règle de changement de nom.

Une fois la tâche créée, vérifiez que tous les objets sont 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 rows)

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?