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
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
$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)
Informations connexes
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?