Amazon Relational Database Service
Guide de l'utilisateur

Importation de données dans Oracle sur Amazon RDS

La façon dont vous importez des données dans une instance de base de données Amazon RDS dépend du volume de données dont vous disposez ainsi que du nombre et de la variété des objets de base de données dans votre base de données. Par exemple, vous pouvez utiliser Oracle SQL Developer pour importer une base de données simple de 20 Mo. Vous pouvez utiliser Oracle Data Pump pour importer des bases de données complexes ou des bases de données de centaines de mégaoctets ou de plusieurs téraoctets.

Vous pouvez également utiliser AWS Database Migration Service (AWS DMS) pour importer des données vers une instance de base de données Amazon RDS. AWS DMS peut migrer les bases de données sans interruption et, pour de nombreux moteurs de bases de données, poursuivre la réplication en cours jusqu'à ce que vous soyez prêt à basculer sur la base de données cible. Vous pouvez migrer Oracle vers le même moteur de base de données ou vers un moteur de base de données différent avec AWS DMS. Si vous migrez à partir d'un moteur de base de données différent, vous pouvez utiliser l'AWS Schema Conversion Tool pour migrer des objets de schéma qui ne sont pas migrés par AWS DMS. Pour plus d'informations sur AWS DMS, consultez Qu'est-ce qu'un AWS Database Migration Service.

Avant d'utiliser ces techniques de migration, nous vous recommandons la bonne pratique de réaliser une sauvegarde de votre base de données. Après avoir importé les données, vous pouvez sauvegarder vos instances de base de données Amazon RDS en créant des instantanés. Vous pouvez restaurer ultérieurement la base de données à partir des instantanés. Pour de plus amples informations, veuillez consulter Sauvegarde et restauration des instances de base de données Amazon RDS.

Note

Vous pouvez également importer des données dans Oracle à l'aide de fichiers issus de Amazon S3. Par exemple, vous pouvez télécharger des fichiers Data Pump de Amazon S3 vers l'hôte d'instance de base de données. Pour de plus amples informations, veuillez consulter Intégration Amazon S3.

Importation à l'aide d'Oracle SQL Developer

Pour les petites bases de données, vous pouvez utiliser Oracle SQL Developer, un outil Java graphique distribué gratuitement par Oracle. Vous pouvez installer cet outil sur votre ordinateur de bureau (Windows, Linux ou Mac) ou l'un de vos serveurs. Oracle SQL Developer fournit des options pour la migration des données entre deux bases de données Oracle, ou pour la migration des données depuis d'autres bases de données, comme MySQL, vers Oracle. Oracle SQL Developer convient parfaitement à la migration de bases de données peu volumineuses. Nous vous recommandons de lire la documentation de produit Oracle SQL Developer avant de commencer à migrer vos données.

Après avoir installé SQL Developer, vous pouvez l'utiliser pour vous connecter à vos bases de données source et cible. Utilisez la commande Database Copy (Copie de la base de données) dans le menu Tools pour copier vos données vers votre instance Amazon RDS.

Pour télécharger Oracle SQL Developer, consultez http://www.oracle.com/technetwork/developer-tools/sql-developer.

Oracle possède également une documentation sur la façon de migrer depuis d'autres bases de données dont MySQL et SQL Server. Pour plus d'informations, consultez http://www.oracle.com/technetwork/database/migration dans la documentation Oracle.

Importation à l'aide d'Oracle Data Pump

Oracle Data Pump remplace à long terme les utilitaires d'exportation/importation d'Oracle Oracle Data Pump est la solution à privilégier pour transférer d'importants volumes de données d'une installation Oracle vers une instance de base de données Amazon RDS. Vous pouvez utiliser Oracle Data Pump pour plusieurs scénarios :

  • Importez des données depuis une base de données Oracle (locale ou une instance Amazon EC2) vers une Amazon RDS pour une instance de base de données Oracle.

  • Importation de données depuis une instance de base de données RDS Oracle (locale ou sur une instance Amazon EC2)

  • Importation de données entre des instances de bases de données RDS Oracle (par exemple, pour migrer des données d'EC2-Classic vers le VPC)

Pour télécharger les utilitaires Oracle Data Pump, consultez 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, consultez la documentation Oracle.

Lorsque vous importez des données avec Oracle Data Pump, vous devez transférer le fichier de vidage qui contient les données de la base de données source vers la base de données cible. Vous pouvez transférer le fichier de vidage à l'aide d'un compartiment Amazon S3 ou en utilisant un lien de base de données entre les deux bases de données.

Voici les pratiques recommandées pour utiliser Oracle Data Pump afin d'importer des données dans un Amazon RDS pour l'instance de base de données Oracle :

  • 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.

    Dans la mesure où Amazon RDS pour Oracle n'autorise pas l'accès aux utilisateurs administratifs SYS ou SYSDBA, l'importation en mode full, ou l'importation de schémas pour des composants gérés par Oracle, risque d'endommager le dictionnaire de données Oracle et d'affecter la stabilité de votre base de données.

  • Lors du chargement de volumes de données importants, transférez le fichier de vidage vers le Amazon RDS cible pour l'instance de base de données Oracle, prenez un instantané de base de données de votre instance, puis testez l'importation afin de vérifier sa réussite. 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 Oracle Data Pump TRANSPORT_TABLESPACES, TRANSPORTABLE ou TRANSPORT_FULL_CHECK. Amazon RDS pour les instances de base de données Oracle ne prennent pas en charge l'importation de ces fichiers de vidage.

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. Le processus exporte les données sur la base de données source à l'aide du package Oracle DBMS_DATAPUMP et place le fichier de vidage dans un compartiment Amazon S3. Il télécharge ensuite le fichier de vidage du compartiment Amazon S3 vers le répertoire DATA_PUMP_DIR sur l'instance de base de données Oracle Amazon RDS cible. L'étape finale importe les données du fichier de vidage copié dans l'instance de base de données Amazon RDS Oracle à l'aide du package DBMS_DATAPUMP.

Le processus est soumis aux exigences suivantes :

  • Vous devez disposer d'un compartiment Amazon S3 disponible pour les transferts de fichiers et le compartiment Amazon S3 doit être dans la même région AWS que l'instance de base de données. Pour de plus amples informations, veuillez consulter Créer un compartiment dans le Guide de démarrage d'Amazon Simple Storage Service.

  • Vous devez préparer le compartiment Amazon S3 pour l'intégration Amazon RDS en suivant les instructions de Conditions préalables à l'intégration de Amazon RDS Oracle avec 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.

Le processus d'importation qui utilise Oracle Data Pump et un compartiment Amazon S3 comporte les étapes suivantes :

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

Pour accorder des privilèges à l'utilisateur sur l'instance cible RDS, procédez comme suit :

  1. Utilisez SQL Plus ou Oracle SQL Developer pour vous connecter à l'instance de base de données Oracle cible Amazon RDS vers laquelle les données seront importées. Connectez-vous à l'utilisateur principal Amazon RDS. Pour plus d'informations sur la connexion à votre instance de base de données, consultez Connexion à une instance de base de données exécutant le moteur 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. 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 utilisateur et lui accordent les autorisations et rôles nécessaires pour importer les données dans le schéma de celui-ci :

    create user schema_1 identified by <password>; grant create session, resource to schema_1; alter user schema_1 quota 100M on users;

    Cet exemple 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 : Utiliser DBMS_DATAPUMP pour créer un fichier de vidage

Utilisez SQL Plus ou Oracle SQL Developer pour vous connecter à l'instance Oracle source avec un utilisateur administrateur. Si la base de données source est une instance de base de données Amazon RDS, connectez-vous avec l'utilisateur principal Amazon RDS. Ensuite, employez l'utilitaire Oracle Data Pump pour créer un fichier de vidage.

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

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

Note

Les tâches de vidage de données sont démarrées de façon asynchrone. Pour plus d'informations sur la surveillance d'une tâche de vidage des données, consultez Surveillance du statut des tâches dans la documentation Oracle.

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

Chargez le fichier de vidage dans le 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é mys3bucket.

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', 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 plus d'informations, consultez Chargement de fichiers d'une instance de base de données Oracle vers un compartiment Amazon S3.

Étape 4 : Copier le fichier de vidage exporté du compartiment Amazon S3 vers l'instance de base de données cible

Utilisez SQL Plus ou Oracle SQL Developer pour vous connecter à l'instance de base de données Oracle cible Amazon RDS. Utilisez ensuite la procédure Amazon RDS rdsadmin.rdsadmin_s3_tasks.download_from_s3 pour copier le fichier de vidage du compartiment Amazon S3 vers l'instance de base de données cible. L'exemple suivant télécharge tous les fichiers d'un compartiment Amazon S3 nommé mys3bucket vers le répertoire DATA_PUMP_DIR.

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'mys3bucket', 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 : Utiliser DBMS_DATAPUMP pour importer le fichier de données sur l'instance de base de données cible

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 pour effectuer l'importation.

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

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 6 : Nettoyage

Après l'importation des données, vous pouvez supprimer les fichiers que vous ne souhaitez plus conserver. Vous pouvez lister les fichiers dans le répertoire DATA_PUMP_DIR en utilisant la commande suivante :

select * from table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by mtime;

La commande suivante peut être utilisée pour supprimer des fichiers dont vous n'avez plus besoin dans le répertoire DATA_PUMP_DIR :

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');

Le processus suivant utilise Oracle Data Pump et le package DBMS_FILE_TRANSFER. Le processus se connecte à une instance Oracle source, qui peut être sur site ou une instance Amazon EC2, ou une instance de base de données Amazon RDS Oracle. Le processus exporte ensuite les données à l'aide du package DBMS_DATAPUMP. Il utilise ensuite la méthode DBMS_FILE_TRANSFER.PUT_FILE pour copier le fichier de vidage depuis l'instance Oracle vers le répertoire DATA_PUMP_DIR sur l'instance de base de données Amazon RDS Oracle cible qui est connectée à l'aide d'un lien de base de données. L'étape finale importe les données du fichier de vidage copié dans l'instance de base de données Amazon RDS Oracle à l'aide du package DBMS_DATAPUMP.

Le processus est soumis aux exigences suivantes :

  • Vous devez avoir exécuté des privilèges sur les packages DBMS_FILE_TRANSFER et DBMS_DATAPUMP.

  • Vous devez disposer de privilèges d'écriture pour le répertoire DATA_PUMP_DIR sur 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.

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

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

Pour accorder des privilèges à l'utilisateur sur l'instance cible RDS, procédez comme suit :

  1. Utilisez SQL Plus ou Oracle SQL Developer pour vous connecter à l'instance de base de données Oracle cible Amazon RDS vers laquelle les données seront importées. Connectez-vous à l'utilisateur principal Amazon RDS. Pour plus d'informations sur la connexion à votre instance de base de données, consultez Connexion à une instance de base de données exécutant le moteur 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. 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 utilisateur et lui accordent les autorisations et rôles nécessaires pour importer les données dans le schéma de celui-ci :

    create user schema_1 identified by <password>; grant create session, resource to schema_1; alter user schema_1 quota 100M on users;

    Cet exemple 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 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 pour effectuer l'exportation.

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

create user export_user identified by <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;

Étape 3 : Utiliser DBMS_DATAPUMP pour créer un fichier de vidage

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, connectez-vous avec l'utilisateur principal Amazon RDS. Ensuite, employez l'utilitaire Oracle Data Pump pour créer un fichier de vidage.

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

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

Note

Les tâches de vidage de données sont démarrées de façon asynchrone. Pour plus d'informations sur la surveillance d'une tâche de vidage des données, consultez Surveillance du statut des tâches dans la documentation Oracle.

É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 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 bases de données dans un même VPC ou dans des VPC appairés, un itinéraire valide doit exister entre les deux instances de bases de données. 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 Réglage des liens de base de données pour une utilisation avec les 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 : utiliser DBMS_FILE_TRANSFER pour copier le fichier de vidage exporté vers l'instance de base de données cible

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 : Utiliser DBMS_DATAPUMP pour importer le fichier de données sur l'instance de base de données cible

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 pour effectuer l'importation.

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

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 : Nettoyage

Après l'importation des données, vous pouvez supprimer les fichiers que vous ne souhaitez plus conserver. Vous pouvez lister les fichiers dans le répertoire DATA_PUMP_DIR en utilisant la commande suivante :

select * from table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by mtime;

La commande suivante peut être utilisée pour supprimer des fichiers dont vous n'avez plus besoin dans le répertoire DATA_PUMP_DIR :

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');

Utilitaires Oracle Export/Import

Les utilitaires Oracle Export/Import sont parfaitement adaptés aux migrations lorsque le volume de données est faible et que les types de données comme les nombres flottants et les doubles ne sont pas obligatoires. Le processus d'importation crée les objets du schéma pour que vous n'ayez pas à exécuter un script pour les créer au préalable, ce qui rend ce processus parfaitement adapté aux bases de données à petites tables. L'exemple suivant montre comment ces utilitaires peuvent être utilisés pour exporter et importer des tables spécifiques.

Pour télécharger les utilitaires d'exportation et d'importation d'Oracle, accédez à http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html.

Exportez les tables depuis la base de données source en utilisant la commande ci-dessous. Remplacez le nom d'utilisateur/mot de passe, le cas échéant.

exp cust_dba@ORCL FILE=exp_file.dmp TABLES=(tab1,tab2,tab3) LOG=exp_file.log

Le processus d'exportation crée un fichier de vidage binaire qui contient le schéma et les données pour les tables spécifiées. À présent, ce schéma et ces données peuvent être importés dans une base de données cible en utilisant la commande suivante :

imp cust_dba@targetdb FROMUSER=cust_schema TOUSER=cust_schema \ TABLES=(tab1,tab2,tab3) FILE=exp_file.dmp LOG=imp_file.log

Il existe d'autres variations des commandes Export et Import qui pourraient être parfaitement adaptées à vos besoins. Pour plus d'informations, consultez la documentation d'Oracle.

Oracle SQL*Loader

Oracle SQL*Loader est parfaitement adapté aux bases de données volumineuses qui contiennent un nombre limité d'objets. Étant donné que le processus d'importation depuis une base de données source et de chargement vers une base de données cible est propre au schéma, l'exemple suivant crée des exemples d'objets de schéma, les exporte depuis une source et les charge ensuite dans une base de données cible.

Pour télécharger Oracle SQL*Loader, accédez à http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html.

  1. Créez un exemple de table source en utilisant la commande ci-dessous.

    create table customer_0 tablespace users as select rownum id, o.* from all_objects o, all_objects x where rownum <= 1000000;
  2. Sur l'instance Amazon RDS cible, créez une table de destination qui est utilisée pour charger les données.

    create table customer_1 tablespace users as select 0 as id, owner, object_name, created from all_objects where 1=2;
  3. Les données sont exportées depuis la base de données source vers un fichier plat avec des délimiteurs. Cet exemple utilise SQL*Plus à cette fin. Pour vos données, vous pourrez avoir besoin de générer un script qui exporte tous les objets dans la base de données.

    alter session set nls_date_format = 'YYYY/MM/DD HH24:MI:SS'; set linesize 800 HEADING OFF FEEDBACK OFF array 5000 pagesize 0 spool customer_0.out SET MARKUP HTML PREFORMAT ON SET COLSEP ',' SELECT id, owner, object_name, created FROM customer_0; spool off
  4. Vous devez créer un fichier de contrôle pour décrire les données. Encore une fois, en fonction de vos donnés, vous devez créer un script qui réalise cette étape.

    cat << EOF > sqlldr_1.ctl load data infile customer_0.out into table customer_1 APPEND fields terminated by "," optionally enclosed by '"' ( id POSITION(01:10) INTEGER EXTERNAL, owner POSITION(12:41) CHAR, object_name POSITION(43:72) CHAR, created POSITION(74:92) date "YYYY/MM/DD HH24:MI:SS" )

    Le cas échéant, copiez les fichiers générés par le code précédent vers une zone tampon comme une instance Amazon EC2.

  5. Enfin, importez les données en utilisant SQL*Loader avec le nom d'utilisateur et le mot de passe adaptés pour la base de données cible.

    sqlldr cust_dba@targetdb control=sqlldr_1.ctl BINDSIZE=10485760 READSIZE=10485760 ROWS=1000

Vues matérialisées Oracle

Vous pouvez également utiliser la réplication des vues matérialisées Oracle pour migrer efficacement des ensembles de données volumineux. La réplication vous permet de garantir la synchronisation permanente entre les tables cible et source, afin que le transfert réel vers Amazon RDS puisse être réalisé ultérieurement, le cas échéant. La réplication est configurée à l'aide d'un lien de base de données depuis l'instance Amazon RDS vers la base de données source.

Une exigence pour les vues matérialisées est d'autoriser l'accès depuis la base de données cible vers la base de données source. Dans l'exemple suivant, l'accès aux règles était activé sur la base de données source pour autoriser la base de données cible Amazon RDS à se connecter à la source via SQLNet.

  1. Créez un compte utilisateur sur les instances Amazon RDS source et cible que vous pouvez authentifier avec le même mot de passe.

    create user dblink_user identified by <password> default tablespace users temporary tablespace temp; grant create session to dblink_user; grant select any table to dblink_user; grant select any dictionary to dblink_user;
  2. Créez un lien de base de données depuis l'instance Amazon RDS cible vers l'instance source en utilisant le nouveau dblink_user créé.

    create database link remote_site connect to dblink_user identified by <password> using '(description=(address=(protocol=tcp) (host=<myhost>) (port=<listener port>)) (connect_data=(sid=<sourcedb sid>)))';
  3. Testez le lien :

    select * from v$instance@remote_site;
  4. Créez un exemple de table avec une clé primaire et un journal des vues matérialisées sur l'instance source.

    create table customer_0 tablespace users as select rownum id, o.* from all_objects o, all_objects x where rownum <= 1000000; alter table customer_0 add constraint pk_customer_0 primary key (id) using index; create materialized view log on customer_0;
  5. Sur l'instance Amazon RDS cible, créez une vue matérialisée.

    CREATE MATERIALIZED VIEW customer_0 BUILD IMMEDIATE REFRESH FAST AS SELECT * FROM cust_dba.customer_0@remote_site;
  6. Sur l'instance Amazon RDS cible, actualisez la vue matérialisée.

    exec DBMS_MV.REFRESH('CUSTOMER_0', 'f');
  7. Supprimez la vue matérialisée et incluez la clause PRESERVE TABLE pour conserver la table de conteneur de vue matérialisée et son contenu.

    DROP MATERIALIZED VIEW customer_0 PRESERVE TABLE;

    La table conservée a le même nom que la vue matérialisée supprimée.