Migrer une base de données Oracle sur site vers Amazon RDS for Oracle en utilisant directement Oracle Data Pump Import via un lien de base de données - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Migrer une base de données Oracle sur site vers Amazon RDS for Oracle en utilisant directement Oracle Data Pump Import via un lien de base de données

Créée par Rizwan Wangde (AWS)

Environnement : Production

Source : base de données Oracle locale

Cible : Amazon RDS pour Oracle

Type R : Replateforme

Charge de travail : Oracle

Technologies : migration ; bases de données

Services AWS : AWS DMS ; AWS Direct Connect ; Amazon RDS

De nombreux modèles couvrent la migration de bases de données Oracle sur site vers Amazon RDS for Oracle à l'aide d'Oracle Data Pump, un utilitaire Oracle natif qui constitue le moyen préféré pour migrer de grandes charges de travail Oracle. Ces modèles impliquent généralement l'exportation de schémas ou de tables d'application dans des fichiers de vidage, le transfert des fichiers de vidage vers un répertoire de base de données sur Amazon RDS for Oracle, puis l'importation des schémas d'application et des données à partir des fichiers de vidage.

Avec cette approche, une migration peut prendre plus de temps en fonction de la taille des données et du temps nécessaire pour transférer les fichiers de vidage vers l'instance Amazon RDS. En outre, les fichiers de vidage se trouvent sur le volume Amazon Elastic Block Store (Amazon EBS) de l'instance Amazon RDS, qui doit être suffisamment grand pour contenir la base de données et les fichiers de vidage. Lorsque les fichiers de vidage sont supprimés après l'importation, l'espace vide ne peut pas être récupéré. Vous continuez donc à payer pour l'espace inutilisé.

Ce modèle atténue ces problèmes en effectuant une importation directe sur l'instance Amazon RDS à l'aide de l'API Oracle Data Pump (DBMS_DATAPUMP) via un lien de base de données. Le modèle lance un pipeline d'exportation et d'importation simultané entre les bases de données source et cible. Ce modèle ne nécessite pas de dimensionner un volume EBS pour les fichiers de vidage car aucun fichier de vidage n'est créé ou stocké sur le volume. Cette approche permet d'économiser le coût mensuel de l'espace disque inutilisé.

Prérequis

  • Un compte Amazon Web Services (AWS) actif.

  • Un cloud privé virtuel (VPC) configuré avec des sous-réseaux privés répartis sur au moins deux zones de disponibilité, afin de fournir l'infrastructure réseau pour l'instance Amazon RDS.

  • Une base de données Oracle dans un centre de données sur site.

  • Une instance Oracle Amazon RDS existante dans une seule zone de disponibilité. L'utilisation d'une seule zone de disponibilité améliore les performances d'écriture lors de la migration. Un déploiement multi-AZ peut être activé 24 à 48 heures avant le passage au relais.

  • AWS Direct Connect (recommandé pour les bases de données de grande taille).

  • Les règles de connectivité réseau et de pare-feu sur site sont configurées pour autoriser une connexion entrante entre l'instance Amazon RDS et la base de données Oracle sur site.

Limites

  • La limite de taille de base de données sur Amazon RDS for Oracle est de 64 TiB (en décembre 2022).

Versions du produit

  • Base de données source : Oracle Database version 10g version 1 et versions ultérieures.

  • Base de données cible : pour obtenir la dernière liste des versions et éditions prises en charge sur Amazon RDS, consultez Amazon RDS for Oracle dans la documentation AWS.

Pile technologique source

  • Base de données Oracle autogérée sur site ou dans le cloud

Pile technologique cible

  • Amazon RDS for Oracle

Architecture cible

Le schéma suivant montre l'architecture de migration d'une base de données Oracle sur site vers Amazon RDS for Oracle dans un environnement mono-AZ. Les flèches indiquent le flux de données dans l'architecture. Le schéma ne montre pas quel composant initie la connexion.

""
  1. L'instance Amazon RDS for Oracle se connecte à la base de données Oracle source sur site pour effectuer une migration complète via le lien de base de données.

  2. AWS DMS se connecte à la base de données Oracle source sur site pour effectuer une réplication continue à l'aide de la capture des données de modification (CDC).

  3. Les modifications du CDC sont appliquées à la base de données Amazon RDS for Oracle.

Services AWS

  • AWS Database Migration Service (AWS DMS) vous aide à migrer des magasins de données vers le cloud AWS ou entre des combinaisons de configurations cloud et sur site. Ce modèle utilise le CDC et le paramètre Répliquer les données uniquement change.

  • AWS Direct Connect relie votre réseau interne à un emplacement Direct Connect via un câble Ethernet à fibre optique standard. Grâce à cette connexion, vous pouvez créer des interfaces virtuelles directement vers les services AWS publics tout en contournant les fournisseurs de services Internet sur votre chemin réseau.

  • Amazon Relational Database Service (Amazon RDS) pour Oracle vous aide à configurer, exploiter et dimensionner une base de données relationnelle Oracle dans le cloud AWS.

Autres outils

  • Oracle Data Pump vous aide à déplacer des données et des métadonnées d'une base de données à une autre à grande vitesse.

  • Les outils clients tels qu'Oracle Instant Client ou SQL Developer sont utilisés pour connecter et exécuter des requêtes SQL sur la base de données.

Bien qu'AWS Direct Connect utilise des connexions réseau privées dédiées entre le réseau sur site et AWS, envisagez les options suivantes pour renforcer la sécurité et le chiffrement des données en transit :

TâcheDescriptionCompétences requises

Configurez la connectivité réseau entre la base de données cible et la base de données source.

Configurez le réseau et le pare-feu sur site pour autoriser la connexion entrante entre l'instance Amazon RDS cible et la base de données Oracle source sur site.

Administrateur réseau, ingénieur en sécurité

Créez un utilisateur de base de données doté des privilèges appropriés.

Créez un utilisateur de base de données dans la base de données Oracle source locale avec les privilèges nécessaires pour migrer les données entre la source et la cible à l'aide d'Oracle Data Pump.

GRANT CONNECT to <migration_user>; GRANT DATAPUMP_EXP_FULL_DATABASE to <migration_user>; GRANT SELECT ANY TABLE to <migration_user>;
DBA

Préparez la base de données source sur site pour la migration vers AWS DMS CDC.

(Facultatif) Préparez la base de données Oracle source sur site pour la migration vers AWS DMS CDC une fois le chargement complet d'Oracle Data Pump terminé :

  1. Configurez les privilèges supplémentaires requis pour gérer FLASHBACK lors de la migration d'Oracle Data Pump.

    GRANT FLASHBACK ANY TABLE to <migration_user>; GRANT FLASHBACK ARCHIVE ADMINISTER to <migration_user>;
  2. Pour configurer les privilèges de compte utilisateur requis sur une source Oracle autogérée pour AWS DMS, consultez la documentation AWS DMS.

  3. Pour préparer une base de données source autogérée Oracle pour le CDC à l'aide d'AWS DMS, consultez la documentation AWS DMS.

DBA

Installez et configurez SQL Developer.

Installez et configurez SQL Developer pour connecter et exécuter des requêtes SQL sur les bases de données source et cible.

DBA, ingénieur en migration

Générez un script pour créer les tablespaces.

Utilisez l'exemple de requête SQL suivant pour générer le script dans la base de données source.

SELECT 'CREATE TABLESPACE ' tablespace_name ' DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE UNLIMITED;' from dba_tablespaces where tablespace_name not in ('SYSTEM', 'SYSAUX','TEMP','UNDOTBS1') order by 1;

Le script sera appliqué à la base de données cible.

DBA

Générez un script pour créer des utilisateurs, des profils, des rôles et des privilèges.

Pour générer un script permettant de créer les utilisateurs, les profils, les rôles et les privilèges de la base de données, utilisez les scripts du document de support Oracle How to Extract DDL for User including Privileges and Roles Using dbms_metadata.get_ddl (Doc ID 2739952.1) (compte Oracle requis).

Le script sera appliqué à la base de données cible.

DBA
TâcheDescriptionCompétences requises

Créez un lien de base de données vers la base de données source et vérifiez la connectivité.

Pour créer un lien de base de données vers la base de données source locale, vous pouvez utiliser l'exemple de commande suivant.

CREATE DATABASE LINK link2src CONNECT TO <migration_user_account> IDENTIFIED BY <password> USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<dns or ip address of remote db>) (PORT=<listener port>))(CONNECT_DATA=(SID=<remote SID>)))';

Pour vérifier la connectivité, exécutez la commande SQL suivante.

select * from dual@link2src;

La connectivité est réussie si la réponse l'estX.

DBA

Exécutez les scripts pour préparer l'instance cible.

Exécutez les scripts générés précédemment pour préparer l'instance Amazon RDS for Oracle cible :

  1. Espaces de table

  2. Profils

  3. Rôles

Cela permet de garantir que la migration d'Oracle Data Pump peut créer les schémas et leurs objets.

DBA, ingénieur en migration
TâcheDescriptionCompétences requises

Migrez les schémas requis.

Pour migrer les schémas requis de la base de données source sur site vers l'instance Amazon RDS cible, utilisez le code de la section Informations supplémentaires :

  • Pour migrer un schéma unique, exécutez le code 1 dans la section Informations supplémentaires.

  • Pour migrer plusieurs schémas, exécutez le code 2 dans la section Informations supplémentaires.

Pour optimiser les performances de la migration, vous pouvez ajuster le nombre de processus parallèles en exécutant la commande suivante.

DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4);
DBA

Collectez des statistiques de schéma pour améliorer les performances.

La commande Gather Schema Statistics renvoie les statistiques de l'optimiseur de requêtes Oracle collectées pour les objets de base de données. À l'aide de ces informations, l'optimiseur peut sélectionner le meilleur plan d'exécution pour toute requête portant sur ces objets.

EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => '<schema_name>');
DBA
TâcheDescriptionCompétences requises

Capturez le SCN sur la base de données Oracle locale source.

Capturez le numéro de modification du système (SCN) sur la base de données Oracle locale source. Vous utiliserez le SCN pour l'importation complète et comme point de départ pour la réplication CDC.

Pour générer le SCN actuel sur la base de données source, exécutez l'instruction SQL suivante.

SELECT current_scn FROM V$DATABASE;
DBA

Effectuez la migration complète des schémas.

Pour migrer les schémas requis (FULL LOAD) de la base de données source sur site vers l'instance Amazon RDS cible, procédez comme suit :

  • Pour migrer un schéma unique, exécutez le code 3 depuis la section Informations supplémentaires.

  • Pour migrer plusieurs schémas, exécutez le code 4 dans la section Informations supplémentaires.

Dans le code, remplacez-le <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE> par le SCN que vous avez capturé dans la base de données source.

DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>);

Pour optimiser les performances de la migration, vous pouvez ajuster le nombre de processus parallèles.

DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4);
DBA

Désactivez les déclencheurs dans les schémas migrés.

Avant de commencer la tâche AWS DMS CDC uniquement, désactivez-la TRIGGERS sous les schémas migrés.

DBA

Collectez des statistiques de schéma pour améliorer les performances.

La commande Gather Schema Statistics renvoie les statistiques de l'optimiseur de requêtes Oracle collectées pour les objets de base de données. À l'aide de ces informations, l'optimiseur peut sélectionner le meilleur plan d'exécution pour toute requête portant sur ces objets.

EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => '<schema_name>');
DBA

Utilisez AWS DMS pour effectuer une réplication continue de la source vers la cible.

Utilisez AWS DMS pour effectuer une réplication continue de la base de données Oracle source vers l'instance Amazon RDS for Oracle cible.

Pour plus d'informations, consultez Création de tâches pour une réplication continue à l'aide d'AWS DMS et le billet de blog How to work with native CDC support in AWS DMS.

DBA, ingénieur en migration
TâcheDescriptionCompétences requises

Activez le mode Multi-AZ sur l'instance 48 heures avant le passage à une autre instance.

S'il s'agit d'une instance de production, nous recommandons d'activer le déploiement multi-AZ sur l'instance Amazon RDS afin de bénéficier des avantages de la haute disponibilité (HA) et de la reprise après sinistre (DR).

DBA, ingénieur en migration

Arrêtez la tâche AWS DMS CDC uniquement (si le CDC était activé).

  1. Assurez-vous que la latence source et la latence cible sur les CloudWatch métriques Amazon de la tâche AWS DMS indiquent 0 seconde.

  2. Arrêtez la tâche AWS DMS uniquement pour les CDC.

DBA

Activez les déclencheurs.

Activez les DÉCLENCHEURS que vous avez désactivés avant la création de la tâche CDC.

DBA

AWS

Documentation Oracle

Code 1 : migration à chargement complet uniquement, schéma d'application unique

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Code 2 : migration à chargement complet uniquement, schémas d'applications multiples

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name  => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Code 3 : migration à chargement complet avant une tâche uniquement pour le CDC, schéma d'application unique

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Code 4 : migration à chargement complet avant une tâche uniquement sur le CDC, plusieurs schémas d'application

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN (operation => 'IMPORT', job_mode  => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE (handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Scénario dans lequel une approche de migration mixte peut mieux fonctionner

Dans de rares cas où la base de données source contient des tables comportant des millions de lignes et des colonnes LOBSEGMENT de très grande taille, ce modèle ralentira la migration. Oracle fait migrer les LobSegments sur le lien réseau un par un. Il extrait une seule ligne (ainsi que les données de la colonne LOB) de la table source et insère la ligne dans la table cible, en répétant le processus jusqu'à ce que toutes les lignes soient migrées. Oracle Data Pump via le lien de base de données ne prend pas en charge les mécanismes de chargement groupé ou de chargement par chemin direct pour les LobSegments.

Dans ce cas, nous recommandons ce qui suit :

  • Ignorez les tables identifiées lors de la migration d'Oracle Data Pump en ajoutant le filtre de métadonnées suivant.

    dbms_datapump.metadata_filter(handle =>h1, name=>'NAME_EXPR', value => 'NOT IN (''TABLE_1'',''TABLE_2'')');
  • Utilisez une tâche AWS DMS (migration à charge complète, avec réplication CDC si nécessaire) pour migrer les tables identifiées. AWS DMS extrait plusieurs lignes de la base de données Oracle source et les insère par lots dans l'instance Amazon RDS cible, ce qui améliore les performances.