Importation à l'aide d'Oracle Data Pump - Amazon Relational Database Service

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.

Importation à l'aide d'Oracle Data Pump

Oracle Data Pump est un utilitaire qui vous permet d'exporter des données Oracle vers un fichier de vidage et de les importer dans une autre base de données Oracle. Il s'agit d'un remplacement à long terme des utilitaires d'importation/importation d'Oracle. Oracle Data Pump est le moyen recommandé pour déplacer de grandes quantités de données d'une base de données Oracle vers une instance de base de données Amazon RDS.

Les exemples de cette section montrent une façon d'importer des données dans une base de données Oracle, mais Oracle Data Pump prend en charge d'autres techniques. Pour plus d'informations, consultez la documentation Oracle Database.

Les exemples de cette section utilisent le package DBMS_DATAPUMP. Vous pouvez accomplir les mêmes tâches en utilisant les utilitaires de ligne de commande Oracle Data Pump impdp et expdp. Vous pouvez installer ces utilitaires sur un hôte distant dans le cadre d'une installation de client Oracle, y compris Oracle Instant Client. Pour obtenir plus d'informations, consultez la section How do I use Oracle Instant Client to run Data Pump Import or Export for my Amazon RDS for Oracle DB instance? (Comment utiliser Oracle Instant Client pour exécuter Data Pump Import ou Export pour mon instance de base de données Amazon RDS for Oracle ?

Présentation d'Oracle Data Pump

Oracle Data Pump est constitué des composants suivants :

  • Clients de la ligne de commande expdp et impdp

  • Le package PL/SQL DBMS_DATAPUMP

  • Le package PL/SQL DBMS_METADATA

Vous pouvez utiliser Oracle Data Pump dans les scénarios suivants :

  • Importez des données d'une base de données Oracle, sur site ou sur une EC2 instance Amazon, vers une instance de base de données RDS pour Oracle.

  • Importez des données d'une instance de base de données RDS pour Oracle vers une base de données Oracle, sur site ou sur une instance Amazon EC2 .

  • Importez des données entre des instances de base de données RDS pour Oracle, par exemple, pour migrer des données de EC2 -Classic vers VPC.

Pour télécharger les utilitaires Oracle Data Pump, veuillez consulter Oracle Database Software Downloads sur le site web Oracle Technology Network. Pour en savoir plus sur la compatibilité lors de la migration entre les versions d'Oracle Database, veuillez consulter la documentation Oracle Database.

Flux de travail Oracle Data Pump

En général, vous utilisez Oracle Data Pump pour les opérations suivantes :

  1. Exportez vos données dans un fichier de vidage sur la base de données source.

  2. Chargez votre fichier de vidage sur votre instance de base de données RDS for Oracle de destination. Vous pouvez effectuer le transfert à l'aide d'un compartiment Amazon S3 ou en utilisant un lien de base de données entre les deux bases de données.

  3. Importez les données de votre fichier de vidage dans votre instance de base de données RDS for Oracle.

Bonnes pratiques d'Oracle Data Pump

Lorsque vous utilisez Oracle Data Pump pour importer des données dans une instance RDS for Oracle, nous vous recommandons de suivre les bonnes pratiques suivantes :

  • Effectuez les importations en mode schema ou table pour importer des schémas et des objets spécifiques.

  • Limitez les schémas que vous importez à ceux requis par votre application.

  • N’importez pas en mode full ou importez des schémas pour les composants maintenus par le système.

    Comme RDS for Oracle n'autorise pas l'accès aux utilisateurs administratifs SYS ou SYSDBA, ces actions peuvent endommager le dictionnaire de données Oracle et affecter la stabilité de votre base de données.

  • Lorsque vous chargez de grandes quantités de données, procédez comme suit :

    1. Transférez le fichier de vidage vers l'instance de base de données RDS for Oracle cible.

    2. Prenez un instantané de base de données de votre instance.

    3. Testez l'importation pour en vérifier le bon fonctionnement.

    Si les composants de la base de données sont invalidés, vous pouvez supprimer l'instance de base de données et la recréer à partir de l'instantané de base de données. L'instance de base de données restaurée inclut les fichiers de vidage intermédiaires sur l'instance de base de données lorsque vous avez pris l'instantané de base de données.

  • N'importez pas de fichiers de vidage qui ont été créés à l'aide des paramètres d'exportation d'Oracle Data Pump TRANSPORT_TABLESPACES, TRANSPORTABLE ou TRANSPORT_FULL_CHECK. Les instances de base de données RDS for Oracle ne prennent pas en charge l'importation de ces fichiers de vidage.

  • N'importez pas de fichiers de vidage contenant des objets Oracle Scheduler dans SYS, SYSTEM, RDSADMIN, RDSSEC, et RDS_DATAGUARD et appartenant aux catégories suivantes :

    • Tâches

    • Programmes

    • Schedules

    • Chaînes

    • Règles

    • Contextes d'évaluation

    • Ensemble de règles

    Les instances de base de données RDS for Oracle ne prennent pas en charge l'importation de ces fichiers de vidage.

  • Pour exclure les objets Oracle Scheduler non pris en charge, utilisez des directives supplémentaires lors de l'exportation Data Pump. Si vous utilisez DBMS_DATAPUMP, vous pouvez ajouter un METADATA_FILTER supplémentaire avant le DBMS_METADATA.START_JOB :

    DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM SYS.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' );

    Si vous utilisez expdp, créez un fichier de paramètres contenant la directive exclude indiquée dans l'exemple suivant. Ensuite, utilisez PARFILE=parameter_file avec votre commande expdp.

    exclude=procobj:"IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) )"

Importation de données avec Oracle Data Pump et un compartiment Amazon S3

Le processus d'importation suivant utilise Oracle Data Pump et un compartiment Amazon S3. La procédure est la suivante :

  1. Exportez les données de la base de données source à l'aide du package Oracle DBMS_DATAPUMP.

  2. Placez le fichier de vidage dans un compartiment Amazon S3.

  3. Téléchargez le fichier de vidage depuis le compartiment Amazon S3 vers le répertoire DATA_PUMP_DIR de l'instance de base de données RDS for Oracle cible.

  4. Importez les données du fichier de vidage copié dans l'instance de base de données RDS for Oracle à l'aide du package DBMS_DATAPUMP.

Conditions requises pour importer des données avec Oracle Data Pump et un compartiment Amazon S3

Le processus est soumis aux exigences suivantes :

  • Assurez-vous qu'un compartiment Amazon S3 est disponible pour les transferts de fichiers et que le compartiment Amazon S3 se trouve dans le même emplacement Région AWS que l'instance de base de données. Pour plus d'informations, veuillez consulter Créer un compartiment dans le Guide de démarrage d'Amazon Simple Storage Service.

  • L'objet que vous téléchargez dans le compartiment Amazon S3 doit être d'une taille inférieure ou égale à 5 To. Pour plus d'informations sur l'utilisation des objets dans Amazon S3, consultez le Guide de l'utilisateur Amazon Simple Storage Service.

    Note

    Si le fichier de vidage dépasse 5 To, vous pouvez exécuter l'exportation Oracle Data Pump avec l'option parallèle. Cette opération répartit les données dans plusieurs fichiers de vidage de sorte que la taille de chaque fichier ne dépasse pas la limite de 5 To.

  • Vous devez préparer le compartiment Amazon S3 pour l'intégration Amazon RDS en suivant les instructions de Configuration des autorisations IAM pour l'intégration de RDS for Oracle à Amazon S3.

  • Vous devez veiller à disposer de suffisamment d'espace de stockage pour stocker le fichier de vidage sur l'instance source et l'instance de base de données cible.

Note

Ce processus importe un fichier de vidage dans le répertoire DATA_PUMP_DIR, qui est préconfiguré sur toutes les instances de bases de données Oracle. Ce répertoire est situé sur le même volume de stockage que vos fichiers de données. Lorsque vous importez le fichier de vidage, les fichiers de données Oracle existants utilisent davantage d'espace. Vous devez donc veiller à ce que votre instance de base de données puisse répondre aux besoins de cette utilisation d'espace supplémentaire. Le fichier de vidage importé n'est pas automatiquement supprimé ou purgé du répertoire DATA_PUMP_DIR. Pour supprimer le fichier de vidage importé, utilisez UTL_FILE.FREMOVE, disponible sur le site web d'Oracle.

Étape 1 : accordez des privilèges à l'utilisateur de la base de données sur l'instance de base de données cible RDS for Oracle.

Dans cette étape, vous créez les schémas dans lesquels vous prévoyez d'importer des données et vous accordez aux utilisateurs les privilèges nécessaires.

Pour créer des utilisateurs et accorder les privilèges nécessaires sur l'instance cible RDS for Oracle
  1. Utilisez SQL*Plus ou Oracle SQL Developer pour vous connecter en tant qu'utilisateur principal à l'instance de la base de données RDS for Oracle dans laquelle les données seront importées. Pour en savoir plus sur la connexion à une instance de base de données, consultez Connexion à votre instance de base de données Oracle.

  2. Créez les espaces de table requis avant d'importer les données. Pour de plus amples informations, veuillez consulter Création et dimensionnement des espaces de table.

  3. Créez le compte utilisateur et accordez les autorisations et les rôles nécessaires si le compte utilisateur dans lequel les données sont importées n'existe pas. Si vous importez des données avec plusieurs schémas d'utilisateur, créez chaque compte d'utilisateur et accordez-lui les privilèges et rôles nécessaires.

    Par exemple, les instructions SQL suivantes créent un utilisateur et lui accordent les autorisations et rôles nécessaires pour importer les données dans le schéma de celui-ci : Remplacez schema_1 par le nom de votre schéma dans cette étape et dans les étapes suivantes.

    CREATE USER schema_1 IDENTIFIED BY my_password; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;
    Note

    Spécifiez un mot de passe autre que celui indiqué ici, en tant que bonne pratique de sécurité.

    Les instructions précédentes accordent au nouvel utilisateur le privilège CREATE SESSION et le rôle RESOURCE. Vous pouvez avoir besoin de privilèges et de rôles supplémentaires en fonction des objets de la base de données que vous importez.

Étape 2 : exporter les données dans un fichier de vidage en utilisant DBMS_DATAPUMP

Pour créer un fichier de vidage, utilisez le package DBMS_DATAPUMP.

Pour exporter des données Oracle dans un fichier de vidage
  1. Utilisez SQL Plus ou Oracle SQL Developer pour vous connecter à l'instance de base de données RDS for Oracle source avec un utilisateur administratif. Si la base de données source est une instance de base de données RDS for Oracle, connectez-vous avec l'utilisateur principal Amazon RDS.

  2. Exportez les données en appelant des procédures DBMS_DATAPUMP.

    Le script suivant exporte le schéma SCHEMA_1 dans un fichier de vidage nommé sample.dmp dans le répertoire DATA_PUMP_DIR. Remplacez SCHEMA_1 par le nom du schéma que vous souhaitez exporter.

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT', job_mode => 'SCHEMA', job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_exp.log', directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM SYS.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    Note

    Data Pump lance les tâches de manière asynchrone. Pour obtenir des informations sur la surveillance d'une tâche Data Pump, veuillez consulter Monitoring Job Status dans la documentation Oracle.

  3. (Facultatif) Visualisez le contenu du journal d'exportation en appelant la procédure rdsadmin.rds_file_util.read_text_file. Pour de plus amples informations, veuillez consulter Lecture de fichiers dans un répertoire d'instance de base de données.

Étape 3 : Charger le fichier de vidage dans votre compartiment Amazon S3

Utilisez la procédure Amazon RDS rdsadmin.rdsadmin_s3_tasks.upload_to_s3 pour copier le fichier de vidage dans le compartiment Amazon S3. L'exemple suivant charge tous les fichiers du répertoire DATA_PUMP_DIR dans le compartiment Amazon S3 nommé amzn-s3-demo-bucket.

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

L'instruction SELECT renvoie l'ID de la tâche dans un type de données VARCHAR2. Pour de plus amples informations, veuillez consulter Téléchargement de fichiers depuis votre instance de base de données RDS pour Oracle vers un compartiment Amazon S3.

Étape 4 : téléchargez le fichier de vidage depuis votre compartiment Amazon S3 vers votre instance de base de données cible.

Effectuez cette étape en utilisant la procédure Amazon RDS rdsadmin.rdsadmin_s3_tasks.download_from_s3. Lorsque vous téléchargez un fichier dans un répertoire, la procédure download_from_s3 ignore le téléchargement si un fichier de même nom existe déjà dans le répertoire. Pour supprimer un fichier du répertoire de téléchargement, utilisez UTL_FILE.FREMOVE, que vous trouverez sur le site Web d'Oracle.

Pour télécharger votre fichier de vidage
  1. Lancez SQL*Plus ou Oracle SQL Developer et connectez-vous en tant que maître sur votre instance de base de données Oracle cible Amazon RDS.

  2. Téléchargez le fichier de vidage en utilisant la procédure Amazon RDS rdsadmin.rdsadmin_s3_tasks.download_from_s3.

    L'exemple suivant télécharge tous les fichiers d'un compartiment Amazon S3 nommé amzn-s3-demo-bucket dans le répertoire DATA_PUMP_DIR.

    SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

    L'instruction SELECT renvoie l'ID de la tâche dans un type de données VARCHAR2. Pour de plus amples informations, veuillez consulter Téléchargement des fichiers d'un compartiment Amazon S3 vers une instance de base de données Oracle.

Étape 5 : importez votre fichier de vidage dans votre instance de base de données cible en utilisant DBMS_DATAPUMP.

Utilisez DBMS_DATAPUMP pour importer le schéma dans votre instance de base de données RDS for Oracle. Des options supplémentaires telles que METADATA_REMAP peuvent être nécessaires.

Pour importer des données dans votre instance de base de données cible
  1. Lancez SQL*Plus ou SQL Developer et connectez-vous en tant qu'utilisateur principal à votre instance de base de données RDS for Oracle.

  2. Importez les données en appelant DBMS_DATAPUMP des procédures.

    L'exemple suivant importe les SCHEMA_1 données depuis votre sample_copied.dmp instance de base de données cible.

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_imp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    Note

    Les tâches de vidage de données sont démarrées de façon asynchrone. Pour obtenir des informations sur la surveillance d'une tâche Data Pump, veuillez consulter Monitoring Job Status dans la documentation Oracle. Vous pouvez afficher le contenu du journal d'importation à l'aide de la procédure rdsadmin.rds_file_util.read_text_file. Pour de plus amples informations, veuillez consulter Lecture de fichiers dans un répertoire d'instance de base de données.

  3. Vérifiez l'importation des données en listant les tables de schéma sur votre instance de base de données cible.

    Par exemple, la requête suivante renvoie le nombre de tables de SCHEMA_1.

    SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='SCHEMA_1';

Étape 6 : nettoyer

Après l'importation des données, vous pouvez supprimer les fichiers que vous ne souhaitez plus conserver.

Pour supprimer les fichiers inutiles
  1. Lancez SQL*Plus ou SQL Developer et connectez-vous en tant qu'utilisateur principal à votre instance de base de données RDS for Oracle.

  2. Listez les fichiers dans DATA_PUMP_DIR en utilisant la commande suivante.

    SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;
  3. Supprimez des fichiers dont vous n'avez plus besoin dans DATA_PUMP_DIR, utilisez la commande suivante :

    EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','filename');

    Par exemple, la commande suivante supprime le fichier appelé sample_copied.dmp.

    EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');

Le processus d'importation suivant utilise Oracle Data Pump et le package DBMS_FILE_TRANSFER. La procédure est la suivante :

  1. Connectez-vous à une base de données Oracle source, qui peut être une base de données sur site, une EC2 instance Amazon ou une instance de base de données RDS pour Oracle.

  2. Exportez des données à l'aide du package DBMS_DATAPUMP.

  3. Utilisez DBMS_FILE_TRANSFER.PUT_FILE pour copier le fichier de vidage de la base de données Oracle dans le répertoire DATA_PUMP_DIR de l'instance de base de données RDS for Oracle cible qui est connectée à l'aide d'un lien de base de données.

  4. Importez les données du fichier de vidage copié dans l'instance de base de données RDS for Oracle à l'aide du package DBMS_DATAPUMP.

Le processus d'importation utilisant Oracle Data Pump et le package DBMS_FILE_TRANSFER comporte les étapes suivantes :

Conditions requises pour importer des données avec Oracle Data Pump et un lien vers une base de données

Le processus est soumis aux exigences suivantes :

  • Vous devez disposer des privilèges d'exécution sur les packages DBMS_FILE_TRANSFER et DBMS_DATAPUMP.

  • Vous devez disposer de privilèges d'écriture sur le répertoire DATA_PUMP_DIR de l'instance de base de données source.

  • Vous devez veiller à disposer de suffisamment d'espace de stockage pour stocker le fichier de vidage sur l'instance source et l'instance de base de données cible.

Note

Ce processus importe un fichier de vidage dans le répertoire DATA_PUMP_DIR, qui est préconfiguré sur toutes les instances de bases de données Oracle. Ce répertoire est situé sur le même volume de stockage que vos fichiers de données. Lorsque vous importez le fichier de vidage, les fichiers de données Oracle existants utilisent davantage d'espace. Vous devez donc veiller à ce que votre instance de base de données puisse répondre aux besoins de cette utilisation d'espace supplémentaire. Le fichier de vidage importé n'est pas automatiquement supprimé ou purgé du répertoire DATA_PUMP_DIR. Pour supprimer le fichier de vidage importé, utilisez UTL_FILE.FREMOVE, disponible sur le site web d'Oracle.

Étape 1 : accorder des privilèges à l'utilisateur sur l'instance de base de données cible de RDS for Oracle

Pour accorder des privilèges à l'utilisateur sur l'instance de base de données cible RDS for Oracle, procédez comme suit :

  1. Utilisez SQL Plus ou Oracle SQL Developer pour vous connecter à l'instance de la base de données RDS for Oracle dans laquelle vous souhaitez importer les données. Connectez-vous à l'utilisateur principal Amazon RDS. Pour plus d'informations sur la connexion à votre instance de base de données, consultez Connexion à votre instance de base de données Oracle.

  2. Créez les espaces de table requis avant d'importer les données. Pour plus d'informations, consultez Création et dimensionnement des espaces de table.

  3. Si le compte d'utilisateur dans lequel les données seront importées n'existe pas, créez-en un et accordez-lui les autorisations et rôles nécessaires. Si vous importez des données avec plusieurs schémas d'utilisateur, créez chaque compte d'utilisateur et accordez-lui les privilèges et rôles nécessaires.

    Par exemple, les commandes suivantes créent un nouvel utilisateur nommé schema_1 et accordent les autorisations et les rôles nécessaires pour importer les données dans le schéma de cet utilisateur.

    CREATE USER schema_1 IDENTIFIED BY my-password; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;
    Note

    Spécifiez un mot de passe autre que celui indiqué ici, en tant que bonne pratique de sécurité.

    L’exemple précédent montre comment accorder au nouvel utilisateur le privilège CREATE SESSION et le rôle RESOURCE. Des privilèges et rôles supplémentaires peuvent être requis en fonction des objets de la base de données que vous allez importer.

    Note

    Remplacez schema_1 par le nom de votre schéma dans cette étape et dans les étapes suivantes.

Étape 2 : Accorder des privilèges à l'utilisateur sur la base de données source

Utilisez SQL*Plus ou Oracle SQL Developer pour vous connecter à l'instance de la base de données RDS for Oracle qui contient les données à importer. Le cas échéant, créez un compte utilisateur et accordez les autorisations nécessaires.

Note

Si la base de données source est une instance Amazon RDS, vous pouvez ignorer cette étape. Vous allez utiliser votre compte d'utilisateur principal Amazon RDS for effectuer l'exportation.

Les commandes suivantes créent un nouvel utilisateur et accordent les autorisations nécessaires.

CREATE USER export_user IDENTIFIED BY my-password; GRANT CREATE SESSION, CREATE TABLE, CREATE DATABASE LINK TO export_user; ALTER USER export_user QUOTA 100M ON users; GRANT READ, WRITE ON DIRECTORY data_pump_dir TO export_user; GRANT SELECT_CATALOG_ROLE TO export_user; GRANT EXECUTE ON DBMS_DATAPUMP TO export_user; GRANT EXECUTE ON DBMS_FILE_TRANSFER TO export_user;
Note

Spécifiez un mot de passe autre que celui indiqué ici, en tant que bonne pratique de sécurité.

Étape 3 : créer un fichier de vidage en utilisant DBMS_DATAPUMP

Pour créer un fichier de vidage, procédez comme suit :

  1. Utilisez SQL*Plus ou Oracle SQL Developer pour vous connecter à l'instance Oracle source avec un utilisateur administrateur ou avec l'utilisateur créé à l'étape 2. Si la base de données source est une instance de base de données Amazon RDS for Oracle, connectez-vous avec l'utilisateur principal Amazon RDS.

  2. Créez un fichier de vidage à l'aide de l'utilitaire Oracle Data Pump.

    Le script suivant crée un fichier de vidage appelé sample.dmp dans le répertoire DATA_PUMP_DIR.

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT' , job_mode => 'SCHEMA' , job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample_exp.log' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl , 'SCHEMA_EXPR' , 'IN (''SCHEMA_1'')' ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    Note

    Les tâches de vidage de données sont démarrées de façon asynchrone. Pour obtenir des informations sur la surveillance d'une tâche Data Pump, veuillez consulter Monitoring Job Status dans la documentation Oracle. Vous pouvez afficher le contenu du journal d'exportation à l'aide de la procédure rdsadmin.rds_file_util.read_text_file. Pour plus d'informations, consultez Lecture de fichiers dans un répertoire d'instance de base de données.

Étape 4 : créer un lien de base de données vers l'instance de base de données cible

Créez un lien de base de données entre votre instance de base de données source et votre instance de base de données cible. Notez que votre instance Oracle locale doit avoir une connectivité réseau à l'instance de base de données pour créer un lien de base de données et transférer votre fichier de vidage.

Exécutez cette étape en étant connecté au même compte d'utilisateur qu'à l'étape précédente.

Si vous créez un lien de base de données entre deux instances de base de données au sein du même VPC ou peered VPCs, les deux instances de base de données doivent avoir une route valide entre elles. Le groupe de sécurité de chaque instance de base de données doit autoriser le trafic entrant dans l'autre instance de base de données et le trafic sortant de cette instance. Les règles entrantes et sortantes des groupes de sécurité peuvent faire référence à des groupes de sécurité à partir du même VPC ou d'un VPC appairé. Pour plus d'informations, consultez Ajustement des liens de base de données à utiliser avec des instances de base de données dans un VPC.

La commande suivante crée un lien de base de données appelé to_rds qui se connecte à l'utilisateur principal Amazon RDS au niveau de l'instance de base de données cible :

CREATE DATABASE LINK to_rds CONNECT TO <master_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>)))';

Étape 5 : copier le fichier de vidage exporté vers l'instance de base de données cible en utilisant DBMS_FILE_TRANSFER

Utilisez DBMS_FILE_TRANSFER pour copier le fichier de vidage depuis l'instance de base de données source vers l'instance de base de données cible. Le script suivant copie un fichier de vidage appelé sample.dmp depuis l'instance source vers un lien de base de données cible appelé to_rds (créé dans l'étape précédente) :

BEGIN DBMS_FILE_TRANSFER.PUT_FILE( source_directory_object => 'DATA_PUMP_DIR', source_file_name => 'sample.dmp', destination_directory_object => 'DATA_PUMP_DIR', destination_file_name => 'sample_copied.dmp', destination_database => 'to_rds' ); END; /

Étape 6 : importer le fichier de données vers l'instance de base de données cible en utilisant DBMS_DATAPUMP

Utilisez Oracle Data Pump pour importer le schéma dans l'instance de base de données. Notez que des options supplémentaires comme METADATA_REMAP pourraient être obligatoires.

Connectez-vous à l'instance de base de données avec le compte d'utilisateur principal Amazon RDS for effectuer l'importation.

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_imp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
Note

Les tâches de vidage de données sont démarrées de façon asynchrone. Pour obtenir des informations sur la surveillance d'une tâche Data Pump, veuillez consulter Monitoring Job Status dans la documentation Oracle. Vous pouvez afficher le contenu du journal d'importation à l'aide de la procédure rdsadmin.rds_file_util.read_text_file. Pour plus d'informations, consultez Lecture de fichiers dans un répertoire d'instance de base de données.

Vous pouvez vérifier l'importation des données en consultant les table de l'utilisateur sur l'instance de base de données. Par exemple, la requête suivante renvoie le nombre de tables de schema_1.

SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='SCHEMA_1';

Étape 7 : nettoyer

Après l'importation des données, vous pouvez supprimer les fichiers que vous ne souhaitez plus conserver. Vous pouvez répertorier les fichiers de DATA_PUMP_DIR à l'aide de la commande suivante.

SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;

Pour supprimer des fichiers dont vous n'avez plus besoin dans DATA_PUMP_DIR, utilisez la commande suivante :

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','<file name>');

Par exemple, la commande suivante supprime le fichier appelé "sample_copied.dmp".

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');