

# Importar usando o Oracle Data Pump
<a name="Oracle.Procedural.Importing.DataPump"></a>

O Oracle Data Pump é um utilitário que permite exportar dados Oracle para um arquivo de despejo e importá-los para outro banco de dados Oracle. Ele é uma substituição a longo prazo para os utilitários de importação/exportação da Oracle. O Oracle Data Pump é a maneira preferida de mover grandes quantidades de dados de um banco de dados Oracle para uma instância de banco de dados do Amazon RDS.

Os exemplos desta seção mostram uma maneira de importar dados para um banco de dados Oracle, o Oracle Data Pump oferece suporte a outras técnicas. Para obter mais informações, consulte a [documentação do Oracle Database](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump.html#GUID-501A9908-BCC5-434C-8853-9A6096766B5A).

Os exemplos desta seção usam o pacote `DBMS_DATAPUMP`. Você pode realizar as mesmas tarefas usando os utilitários da linha de comando do Oracle Data Pump `impdp` e `expdp`. Você pode instalar esses utilitários em um host remoto como parte de uma instalação do Oracle Client, incluindo o Oracle Instant Client. Para obter mais informações, consulte [“Como usar o Oracle Instant Client para executar a importação ou exportação do Data Pump para a minha instância de banco de dados do Amazon RDS para Oracle?”](https://aws.amazon.com/premiumsupport/knowledge-center/rds-oracle-instant-client-datapump/)

**Topics**
+ [Visão geral do Oracle Data Pump](#Oracle.Procedural.Importing.DataPump.Overview)
+ [Importar dados com o Oracle Data Pump e um bucket do Amazon S3](#Oracle.Procedural.Importing.DataPump.S3)
+ [Importar dados com o Oracle Data Pump e um link de banco de dados](#Oracle.Procedural.Importing.DataPump.DBLink)

## Visão geral do Oracle Data Pump
<a name="Oracle.Procedural.Importing.DataPump.Overview"></a>

O Oracle Data Pump tem os seguintes componentes:
+ Clientes de linha de comando `expdp` e `impdp`
+ O pacote PL/SQL `DBMS_DATAPUMP`
+ O pacote PL/SQL `DBMS_METADATA`

Você pode usar o Oracle Data Pump nos seguintes cenários:
+ Importar dados de um banco de dados Oracle, on-premises ou em uma instância do Amazon EC2), para uma instância de banco de dados do RDS para Oracle.
+ Importar dados de uma instância de banco de dados do RDS para Oracle para um banco de dados Oracle, on-premises ou em uma instância do Amazon EC2.
+ Importar dados entre instâncias de banco de dados do RDS para Oracle, por exemplo, para migrar dados do EC2-Classic para a VPC.

Para baixar os utilitários do Oracle Data Pump, consulte [“Oracle database software downloads”](http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html) (Downloads do software Oracle Database) no site da Oracle Technology Network. Para considerações sobre compatibilidade ao migrar entre versões do Oracle Database, consulte [a documentação do Oracle Database](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-overview.html#GUID-BAA3B679-A758-4D55-9820-432D9EB83C68).

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

Normalmente, você usa o Oracle Data Pump nos seguintes estágios:

1. Exportar seus dados em um arquivo de despejo no banco de dados de origem.

1. Carregar seu arquivo de despejo em sua instância de destino do RDS para Oracle. Você pode transferir usando um bucket do Amazon S3 ou usando um link de banco de dados entre os dois bancos de dados.

1. Importe os dados de seu arquivo de despejo em sua instância de banco de dados do RDS para Oracle.

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

Ao usar o Oracle Data Pump para importar dados para uma instância do RDS para Oracle, recomendamos as seguintes práticas:
+ Faça importações no modo `schema` ou `table` para importar esquemas e objetos específicos.
+ Limite os esquemas que você importa àqueles exigidos por sua aplicação.
+ Não importe no modo `full` ou importar esquemas para componentes mantidos pelo sistema.

  Como o RDS para Oracle não permite o acesso a usuários administrativos do `SYS` ou `SYSDBA`, essas ações podem danificar o dicionário de dados da Oracle e afetar a estabilidade de seu banco de dados.
+ Ao carregar grandes quantidades de dados, faça o seguinte:

  1. Transfira o arquivo de despejo para a instância de banco de dados do RDS para Oracle de destino.

  1. Crie um snapshot do banco de dados da instância.

  1. Teste a importação para verificar se ela é bem-sucedida.

  Se os componentes do banco de dados forem invalidados, você poderá excluir a instância de banco de dados e recriá-la a partir do snapshot. A instância de banco de dados restaurada incluirá qualquer arquivo de despejo preparado na instância de banco de dados quando você criou o snapshot.
+ Não importe arquivos de despejo que foram criados usando os parâmetros de exportação do Oracle Data Pump `TRANSPORT_TABLESPACES`, `TRANSPORTABLE` ou `TRANSPORT_FULL_CHECK`. As instâncias de banco de dados do RDS para Oracle não oferecem suporte à importação desses arquivos de despejo.
+ Não importe arquivos de despejo que contenham objetos do Oracle Scheduler em `SYS`, `SYSTEM`, `RDSADMIN`, `RDSSEC` e `RDS_DATAGUARD` e pertençam às seguintes categorias:
  + Tarefas
  + Programas
  + Schedules
  + Cadeias
  + Regras
  + Contextos de avaliação
  + Conjuntos de regras

  As instâncias de banco de dados do RDS para Oracle não oferecem suporte à importação desses arquivos de despejo. 
+ Para excluir objetos do Oracle Scheduler não aceitos, use diretivas adicionais durante a exportação do Data Pump. Se usar o `DBMS_DATAPUMP`, você poderá adicionar um `METADATA_FILTER` antes do `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'
  );
  ```

  Se você usar o `expdp`, crie um arquivo de parâmetro que contenha a diretiva `exclude` mostrada no exemplo a seguir. Em seguida, use `PARFILE=parameter_file` com o comando `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')
       )
    )"
  ```

## Importar dados com o Oracle Data Pump e um bucket do Amazon S3
<a name="Oracle.Procedural.Importing.DataPump.S3"></a>

O processo de importação a seguir usa o Oracle Data Pump e um bucket do Amazon S3. As etapas são:

1. Exporte dados no banco de dados de origem usando o pacote[DBMS\$1DATAPUMP](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_DATAPUMP.html) da Oracle.

1. Coloque o arquivo de despejo em um bucket do Amazon S3.

1. Baixe o arquivo de despejo do bucket do Amazon S3 no diretório `DATA_PUMP_DIR` na instância de destino do banco de dados do RDS para Oracle. 

1. Importe os dados do arquivo de despejo copiado para a instância de banco de dados do RDS para Oracle usando o pacote `DBMS_DATAPUMP`.

**Topics**
+ [Requisitos para importar dados com o Oracle Data Pump e um bucket do Amazon S3](#Oracle.Procedural.Importing.DataPumpS3.requirements)
+ [Etapa 1: Conceder privilégios ao usuário do banco de dados na instância de banco de dados de destino do RDS para Oracle](#Oracle.Procedural.Importing.DataPumpS3.Step1)
+ [Etapa 2: Exportar dados para um arquivo de despejo usando DBMS\$1DATAPUMP](#Oracle.Procedural.Importing.DataPumpS3.Step2)
+ [Etapa 3: Carregar o arquivo de despejo para o seu bucket do Amazon S3](#Oracle.Procedural.Importing.DataPumpS3.Step3)
+ [Etapa 4: Baixe o arquivo no bucket do Amazon S3 para a instância de banco de dados de destino](#Oracle.Procedural.Importing.DataPumpS3.Step4)
+ [Etapa 5: Importar seu arquivo de despejo para sua instância de banco de dados de destino usando DBMS\$1DATAPUMP](#Oracle.Procedural.Importing.DataPumpS3.Step5)
+ [Etapa 6: Limpeza](#Oracle.Procedural.Importing.DataPumpS3.Step6)

### Requisitos para importar dados com o Oracle Data Pump e um bucket do Amazon S3
<a name="Oracle.Procedural.Importing.DataPumpS3.requirements"></a>

O processo tem estes requisitos:
+ Verifique se há um bucket do Amazon S3 disponível para transferências de arquivos e se o bucket do Amazon S3 está na mesma Região da AWS que a instância de banco de dados. Para obter mais informações, consulte [Criar um bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html) no *Guia de conceitos básicos do Amazon Simple Storage Service*.
+ O objeto carregado no bucket do Amazon S3 deve ter 5 TB ou menos. Para obter mais informações sobre como trabalhar com objetos no Amazon S3, consulte o [Manual do usuário do Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingObjects.html).
**nota**  
Se o arquivo de despejo for superior a 5 TB, será possível executar a exportação do Oracle Data Pump com a opção paralela. Essa operação distribui os dados em vários arquivos de despejo para que você não exceda o limite de 5 TB para arquivos individuais.
+ Você deve preparar o bucket do Amazon S3 para a integração com o Amazon RDS seguindo as instruções em [Configurar permissões do IAM para a integração do RDS para Oracle com o Amazon S3](oracle-s3-integration.preparing.md).
+ Você deve ter espaço de armazenamento suficiente para armazenar o arquivo de despejo na instância de origem e na instância de banco de dados de destino.

**nota**  
Esse processo importa um arquivo de despejo no diretório `DATA_PUMP_DIR`, um diretório pré-configurado em todas as instâncias de banco de dados Oracle. Esse diretório está localizado no mesmo volume de armazenamento que seus arquivos de dados. Ao importar o arquivo de despejo, os arquivos de dados existes da Oracle usam mais espaço. Dessa forma, você deve verificar se a sua instância de banco de dados pode acomodar o uso de espaço adicional. O arquivo de despejo importado não é excluído ou limpo automaticamente do diretório `DATA_PUMP_DIR`. Para remover o arquivo de despejo importado, use [UTL\$1FILE.FREMOVE](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/UTL_FILE.html#GUID-09B09C2A-2C21-4F70-BF04-D0EEA7B59CAF), que pode ser encontrado no site da Oracle. 

### Etapa 1: Conceder privilégios ao usuário do banco de dados na instância de banco de dados de destino do RDS para Oracle
<a name="Oracle.Procedural.Importing.DataPumpS3.Step1"></a>

Nesta etapa, você cria os esquemas nos quais planeja importar dados e concede aos usuários os privilégios necessários.

**Para criar usuários e conceder os privilégios necessários na instância do RDS para Oracle de destino**

1. Use o SQL\$1Plus ou o Oracle SQL Developer para fazer login como usuário mestre na instância de banco de dados do RDS para Oracle para onde os dados serão importados. Para saber mais sobre como se conectar à sua instância de banco de dados, consulte [Conectar-se a uma instância de banco de dados Oracle](USER_ConnectToOracleInstance.md).

1. Crie os espaços de tabela necessários antes de importar os dados. Para obter mais informações, consulte [Criar e usar espaços de tabela no RDS para Oracle](Appendix.Oracle.CommonDBATasks.TablespacesAndDatafiles.md#Appendix.Oracle.CommonDBATasks.CreatingTablespacesAndDatafiles).

1. Crie a conta de usuário e conceda as permissões e funções necessárias se a conta de usuário na qual os dados serão importados não existir. Se você planeja importar dados para vários esquemas de usuários, crie cada conta de usuário e conceda as funções e os privilégios necessários a ela.

   Por exemplo, as instruções SQL a seguir criam um novo usuário e concedem as permissões e funções necessárias para importar os dados para o esquema de propriedade do usuário. Substitua `schema_1` pelo nome de seu schema nesta e nas etapas a seguir.

   ```
   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 uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.

   As instruções anteriores concedem ao novo usuário o privilégio `CREATE SESSION` e a função `RESOURCE`. Podem ser necessários privilégios e funções adicionais dependendo dos objetos de banco de dados que você importar.

### Etapa 2: Exportar dados para um arquivo de despejo usando DBMS\$1DATAPUMP
<a name="Oracle.Procedural.Importing.DataPumpS3.Step2"></a>

Para criar um arquivo de despejo, use o pacote `DBMS_DATAPUMP`.

**Como exportar dados Oracle para um arquivo de despejo**

1. Use o SQL Plus ou o Oracle SQL Developer para se conectar à instância de banco de dados do RDS para Oracle de origem por meio de um usuário administrativo. Se o banco de dados de origem for uma instância de banco de dados do RDS para Oracle, conecte-se com o usuário mestre do Amazon RDS.

1. Exporte os dados chamando procedimentos do `DBMS_DATAPUMP`.

   O script a seguir exporta o esquema `SCHEMA_1` em um arquivo de despejo chamado `sample.dmp` no diretório `DATA_PUMP_DIR`. Substitua `SCHEMA_1` pelo nome do esquema que você quer 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**  
O Data Pump inicia os trabalhos de forma assíncrona. Para obter informações sobre o monitoramento de um trabalho do 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) (Monitorar status do trabalho) na documentação da Oracle. 

1. (Opcional) Você pode visualizar o conteúdo do log de exportação chamando o procedimento `rdsadmin.rds_file_util.read_text_file`. Para obter mais informações, consulte [Leitura de arquivos no diretório de uma instância de banco de dados](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ReadingFiles).

### Etapa 3: Carregar o arquivo de despejo para o seu bucket do Amazon S3
<a name="Oracle.Procedural.Importing.DataPumpS3.Step3"></a>

Use o procedimento `rdsadmin.rdsadmin_s3_tasks.upload_to_s3` do Amazon RDS para copiar o arquivo de despejo no bucket do Amazon S3. O exemplo a seguir faz upload todos os arquivos do diretório `DATA_PUMP_DIR` para um bucket do Amazon S3 chamado `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;
```

A instrução `SELECT` retorna o ID da tarefa em um tipo de dados `VARCHAR2`. Para obter mais informações, consulte [Carregar arquivos de uma instância de banco de dados do RDS para Oracle para um bucket do Amazon S3](oracle-s3-integration.using.md#oracle-s3-integration.using.upload).

### Etapa 4: Baixe o arquivo no bucket do Amazon S3 para a instância de banco de dados de destino
<a name="Oracle.Procedural.Importing.DataPumpS3.Step4"></a>

Execute esta etapa usando o procedimento `rdsadmin.rdsadmin_s3_tasks.download_from_s3` do Amazon RDS. Quando você baixar um arquivo em um diretório, o procedimento `download_from_s3` ignorará o download se um arquivo com nome idêntico já existir no diretório. Para remover um arquivo do diretório de downloads, use [UTL\$1FILE.FREMOVE](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/UTL_FILE.html#GUID-09B09C2A-2C21-4F70-BF04-D0EEA7B59CAF), que pode ser encontrado no site da Oracle.

**Como baixar seu arquivo de despejo**

1. Inicie o SQL\$1Plus ou o Oracle SQL Developer e faça login como mestre em sua instância de banco de dados Oracle de destino do Amazon RDS

1. Baixe o arquivo de despejo usando o procedimento do Amazon RDS `rdsadmin.rdsadmin_s3_tasks.download_from_s3`.

   O exemplo a seguir baixa todos os arquivos de um bucket do Amazon S3 chamado `amzn-s3-demo-bucket` no diretório `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;
   ```

   A instrução `SELECT` retorna o ID da tarefa em um tipo de dados `VARCHAR2`. Para obter mais informações, consulte [Baixar arquivos de um bucket do Amazon S3 para uma instância de banco de dados Oracle](oracle-s3-integration.using.md#oracle-s3-integration.using.download).

### Etapa 5: Importar seu arquivo de despejo para sua instância de banco de dados de destino usando DBMS\$1DATAPUMP
<a name="Oracle.Procedural.Importing.DataPumpS3.Step5"></a>

Use o `DBMS_DATAPUMP` para importar o esquema em sua instância de banco de dados do RDS para Oracle. Opções adicionais, como `METADATA_REMAP`, podem ser necessárias.

**Para importar dados para sua instância de banco de dados de destino**

1. Inicie o SQL\$1Plus ou o SQL Developer e faça login como usuário mestre em sua instância de banco de dados do RDS para Oracle.

1. Importe os dados chamando procedimentos `DBMS_DATAPUMP`.

   O exemplo a seguir importa os dados de *SCHEMA\$11* de `sample_copied.dmp` em sua instância de banco de dados 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**  
Os trabalhos do Data Pump são iniciados de forma assíncrona. Para obter informações sobre o monitoramento de um trabalho do 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) (Monitorar status do trabalho) na documentação da Oracle. Você pode visualizar o conteúdo do log de importação usando o procedimento `rdsadmin.rds_file_util.read_text_file`. Para obter mais informações, consulte [Leitura de arquivos no diretório de uma instância de banco de dados](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ReadingFiles).

1. Verifique a importação de dados listando as tabelas de esquema na sua instância de banco de dados de destino.

   Por exemplo, a consulta a seguir retorna o número de tabelas para o `SCHEMA_1`. 

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

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

Depois que os dados foram importados, você pode excluir os arquivos que não deseja manter.

**Como remover arquivos desnecessários**

1. Inicie o SQL\$1Plus ou o SQL Developer e faça login como usuário mestre em sua instância de banco de dados do RDS para Oracle.

1. Liste os arquivos no `DATA_PUMP_DIR` usando o comando a seguir.

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

1. Para excluir arquivos no `DATA_PUMP_DIR` que não são mais necessários, use o comando a seguir.

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

   Por exemplo, o seguinte comando exclui o arquivo chamado `sample_copied.dmp`.

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

## Importar dados com o Oracle Data Pump e um link de banco de dados
<a name="Oracle.Procedural.Importing.DataPump.DBLink"></a>

O processo a seguir usa o Oracle Data Pump e o pacote [DBMS\$1FILE\$1TRANSFER](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_FILE_TRANSFER.html) do Oracle. As etapas são:

1. Conecte-se a um banco de dados Oracle de origem, que pode ser um banco de dados on-premises, uma instância do Amazon EC2 ou uma instância de banco de dados do RDS para Oracle. 

1. Exporte dados usando o pacote [DBMS\$1DATAPUMP](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_DATAPUMP.html).

1. Ele usa `DBMS_FILE_TRANSFER.PUT_FILE` para copiar o arquivo de despejo do banco de dados Oracle para o diretório `DATA_PUMP_DIR` na instância do banco de dados do RDS para Oracle de destino que está conectada por meio de um link de banco de dados. 

1. Importe os dados do arquivo de despejo copiado para a instância de banco de dados do RDS para Oracle usando o pacote ` DBMS_DATAPUMP`.

O processo de importação usando o Oracle Data Pump e o pacote `DBMS_FILE_TRANSFER` tem as etapas a seguir.

**Topics**
+ [Requisitos para importar dados com o Oracle Data Pump e um link de banco de dados](#Oracle.Procedural.Importing.DataPumpDBLink.requirements)
+ [Etapa 1: Conceder privilégios ao usuário na instância de destino do RDS para Oracle](#Oracle.Procedural.Importing.DataPumpDBLink.Step1)
+ [Etapa 2: Conceder privilégios ao usuário no banco de dados de origem](#Oracle.Procedural.Importing.DataPumpDBLink.Step2)
+ [Etapa 3: Criar um arquivo de despejo usando DBMS\$1DATAPUMP](#Oracle.Procedural.Importing.DataPumpDBLink.Step3)
+ [Etapa 4: Criar o vínculo de banco de dados com a instância de banco de dados de destino](#Oracle.Procedural.Importing.DataPumpDBLink.Step4)
+ [Etapa 5: Copiar o arquivo de despejo exportado para a instância de banco de dados de destino usando DBMS\$1FILE\$1TRANSFER](#Oracle.Procedural.Importing.DataPumpDBLink.Step5)
+ [Etapa 6: Importar o arquivo de dados para a instância de banco de dados de destino usando DBMS\$1DATAPUMP](#Oracle.Procedural.Importing.DataPumpDBLink.Step6)
+ [Etapa 7: Limpeza](#Oracle.Procedural.Importing.DataPumpDBLink.Step7)

### Requisitos para importar dados com o Oracle Data Pump e um link de banco de dados
<a name="Oracle.Procedural.Importing.DataPumpDBLink.requirements"></a>

O processo tem estes requisitos:
+ É necessário ter privilégios de execução nos pacotes `DBMS_FILE_TRANSFER` e `DBMS_DATAPUMP`.
+ É necessário ter privilégios de gravação no diretório `DATA_PUMP_DIR` na instância de banco de dados de origem.
+ Você deve ter espaço de armazenamento suficiente para armazenar o arquivo de despejo na instância de origem e na instância de banco de dados de destino.

**nota**  
Esse processo importa um arquivo de despejo no diretório `DATA_PUMP_DIR`, um diretório pré-configurado em todas as instâncias de banco de dados Oracle. Esse diretório está localizado no mesmo volume de armazenamento que seus arquivos de dados. Ao importar o arquivo de despejo, os arquivos de dados existes da Oracle usam mais espaço. Dessa forma, você deve verificar se a sua instância de banco de dados pode acomodar o uso de espaço adicional. O arquivo de despejo importado não é excluído ou limpo automaticamente do diretório `DATA_PUMP_DIR`. Para remover o arquivo de despejo importado, use [UTL\$1FILE.FREMOVE](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/UTL_FILE.html#GUID-09B09C2A-2C21-4F70-BF04-D0EEA7B59CAF), que pode ser encontrado no site da Oracle. 

### Etapa 1: Conceder privilégios ao usuário na instância de destino do RDS para Oracle
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step1"></a>

Para conceder privilégios ao usuário na instância de banco de dados de destino do RDS para Oracle, sigas estas etapas:

1. Use o SQL Plus ou o Oracle SQL Developer para se conectar à instância de banco de dados do RDS para Oracle para onde você pretende importar os dados. Conecte-se como usuário mestre do Amazon RDS. Para obter informações sobre como se conectar à sua instância de banco de dados, consulte [Conectar-se a uma instância de banco de dados Oracle](USER_ConnectToOracleInstance.md).

1. Crie os espaços de tabela necessários antes de importar os dados. Para obter mais informações, consulte [Criar e usar espaços de tabela no RDS para Oracle](Appendix.Oracle.CommonDBATasks.TablespacesAndDatafiles.md#Appendix.Oracle.CommonDBATasks.CreatingTablespacesAndDatafiles).

1. Se a conta de usuário na qual os dados serão importados não existir, crie-a e conceda as permissões e funções necessárias a ela. Se você planeja importar dados para vários esquemas de usuários, crie cada conta de usuário e conceda as funções e os privilégios necessários a ela.

   Por exemplo, os comandos a seguir criam um novo usuário chamado *schema\$11* e concedem as permissões e funções necessárias para importar os dados para o esquema deste usuário.

   ```
   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 uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.

   O exemplo anterior concede ao novo usuário o privilégio `CREATE SESSION` e a função `RESOURCE`. Podem ser necessários privilégios e funções adicionais dependendo dos objetos de banco de dados que você importa. 
**nota**  
Substitua `schema_1` pelo nome de seu schema nesta e nas etapas a seguir.

### Etapa 2: Conceder privilégios ao usuário no banco de dados de origem
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step2"></a>

Use o SQL\$1Plus ou o Oracle SQL Developer para se conectar à instância de banco de dados do RDS para Oracle que contém os dados a serem importados. Se necessário, crie uma conta de usuário e conceda as permissões necessárias. 

**nota**  
Se o banco de dados de origem for uma instância do Amazon RDS, você poderá ignorar esta etapa. Use sua conta de usuário mestre do Amazon RDS para executar a exportação.

Os comandos a seguir criam um novo usuário e concedem as permissões necessárias.

```
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 uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.

### Etapa 3: Criar um arquivo de despejo usando DBMS\$1DATAPUMP
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step3"></a>

Para criar o arquivo de despejo, faça o seguinte:

1. Use o SQL\$1Plus ou o Oracle SQL Developer para se conectar à instância de origem do Oracle por meio de um usuário administrativo ou o usuário que você criou na etapa 2. Se o banco de dados de origem for uma instância de banco de dados do Amazon RDS para Oracle, conecte-se com o usuário mestre do Amazon RDS.

1. Crie um arquivo de despejo usando o utilitário Oracle Data Pump.

   O script a seguir cria um arquivo de despejo chamado *sample.dmp* no diretório `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**  
Os trabalhos do Data Pump são iniciados de forma assíncrona. Para obter informações sobre o monitoramento de um trabalho do 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) (Monitorar status do trabalho) na documentação da Oracle. É possível visualizar o conteúdo do log de exportação usando o procedimento `rdsadmin.rds_file_util.read_text_file`. Para obter mais informações, consulte [Leitura de arquivos no diretório de uma instância de banco de dados](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ReadingFiles).

### Etapa 4: Criar o vínculo de banco de dados com a instância de banco de dados de destino
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step4"></a>

Crie um link de banco de dados entre sua instância de banco de dados de origem e sua instância de banco de dados de destino. Observe que sua instância local do Oracle deve ter conectividade de rede com a instância de banco de dados para criar um link de banco de dados e transferir seu arquivo de despejo. 

Realize esta etapa conectado com a mesma conta de usuário da etapa anterior.

Se você estiver criando um link de banco de dados entre duas instâncias de bancos de dados na mesma VPC ou VPCs emparelhadas, as duas instâncias de bancos de dados deverão ter uma rota válida entre elas. O grupo de segurança de cada instância de banco de dados deve permitir a entrada e a saída da outra instância de banco de dados. As regras de entrada e saída do grupo de segurança podem se referir a grupos de segurança da mesma VPC ou de uma VPC emparelhada. Para obter mais informações, consulte [Ajuste de vínculos de banco de dados para uso com instâncias de bancos de dados em uma VPC](Appendix.Oracle.CommonDBATasks.DBLinks.md). 

O comando a seguir cria um link de banco de dados chamado `to_rds` que se conecta ao usuário mestre do Amazon RDS na instância de banco de dados 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>)))';
```

### Etapa 5: Copiar o arquivo de despejo exportado para a instância de banco de dados de destino usando DBMS\$1FILE\$1TRANSFER
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step5"></a>

Use `DBMS_FILE_TRANSFER` para copiar o arquivo de despejo da instância do banco de dados de origem para a instância de banco de dados de destino. O script a seguir copia um arquivo de despejo chamado sample.dmp da instância de origem para um link de banco de dados de destino chamado *to\$1rds* (criado na etapa 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;
/
```

### Etapa 6: Importar o arquivo de dados para a instância de banco de dados de destino usando DBMS\$1DATAPUMP
<a name="Oracle.Procedural.Importing.DataPumpDBLink.Step6"></a>

Use o Oracle Data Pump para importar o esquema na instância de banco de dados. Opções adicionais, como METADATA\$1REMAP, podem ser necessárias. 

 Conecte-se à instância de banco de dados com a conta de usuário mestre do Amazon RDS para executar a importação. 

```
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**  
Os trabalhos do Data Pump são iniciados de forma assíncrona. Para obter informações sobre o monitoramento de um trabalho do Data Pump, consulte [Monitoring Job Status (Monitorar status do trabalho)](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-overview.html#GUID-E365D74E-12CD-495C-BA23-5A55F679C7E7) na documentação da Oracle. Você pode visualizar o conteúdo do log de importação usando o procedimento `rdsadmin.rds_file_util.read_text_file`. Para obter mais informações, consulte [Leitura de arquivos no diretório de uma instância de banco de dados](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ReadingFiles).

Você pode verificar a importação de dados visualizando a tabela do usuário na instância de banco de dados. Por exemplo, a consulta a seguir retorna o número de tabelas para o `schema_1`. 

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

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

Depois que os dados foram importados, você pode excluir os arquivos que não deseja manter. É possível listar os arquivos `DATA_PUMP_DIR` usando o seguinte comando.

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

Para excluir arquivos no `DATA_PUMP_DIR` que não são mais necessários, use o comando a seguir. 

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

Por exemplo, o seguinte comando exclui o arquivo chamado `"sample_copied.dmp"`. 

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