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 (AWS DMS) ne peut pas corriger automatiquement le format de stockage des métadonnées et, par conséquent, AWS DMS crée les objets et les place entre guillemets. Pour contourner ce problème, vous pouvez remplacer les guillemets AWS DMS par des règles de mappage. Pour plus d'informations, consultez la section Utiliser AWS Schema Conversion Tool (AWS SCT) pour convertir votre schéma Oracle en PostgreSQL.

Dans cet exemple, nous allons procéder à la migration du 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 disposez d'une instance de base de données Amazon Relational Database Service (Amazon RDS) exécutant Oracle, recherchez en ligne un script similaire.

Ce script 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, la bonne pratique consiste à autoriser AWS 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, puis testez la connexion :

1.    Ouvrez la console AWS DMS ou utilisez l'interface de ligne de commande AWS (CLI AWS), créez les points de terminaison et l'instance de réplication.

2.    Choisissez Endpoints depuis le volet de navigation, sélectionnez les deux points de terminaison, puis Test connection.

3.    Si les deux connexions de test réussissent, vous devez alors créer une tâche. Assurez-vous de sélectionner Enable logging.

4.    Dans la vue Table mappings, sélectionnez l'onglet JSON, puis Enable JSON editing. Utilisez ensuite un code similaire à celui de 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. Pour plus d'informations, consultez la section Utilisation du mappage de table pour définir les 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": "%"
      }
    }
  ]
}

5.    Sélectionnez Create task.

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

Une fois la tâche créé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 rows)

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

Date de mise à jour : 04/02/2018