

# Importación mediante Oracle Data Pump
<a name="Oracle.Procedural.Importing.DataPump"></a>

Oracle Data Pump es una utilidad que le permite exportar datos de Oracle a un archivo de volcado e importarlos a otra base de datos de Oracle. Es un reemplazo a largo plazo de las utilidades de exportación e importación de Oracle. Oracle Data Pump es la forma preferida de trasladar grandes cantidades de datos desde una base de datos Oracle a una instancia de base de datos de Amazon RDS.

Los ejemplos de esta sección muestran una forma de importar datos a una base de datos Oracle, pero Oracle Data Pump admite otras técnicas. Para obtener más información, consulte la [documentación de Oracle Database](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump.html#GUID-501A9908-BCC5-434C-8853-9A6096766B5A).

En los ejemplos de esta sección se utiliza el paquete `DBMS_DATAPUMP`. Puede realizar las mismas tareas con las utilidades de línea de comandos de Oracle Data Pump `impdp` y `expdp`. Puede instalar estas utilidades en un host remoto como parte de una instalación de Oracle Client, incluido Oracle Instant Client. Para obtener más información, consulte [How do I use Oracle Instant Client to run Data Pump Import or Export for my Amazon RDS for Oracle DB instance?](https://aws.amazon.com/premiumsupport/knowledge-center/rds-oracle-instant-client-datapump/) (¿Cómo utilizo Oracle Instant Client para ejecutar la importación o exportación de Data Pump para mi instancia de base de datos de Amazon RDS para Oracle?)

**Topics**
+ [Información general sobre Oracle Data Pump](#Oracle.Procedural.Importing.DataPump.Overview)
+ [Importación de datos con Oracle Data Pump y un bucket de Amazon S3](#Oracle.Procedural.Importing.DataPump.S3)
+ [Importación de datos con Oracle Data Pump y un enlace de base de datos](#Oracle.Procedural.Importing.DataPump.DBLink)

## Información general sobre Oracle Data Pump
<a name="Oracle.Procedural.Importing.DataPump.Overview"></a>

Oracle Data Pump consta de los siguientes componentes:
+ Clientes de línea de comandos `expdp` y `impdp`
+ El paquete PL/SQL `DBMS_DATAPUMP`
+ El paquete PL/SQL `DBMS_METADATA`

Puede utilizar Oracle Data Pump en los siguientes casos:
+ Importación de datos desde una base de datos de Oracle (en las instalaciones o en una instancia de Amazon EC2) a una instancia de base de datos de Amazon RDS para Oracle
+ Importación de datos desde una instancia de base de datos de RDS para Oracle a una base de datos Oracle, ya sea en las instalaciones o en una instancia de Amazon EC2
+ Importación de datos entre instancias de base de datos de RDS para Oracle (por ejemplo, para migrar datos desde EC2-Classic a una VPC).

Para descargar utilidades de Oracle Data Pump, consulte [Oracle Database Software Downloads (Descargas de software de base de datos de Oracle)](http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html) en el sitio web de Oracle Technology Network. Para conocer aspectos sobre compatibilidad al migrar entre versiones de Oracle Database, consulte [la documentación de Oracle Database](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-overview.html#GUID-BAA3B679-A758-4D55-9820-432D9EB83C68).

### Flujo de trabajo de Oracle Data Pump
<a name="Oracle.Procedural.Importing.DataPump.Overview.how-it-works"></a>

Por lo general, se utiliza Oracle Data Pump en las siguientes etapas:

1. Exporte sus datos a un archivo de volcado en la base de datos de origen.

1. Cargue el archivo de volcado en la instancia de base de datos de RDS para Oracle Puede transferirlo mediante un bucket de Amazon S3 o mediante un enlace de base de datos entre dos bases de datos.

1. Importe los datos desde el archivo de volcado a la instancia de base de RDS para Oracle.

### Prácticas recomendadas de Oracle Data Pump
<a name="Oracle.Procedural.Importing.DataPump.Overview.best-practices"></a>

Cuando utiliza Oracle Data Pump para importar datos en una instancia de RDS para Oracle, se recomiendan las siguientes prácticas recomendadas:
+ Realice importaciones en el modo `schema` o `table` para importar esquemas y objetos específicos.
+ Limite los esquemas que importe a los que necesita su aplicación.
+ No los importe en el modo `full` ni en esquemas de importación para componentes mantenidos por el sistema.

  Puesto que RDS para Oracle no permite el acceso a usuarios administrativos `SYS` o `SYSDBA`, estas acciones pueden dañar el diccionario de datos de Oracle y afectar a la estabilidad de su base de datos.
+ Al cargar grandes cantidades de datos, haga lo siguiente:

  1. Transfiera el archivo de volcado a la instancia de base de datos de RDS para Oracle.

  1. Cree una instantánea de base de datos de su instancia.

  1. Pruebe la importación para comprobar que se realiza correctamente.

  Si se invalidan los componentes de la base de datos, puede eliminar la instancia de base de datos y volver a crearla a partir de la instantánea de base de datos. La instancia de base de datos restaurada incluye los archivos de volcado preparados en la instancia de base de datos cuando realice una instantánea de base de datos.
+ No importe archivos de volcado creados con parámetros `TRANSPORT_TABLESPACES`, `TRANSPORTABLE` o `TRANSPORT_FULL_CHECK` de exportación de Oracle Data Pump. Las instancias de bases de datos de RDS para Oracle no admiten la importación de estos archivos de volcado.
+ No importe archivos de volcado que contengan objetos del programador de Oracle en `SYS`, `SYSTEM`, `RDSADMIN`, `RDSSEC` y `RDS_DATAGUARD` y que pertenezcan a las categorías siguientes:
  + Tareas
  + Programas
  + Schedules
  + Cadenas
  + Reglas
  + Contextos de evaluación
  + Conjunto de reglas

  Las instancias de bases de datos de RDS para Oracle no admiten la importación de estos archivos de volcado. 
+ Para excluir objetos de Oracle Scheduler no admitidos, utilice directivas adicionales durante la exportación de Data Pump. Si utiliza `DBMS_DATAPUMP`, añada un `METADATA_FILTER` adicional antes de `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 utiliza `expdp`, cree un archivo de parámetros que contenga la directiva `exclude` que se muestra en el siguiente ejemplo. Luego `PARFILE=parameter_file` utilícelo con su `expdp` comando.

  ```
  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')
       )
    )"
  ```

## Importación de datos con Oracle Data Pump y un bucket de Amazon S3
<a name="Oracle.Procedural.Importing.DataPump.S3"></a>

El siguiente proceso de importación utiliza Oracle Data Pump y un bucket de Amazon S3. Los pasos son los siguientes:

1. Exporte datos en la base de datos de origen mediante el paquete [DBMS\$1DATAPUMP](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_DATAPUMP.html) de Oracle.

1. Coloque el archivo de volcado en un bucket de Amazon S3.

1. A continuación, descargue el archivo de volcado del bucket de Amazon S3 al directorio `DATA_PUMP_DIR` en la instancia de base de datos de RDS para Oracle de destino. 

1. Importe los datos del archivo de volcado copiado a la instancia de base de datos de RDS para Oracle utilizando el paquete `DBMS_DATAPUMP`.

**Topics**
+ [Requisitos para la importación de datos con Oracle Data Pump y un bucket de Amazon S3](#Oracle.Procedural.Importing.DataPumpS3.requirements)
+ [Paso 1: Conceda privilegios al usuario de la base de datos en la instancia de base de datos de destino de RDS para Oracle](#Oracle.Procedural.Importing.DataPumpS3.Step1)
+ [Paso 2: Exporte datos a un archivo de volcado mediante DBMS\$1DATAPUMP](#Oracle.Procedural.Importing.DataPumpS3.Step2)
+ [Paso 3: carga del archivo de volcado a su bucket de Amazon S3](#Oracle.Procedural.Importing.DataPumpS3.Step3)
+ [Paso 4: Descargue el archivo de volcado desde su bucket de Amazon S3 a la instancia de base de datos de destino.](#Oracle.Procedural.Importing.DataPumpS3.Step4)
+ [Paso 5: Importe el archivo de volcado a la instancia de base de datos de destino mediante DBMS\$1DATAPUMP](#Oracle.Procedural.Importing.DataPumpS3.Step5)
+ [Paso 6: Limpieza](#Oracle.Procedural.Importing.DataPumpS3.Step6)

### Requisitos para la importación de datos con Oracle Data Pump y un bucket de Amazon S3
<a name="Oracle.Procedural.Importing.DataPumpS3.requirements"></a>

El proceso tiene los siguientes requisitos:
+ Asegúrese de que hay un bucket de Amazon S3 disponible para las transferencias de archivos, y que el bucket de Amazon S3 está en la misma Región de AWS que la instancia de base de datos. Para ver las instrucciones, consulte [Crear un bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html) en la *Guía de introducción de Amazon Simple Storage Service*.
+ El objeto que cargue en el bucket de Amazon S3 debe ser de 5 TB o menos. Para obtener más información acerca de cómo trabajar con objetos en Amazon S3, consulte [Guía del usuario de Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingObjects.html).
**nota**  
Si el archivo de volcado supera los 5 TB, puede ejecutar la exportación de Oracle Data Pump con la opción paralela. Esta operación distribuye los datos en varios archivos de volcado para que no supere el límite de 5 TB para archivos individuales.
+ Debe preparar el bucket de Amazon S3 para la integración de Amazon RDS siguiendo las instrucciones en [Configuración de permisos IAM para la integración de RDS para Oracle con Amazon S3](oracle-s3-integration.preparing.md).
+ Debe asegurarse de que tiene suficiente espacio de almacenamiento para almacenar el archivo de volcado en la instancia de origen y en la instancia de base de datos de destino.

**nota**  
Este proceso importa un archivo de volcado en el directorio `DATA_PUMP_DIR`, un directorio preconfigurado en todas las instancias de bases de datos de Oracle. Este directorio se encuentra en el mismo volumen de almacenamiento que los archivos de datos. Cuando importe el archivo de volcado, los archivos de datos de Oracle existentes utilizarán más espacio. Por lo tanto, debe asegurarse de que su instancia de base de datos pueda dar cabida a ese uso de espacio adicional. El archivo de volcado importado no se elimina ni se purga automáticamente del directorio `DATA_PUMP_DIR`. Para quitar el archivo de volcado importado, utilice [UTL\$1FILE.FREMOVE](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/UTL_FILE.html#GUID-09B09C2A-2C21-4F70-BF04-D0EEA7B59CAF), que se encuentra en el sitio web de Oracle. 

### Paso 1: Conceda privilegios al usuario de la base de datos en la instancia de base de datos de destino de RDS para Oracle
<a name="Oracle.Procedural.Importing.DataPumpS3.Step1"></a>

En este paso, debe crear los esquemas en los que tiene pensado importar datos y conceder a los usuarios los privilegios necesarios.

**Para crear usuarios y conceder los privilegios necesarios en la instancia de destino de RDS para Oracle**

1. Utilice SQL\$1Plus u Oracle SQL Developer para iniciar sesión como usuario maestro en la instancia de base de datos de RDS para Oracle en la que se importarán los datos. Para obtener más información acerca de la conexión a una instancia de base de datos, consulte [Conexión a una instancia de base de datos de Oracle](USER_ConnectToOracleInstance.md).

1. Cree el espacio de tabla necesario antes de importar los datos. Para obtener más información, consulte [Creación y redimensionamiento de los espacios de tablas en RDS para Oracle](Appendix.Oracle.CommonDBATasks.TablespacesAndDatafiles.md#Appendix.Oracle.CommonDBATasks.CreatingTablespacesAndDatafiles).

1. Cree la cuenta de usuario y conceda los permisos y roles necesarios si la cuenta de usuario a la que se importan los datos no existe. Si piensa importar datos en varios esquemas de usuario, cree cada cuenta de usuario y otórguele los permisos y roles necesarios.

   Por ejemplo, las siguientes instrucciones SQL crean un nuevo usuario y conceden los permisos y roles necesarios para importar los datos en el esquema propiedad de este usuario. Reemplace `schema_1` por el nombre de su esquema en este paso y en los siguientes.

   ```
   CREATE USER schema_1 IDENTIFIED BY my_password;
   GRANT CREATE SESSION, RESOURCE TO schema_1;
   ALTER USER schema_1 QUOTA 100M ON users;
   ```
**nota**  
Especifique una contraseña distinta de la que se muestra aquí como práctica recomendada de seguridad.

   Las instrucciones anteriores conceden al nuevo usuario el privilegio `CREATE SESSION` y el rol `RESOURCE`. Es probable que necesite más privilegios y roles en función de los objetos de base de datos que importe.

### Paso 2: Exporte datos a un archivo de volcado mediante DBMS\$1DATAPUMP
<a name="Oracle.Procedural.Importing.DataPumpS3.Step2"></a>

Para crear un archivo de volcado, utilice el paquete `DBMS_DATAPUMP`.

**Para exportar datos de Oracle a un archivo de volcado**

1. Utilice SQL Plus u Oracle SQL Developer para conectarse a la instancia de base de datos de RDS para Oracle de origen con un usuario administrativo. Si la base de datos de origen es una instancia de base de datos de RDS para Oracle, conéctese con el usuario maestro de Amazon RDS.

1. Exporte los datos llamando a los procedimientos `DBMS_DATAPUMP`.

   El siguiente script exporta el esquema `SCHEMA_1` a un archivo de volcado denominado `sample.dmp` en el directorio `DATA_PUMP_DIR`. Reemplace `SCHEMA_1` por el nombre del esquema que desea exportar.

   ```
   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;
   /
   ```
**nota**  
Data Pump inicia los trabajos de forma asíncrona Para obtener información sobre la supervisión de un trabajo de Data Pump, consulte [Monitoring job status](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-overview.html#GUID-E365D74E-12CD-495C-BA23-5A55F679C7E7) (Supervisión del estado del trabajo) en la documentación de Oracle. 

1. (Opcional) Puede ver el contenido del registro de exportación llamando al procedimiento `rdsadmin.rds_file_util.read_text_file`. Para obtener más información, consulte [Lectura de archivos de un directorio de instancia de base de datos](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ReadingFiles).

### Paso 3: carga del archivo de volcado a su bucket de Amazon S3
<a name="Oracle.Procedural.Importing.DataPumpS3.Step3"></a>

Utilice el procedimiento de Amazon RDS `rdsadmin.rdsadmin_s3_tasks.upload_to_s3` para copiar el archivo de volcado en el bucket de Amazon S3. En el siguiente ejemplo se cargan todos los archivos del directorio `DATA_PUMP_DIR` en un bucket de Amazon S3 denominado `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;
```

La instrucción `SELECT` devuelve el identificador de la tarea en un tipo de datos `VARCHAR2`. Para obtener más información, consulte [Carga de archivos desde la instancia de base de datos de RDS para Oracle en un bucket de Amazon S3](oracle-s3-integration.using.md#oracle-s3-integration.using.upload).

### Paso 4: Descargue el archivo de volcado desde su bucket de Amazon S3 a la instancia de base de datos de destino.
<a name="Oracle.Procedural.Importing.DataPumpS3.Step4"></a>

Realice este paso mediante el procedimiento de Amazon RDS `rdsadmin.rdsadmin_s3_tasks.download_from_s3`. Al descargar un archivo en un directorio, el procedimiento `download_from_s3` omite la descarga si ya existe un archivo con el mismo nombre en el directorio. Para quitar el archivo del directorio de descarga, utilice [UTL\$1FILE.FREMOVE](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/UTL_FILE.html#GUID-09B09C2A-2C21-4F70-BF04-D0EEA7B59CAF), que se encuentra en el sitio web de Oracle.

**Para descargar el archivo de volcado**

1. Inicie SQL\$1Plus u Oracle SQL Developer e inicie sesión como usuario maestro en su instancia de base de datos de destino de Amazon RDS

1. Descargue el archivo de volcado mediante el procedimiento de Amazon RDS `rdsadmin.rdsadmin_s3_tasks.download_from_s3`.

   En el siguiente ejemplo, se descargan todos los archivos de un bucket de Amazon S3 denominado `amzn-s3-demo-bucket` en el directorio `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;
   ```

   La instrucción `SELECT` devuelve el identificador de la tarea en un tipo de datos `VARCHAR2`. Para obtener más información, consulte [Descarga de archivos desde un bucket de Amazon S3 en una instancia de base de datos de Oracle](oracle-s3-integration.using.md#oracle-s3-integration.using.download).

### Paso 5: Importe el archivo de volcado a la instancia de base de datos de destino mediante DBMS\$1DATAPUMP
<a name="Oracle.Procedural.Importing.DataPumpS3.Step5"></a>

Utilice `DBMS_DATAPUMP` para importar el esquema a la instancia de base de datos de RDS para Oracle. Podrían ser necesarias opciones adicionales, como `METADATA_REMAP`.

**Para importar datos a la instancia de base de datos de destino**

1. Inicie SQL\$1Plus u Oracle SQL Developer e inicie sesión como usuario maestro en su instancia de base de datos de destino de RDS para Oracle.

1. Importe los datos llamando a los procedimientos `DBMS_DATAPUMP`.

   En el siguiente ejemplo se importan los datos de *SCHEMA\$11* de `sample_copied.dmp` en la instancia de base de datos de destino.

   ```
   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;
   /
   ```
**nota**  
Los trabajos de Data Pump se inician de modo asincrónico. Para obtener información sobre el monitoreo de un trabajo de Data Pump, consulte [Monitorización del estado del trabajo](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-overview.html#GUID-E365D74E-12CD-495C-BA23-5A55F679C7E7) en la documentación de Oracle. Puede ver el contenido del registro de importación mediante el procedimiento `rdsadmin.rds_file_util.read_text_file`. Para obtener más información, consulte [Lectura de archivos de un directorio de instancia de base de datos](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ReadingFiles).

1. Para comprobar la importación de datos, enumere las tablas de esquemas de la instancia de base de datos de destino.

   Por ejemplo, la siguiente consulta devuelve el número de tablas de `SCHEMA_1`. 

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

### Paso 6: Limpieza
<a name="Oracle.Procedural.Importing.DataPumpS3.Step6"></a>

Después de importar los datos, puede eliminar los archivos que no desee conservar.

**Para eliminar archivos innecesarios**

1. Inicie SQL\$1Plus u Oracle SQL Developer e inicie sesión como usuario maestro en su instancia de base de datos de destino de RDS para Oracle.

1. Enumere los archivos en `DATA_PUMP_DIR` mediante el siguiente comando.

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

1. Elimine los archivos de `DATA_PUMP_DIR` que ya no sean necesarios con el siguiente comando.

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

   Por ejemplo, el siguiente comando elimina el archivo denominado `sample_copied.dmp`.

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

## Importación de datos con Oracle Data Pump y un enlace de base de datos
<a name="Oracle.Procedural.Importing.DataPump.DBLink"></a>

El siguiente proceso de importación utiliza Oracle Data Pump y el paquete [DBMS\$1FILE\$1TRANSFER](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_FILE_TRANSFER.html) de Oracle. Los pasos son los siguientes:

1. Conéctese a una base de datos Oracle de origen, que puede ser una base de datos en las instalaciones, una instancia de Amazon EC2 o una instancia de base de datos de RDS para Oracle. 

1. Exporte los datos mediante el paquete [DBMS\$1DATAPUMP](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_DATAPUMP.html).

1. Utilice `DBMS_FILE_TRANSFER.PUT_FILE` para copiar el archivo de volcado desde la base de datos Oracle al directorio `DATA_PUMP_DIR` de la instancia de base de datos de RDS para Oracle de destino que está conectada mediante un enlace de base de datos. 

1. Importe los datos del archivo de volcado copiado a la instancia de base de datos de RDS para Oracle utilizando el paquete ` DBMS_DATAPUMP`.

El proceso de importación mediante Oracle Data Pump y un paquete de `DBMS_FILE_TRANSFER` tiene los siguientes pasos.

**Topics**
+ [Requisitos de importación de datos con Oracle Data Pump y un enlace de base de datos](#Oracle.Procedural.Importing.DataPumpDBLink.requirements)
+ [Paso 1: Conceda privilegios al usuario en la instancia de base de datos de destino de RDS para Oracle](#Oracle.Procedural.Importing.DataPumpDBLink.Step1)
+ [Paso 2: concesión de privilegios al usuario en la base de datos de origen](#Oracle.Procedural.Importing.DataPumpDBLink.Step2)
+ [Paso 3: Cree un archivo de volcado utilizando DBMS\$1DATAPUMP](#Oracle.Procedural.Importing.DataPumpDBLink.Step3)
+ [Paso 4: Crear un enlace de base de datos a la instancia de base de datos de destino](#Oracle.Procedural.Importing.DataPumpDBLink.Step4)
+ [Paso 5: Copie el archivo de volcado exportado a la instancia de base de datos de destino utilizando DBMS\$1FILE\$1TRANSFER](#Oracle.Procedural.Importing.DataPumpDBLink.Step5)
+ [Paso 6: Importe el archivo de datos a la instancia de base de datos de destino utilizando DBMS\$1DATAPUMP](#Oracle.Procedural.Importing.DataPumpDBLink.Step6)
+ [Paso 7: Limpieza](#Oracle.Procedural.Importing.DataPumpDBLink.Step7)

### Requisitos de importación de datos con Oracle Data Pump y un enlace de base de datos
<a name="Oracle.Procedural.Importing.DataPumpDBLink.requirements"></a>

El proceso tiene los siguientes requisitos:
+ Debe tener privilegios de ejecución en los paquetes `DBMS_FILE_TRANSFER` y `DBMS_DATAPUMP`.
+ Debe tener privilegios de escritura en el directorio `DATA_PUMP_DIR` de la instancia de base de datos de origen.
+ Debe asegurarse de que tiene suficiente espacio de almacenamiento para almacenar el archivo de volcado en la instancia de origen y en la instancia de base de datos de destino.

**nota**  
Este proceso importa un archivo de volcado en el directorio `DATA_PUMP_DIR`, un directorio preconfigurado en todas las instancias de bases de datos de Oracle. Este directorio se encuentra en el mismo volumen de almacenamiento que los archivos de datos. Cuando importe el archivo de volcado, los archivos de datos de Oracle existentes utilizarán más espacio. Por lo tanto, debe asegurarse de que su instancia de base de datos pueda dar cabida a ese uso de espacio adicional. El archivo de volcado importado no se elimina ni se purga automáticamente del directorio `DATA_PUMP_DIR`. Para quitar el archivo de volcado importado, utilice [UTL\$1FILE.FREMOVE](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/UTL_FILE.html#GUID-09B09C2A-2C21-4F70-BF04-D0EEA7B59CAF), que se encuentra en el sitio web de Oracle. 

### Paso 1: Conceda privilegios al usuario en la instancia de base de datos de destino de RDS para Oracle
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step1"></a>

Para conceder privilegios al usuario en la instancia de base de datos de destino de RDS para Oracle, realice los siguientes pasos:

1. Utilice SQL Plus u Oracle SQL Developer para conectarse a la instancia de base de datos de RDS para Oracle a la que desea importar los datos. Conéctese con el usuario maestro de Amazon RDS. Para obtener más información acerca de la conexión a la instancia de base de datos, consulte [Conexión a una instancia de base de datos de Oracle](USER_ConnectToOracleInstance.md).

1. Cree el espacio de tabla necesario antes de importar los datos. Para obtener más información, consulte [Creación y redimensionamiento de los espacios de tablas en RDS para Oracle](Appendix.Oracle.CommonDBATasks.TablespacesAndDatafiles.md#Appendix.Oracle.CommonDBATasks.CreatingTablespacesAndDatafiles).

1. Si la cuenta de usuario a la que se van a importar los datos no existe, cree la cuenta y otórguele los permisos y roles necesarios. Si piensa importar datos en varios esquemas de usuario, cree cada cuenta de usuario y otórguele los permisos y roles necesarios.

   Por ejemplo, los siguientes comandos crean un nuevo usuario denominado *schema\$11* y otorgan los permisos y roles necesarios para importar los datos al esquema de este usuario.

   ```
   CREATE USER schema_1 IDENTIFIED BY my-password;
   GRANT CREATE SESSION, RESOURCE TO schema_1;
   ALTER USER schema_1 QUOTA 100M ON users;
   ```
**nota**  
Especifique una contraseña distinta de la que se muestra aquí como práctica recomendada de seguridad.

   En el ejemplo anterior, se otorga el privilegio `CREATE SESSION` y el rol `RESOURCE` al nuevo usuario. Es probable que necesite más privilegios y roles en función de los objetos de base de datos que importe. 
**nota**  
Reemplace `schema_1` por el nombre de su esquema en este paso y en los siguientes.

### Paso 2: concesión de privilegios al usuario en la base de datos de origen
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step2"></a>

Utilice SQL\$1Plus u Oracle SQL Developer para conectarse a la instancia de base de datos de RDS para Oracle que contiene los datos que va a importar. Si es necesario, cree una cuenta de usuario con los permisos necesarios. 

**nota**  
Si la base de datos de origen es una instancia de Amazon RDS, puede omitir este paso. Para realizar la exportación utilizará la cuenta de usuario maestra de Amazon RDS.

Los siguientes comandos crean un usuario y le conceden los permisos necesarios.

```
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;
```

**nota**  
Especifique una contraseña distinta de la que se muestra aquí como práctica recomendada de seguridad.

### Paso 3: Cree un archivo de volcado utilizando DBMS\$1DATAPUMP
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step3"></a>

Para crear el archivo de volcado, haga lo siguiente:

1. Utilice SQL\$1Plus u Oracle SQL Developer para conectarse a la instancia de Oracle de origen con un usuario administrativo o con el usuario creado en el paso 2. Si la base de datos de origen es una instancia de base de datos de Amazon RDS for Oracle, conéctese con el usuario maestro de Amazon RDS.

1. Cree un archivo de volcado mediante la utilidad Oracle Data Pump.

   El siguiente script crea un archivo de volcado denominado *sample.dmp* en el directorio `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;
   /
   ```
**nota**  
Los trabajos de Data Pump se inician de modo asincrónico. Para obtener información sobre la supervisión de un trabajo de Data Pump, consulte [Monitoring job status](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-overview.html#GUID-E365D74E-12CD-495C-BA23-5A55F679C7E7) (Supervisión del estado del trabajo) en la documentación de Oracle. Puede ver el contenido del registro de exportación mediante el procedimiento `rdsadmin.rds_file_util.read_text_file`. Para obtener más información, consulte [Lectura de archivos de un directorio de instancia de base de datos](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ReadingFiles).

### Paso 4: Crear un enlace de base de datos a la instancia de base de datos de destino
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step4"></a>

Cree un enlace de base de datos entre la instancia de base de datos de origen y la instancia de base de datos de destino. La instancia local de Oracle debe tener conectividad de red con la instancia de base de datos para poder crear un enlace de base de datos y transferir el archivo de volcado de exportación. 

Para realizar este paso, conéctese con la misma cuenta de usuario del paso anterior.

Si está creando un enlace de base de datos entre dos instancias de bases de datos dentro de la misma VPC o en VPC interconectadas, debe existir una ruta válida entre las dos instancias de bases de datos. El grupo de seguridad de cada instancia de base de datos debe permitir la entrada y la salida desde la otra instancia de base de datos. Las reglas de entrada y salida del grupo de seguridad pueden referirse a grupos de seguridad de la misma VPC o de una VPC interconectada. Para obtener más información, consulte [Ajuste de los enlaces de base de datos para usarlos con las instancias de bases de datos de una VPC](Appendix.Oracle.CommonDBATasks.DBLinks.md). 

El siguiente comando crea un enlace de base de datos denominado `to_rds` que se conecta con un usuario maestro de Amazon RDS de la instancia de base de datos de destino. 

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

### Paso 5: Copie el archivo de volcado exportado a la instancia de base de datos de destino utilizando DBMS\$1FILE\$1TRANSFER
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step5"></a>

Utilice `DBMS_FILE_TRANSFER` para copiar el archivo de volcado desde la instancia de base de datos de origen en la instancia de base de datos de destino. El siguiente script copia un archivo de volcado denominado sample.dmp desde la instancia de origen en un enlace de la base de datos de destino denominado *to\$1rds* (creado en el paso anterior). 

```
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;
/
```

### Paso 6: Importe el archivo de datos a la instancia de base de datos de destino utilizando DBMS\$1DATAPUMP
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step6"></a>

Utilice Oracle Data Pump para importar el esquema en la instancia de base de datos. Pueden ser necesarias opciones adicionales, como METADATA\$1REMAP. 

 Para llevar a cabo la importación, conéctese a la instancia de base de datos con la cuenta de usuario maestro de Amazon RDS. 

```
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;
/
```

**nota**  
Los trabajos de Data Pump se inician de modo asincrónico. Para obtener información sobre el monitoreo de un trabajo de Data Pump, consulte [Monitorización del estado del trabajo](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-overview.html#GUID-E365D74E-12CD-495C-BA23-5A55F679C7E7) en la documentación de Oracle. Puede ver el contenido del registro de importación mediante el procedimiento `rdsadmin.rds_file_util.read_text_file`. Para obtener más información, consulte [Lectura de archivos de un directorio de instancia de base de datos](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ReadingFiles).

Puede verificar la importación de datos viendo las tablas de usuario en la instancia de base de datos. Por ejemplo, la siguiente consulta devuelve el número de tablas de `schema_1`. 

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

### Paso 7: Limpieza
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step7"></a>

Después de importar los datos, puede eliminar los archivos que no desee conservar. Puede enumerar los archivos en `DATA_PUMP_DIR` mediante el siguiente comando.

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

Para eliminar archivos de `DATA_PUMP_DIR` que ya no sean necesarios, utilice el siguiente comando. 

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

Por ejemplo, el siguiente comando elimina el archivo denominado `"sample_copied.dmp"`. 

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