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

Lecture de 4 minute(s)
0

Je souhaite déplacer mon schéma de base de données Oracle vers PostgreSQL, mais la casse n'est pas compatible.

Brève description

Oracle stocke les métadonnées en majuscules dans son dictionnaire de données, tandis que PostgreSQL les stocke en minuscules. Quelle que soit la base de données, il est possible de mettre le nom des objets entre guillemets lorsque vous les créez afin de remplacer ces formats par défaut. Cette action peut toutefois entraîner un comportement inattendu et n'est donc pas recommandée. 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 contourner ce problème, vous pouvez remplacer les guillemets AWS DMS à l'aide de règles de mappage. Pour en savoir plus, consultez la section Utiliser AWS SCT pour convertir un schéma Oracle au format PostgreSQL.

Résolution

L'exemple ci-dessous présente une migration de schéma Oracle SCOTT vers PostgreSQL. Si vous disposez d'une base de données Oracle sur site, exécutez la commande suivante pour créer ce schéma :

$ORACLE_HOME/rdbms/admin/utlsampl.sql

Si vous possédez une instance de base de données Amazon Relational Database Service (Amazon RDS) qui exécute Oracle, recherchez un script similaire en ligne.

Ce script crée quatre tables selon le schéma SCOTT : EMP, DEPT, BONUS et SALGRADE. Elles contiennent toutes un petit nombre de lignes.

Vérifiez qu'aucune table de la base de données Oracle ne comporte de lettres minuscules dans le nom des tables ou des colonnes. Certaines applications ont tendance à mélanger majuscules et minuscules dans le nom des tables et des colonnes. Il est recommandé d'autoriser AWS DMS à répliquer les tables exactement comme il les trouve et de ne pas utiliser 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 et une instance de réplication :

1.    Pour créer une instance de réplication, utilisez la console AWS DMS ou l'interface de la ligne de commande AWS (AWS CLI). Créez ensuite des points de terminaison source et cible.

2.    Créez une tâche. Veillez à choisir l’option Activer la journalisation.

3.    Dans la vue Mappages de table, sélectionnez l'onglet JSON, puis Activer la modification JSON. Ensuite, utilisez un code similaire à l’exemple suivant afin de créer des règles de transformation pour le traitement des schémas, des tables et des colonnes. Pour en savoir plus, consultez la section Utilisation du mappage de table pour spécifier des paramètres de 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.    Choisissez Créer une tâche.

Remarque : au lieu de convertir le schéma en minuscules, vous pouvez également utiliser une règle destinée à renommer le schéma.

Après avoir créé la tâche, vérifiez que tous les objets sont bien 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 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)

Informations connexes

Procédures détaillées pour la migration de bases de données

Migration d’une base de données Oracle sur site vers Amazon RDS for PostgreSQL à l'aide d'un assistant Oracle et d'AWS DMS

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 6 mois