

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Migrar valores do Oracle CLOB para linhas individuais no PostgreSQL na AWS
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws"></a>

*Sai Krishna Namburu e Sindhusha Paturu, Amazon Web Services*

## Resumo
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-summary"></a>

Este padrão descreve como dividir os valores do Oracle Character Large Object (CLOB) em linhas individuais no Amazon Aurora Edição Compatível com PostgreSQL e no Amazon Relational Database Service (Amazon RDS) para o PostgreSQL. O PostgreSQL não dá suporte ao tipo de dados CLOB. 

As tabelas com partições de intervalo são identificadas no banco de dados Oracle de origem, e o nome da tabela, o tipo de partição, o intervalo da partição e outros metadados são capturados e carregados no banco de dados de destino. Você pode carregar dados CLOB com menos de 1 GB em tabelas de destino como texto usando o AWS Database Migration Service (AWS DMS) ou pode exportar os dados no formato CSV, carregá-los em um bucket do Amazon Simple Storage Service (Amazon S3) e migrá-los para o banco de dados PostgreSQL de destino.

Após a migração, você pode usar o código PostgreSQL personalizado fornecido com esse padrão para dividir os dados CLOB em linhas individuais com base no novo identificador de caracteres de linha (`CHR(10)`) e preencher a tabela** de **destino. 

## Pré-requisitos e limitações
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-prereqs"></a>

**Pré-requisitos **
+ Uma tabela de banco de dados Oracle que tem partições de intervalo e registros com um tipo de dados CLOB.
+ Um banco de dados compatível com o Aurora PostgreSQL ou Amazon RDS para PostgreSQL que tem uma estrutura de tabela semelhante à tabela de origem (mesmas colunas e tipos de dados).

**Limitações**
+ O valor do CLOB não pode exceder 1 GB.
+ Cada linha na tabela de destino deve ter um novo identificador de caractere de linha.

**Versões do produto**
+ Oracle 12c
+ Aurora Postgres 11.6

## Arquitetura
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-architecture"></a>

O diagrama a seguir mostra uma tabela Oracle de origem com dados CLOB e a tabela PostgreSQL equivalente na versão 11.6 compatível com o Aurora PostgreSQL.

![Tabela CLOB de origem e tabela PostgreSQL de destino equivalente.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/55806ee7-6a9f-4058-9a47-a07de68223ca/images/79b9d4b9-6f20-4db5-8ca8-2a599769a498.png)


## Ferramentas
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-tools"></a>

**Serviços da AWS**
+ O [Amazon Aurora Edição Compatível com PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) é um mecanismo de banco de dados relacional totalmente gerenciado e em conformidade com ACID, que ajuda você a configurar, operar e escalar as implantações de PostgreSQL.
+ O [Amazon Relational Database Service (Amazon RDS) para PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) ajuda você a configurar, operar e escalar um banco de dados relacional PostgreSQL na Nuvem AWS.
+ O [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) ajuda você a migrar armazenamentos de dados para a Nuvem AWS ou entre combinações de configurações na nuvem e on-premises.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

**Outras ferramentas**

Você pode usar as seguintes ferramentas de cliente para se conectar, acessar e gerenciar seus bancos de dados compatíveis com o Aurora PostgreSQL e o Amazon RDS para PostgreSQL. (Essas ferramentas não são usadas nesse padrão).
+ O [pgAdmin](https://www.pgadmin.org/) é uma ferramenta de gerenciamento de código aberto para PostgreSQL. Ele fornece uma interface gráfica que ajuda você a criar, manter e usar objetos de banco de dados.
+ [DBeaver](https://dbeaver.io/)é uma ferramenta de banco de dados de código aberto para desenvolvedores e administradores de banco de dados. Você pode usar a ferramenta para manipular, monitorar, analisar, administrar e migrar seus dados.

## Práticas recomendadas
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-best-practices"></a>

Para obter as práticas recomendadas para migrar seu banco de dados do Oracle para o PostgreSQL, consulte a [Publicação de blog da AWS práticas recomendadas para migrar um banco de dados Oracle para o Amazon RDS PostgreSQL ou o Amazon Aurora PostgreSQL: considerações sobre o processo de migração e a infraestrutura](https://aws.amazon.com/blogs/database/best-practices-for-migrating-an-oracle-database-to-amazon-rds-postgresql-or-amazon-aurora-postgresql-migration-process-and-infrastructure-considerations/).

Para obter as melhores práticas de configuração da tarefa do AWS DMS para migrar objetos binários grandes, consulte [Migração de objetos binários grandes () LOBs na](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html#CHAP_BestPractices.LOBS) documentação do AWS DMS.

## Épicos
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-epics"></a>

### Identificar os dados do CLOB
<a name="identify-the-clob-data"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Analisar os dados do CLOB. | No banco de dados Oracle de origem, analise os dados CLOB para ver se eles contêm cabeçalhos de coluna, para que você possa determinar o método para carregar os dados na tabela de destino. <br />Para analisar os dados de entrada, use a consulta a seguir.<br />`SELECT * FROM clobdata_or;  ` | Desenvolvedor | 
| Carregar os dados do CLOB no banco de dados de destino. | Migre a tabela que tem dados CLOB para uma tabela provisória (de teste) no banco de dados de destino do Aurora ou do Amazon RDS. Você pode usar o AWS DMS ou carregar os dados como um arquivo CSV em um bucket do Amazon S3.<br />Para obter informações sobre o uso do AWS DMS para essa tarefa, consulte [Usar um banco de dados Oracle como fonte](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) e [Usar um banco de dados PostgreSQL como destino](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) na documentação do AWS DMS.<br />Para obter informações sobre o uso do Amazon S3 para essa tarefa, consulte [Usar o Amazon S3 como destino](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html) na documentação do AWS DMS. | Engenheiro de migração, DBA | 
| Validar a tabela PostgreSQL de destino. | Valide os dados de destino, incluindo cabeçalhos, em relação aos dados de origem usando as seguintes consultas no banco de dados de destino.<pre>SELECT * FROM clobdata_pg;<br />SELECT * FROM clobdatatarget;</pre><br />Compare os resultados com os resultados da consulta do banco de dados de origem (da primeira etapa). | Desenvolvedor | 
| Dividir os dados do CLOB em linhas separadas. | Execute o código PostgreSQL personalizado fornecido na seção [Informações adicionais](#migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-additional) para dividir os dados CLOB e inseri-los em linhas separadas na tabela PostgreSQL de destino. | Desenvolvedor | 

### Valide os dados.
<a name="validate-the-data"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Validar os dados na tabela de destino. | Valide os dados inseridos na tabela de destino usando as seguintes consultas.<pre>SELECT * FROM clobdata_pg;<br />SELECT * FROM clobdatatarget;</pre> | Desenvolvedor | 

## Recursos relacionados
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-resources"></a>
+ [Tipo de dados CLOB](https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF0021) (documentação da Oracle)
+ [Tipos de dados](https://www.postgresql.org/docs/11/datatype.html) (documentação do PostgreSQL)

## Mais informações
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-additional"></a>

**Função PostgreSQL para dividir dados CLOB**

```
do
$$
declare
totalstr varchar;
str1 varchar;
str2 varchar;
pos1 integer := 1;
pos2 integer ;
len integer;


begin
        select rawdata||chr(10) into totalstr from clobdata_pg;
        len :=  length(totalstr) ;
        raise notice 'Total length : %',len;
        raise notice 'totalstr : %',totalstr;
        raise notice 'Before while loop';


        while pos1 < len  loop


                  select position (chr(10) in totalstr) into pos2;
                 raise notice '1st position of new line : %',pos2;


                str1 := substring (totalstr,pos1,pos2-1);
                raise notice 'str1 : %',str1;


                   insert into clobdatatarget(data) values (str1);
                   totalstr := substring(totalstr,pos2+1,len);
                   raise notice 'new totalstr :%',totalstr;
                len :=  length(totalstr) ;


        end loop;
end
$$
LANGUAGE 'plpgsql' ;
```

**Exemplos de entrada e saída**

Você pode usar os exemplos a seguir para testar o código PostgreSQL antes de migrar seus dados.

Crie um banco de dados Oracle com três linhas de entrada.

```
CREATE TABLE clobdata_or (
id INTEGER GENERATED ALWAYS AS IDENTITY,
rawdata clob  );


insert into clobdata_or(rawdata) values (to_clob('test line 1') || chr(10) || to_clob('test line 2') || chr(10) || to_clob('test line 3') || chr(10));
COMMIT;


SELECT * FROM clobdata_or;
```

Ele exibe a seguinte saída.


|  |  | 
| --- |--- |
| id | dados brutos | 
| 1 | linha de teste 1 linha de teste 2 linha de teste 3 | 

Carregue os dados de origem em uma tabela de preparação do PostgreSQL (`clobdata_pg`) para processamento.

```
SELECT * FROM clobdata_pg;

CREATE TEMP TABLE clobdatatarget (id1 SERIAL,data VARCHAR );

<Run the code in the additional information section.>

SELECT * FROM clobdatatarget;
```

Ele exibe a seguinte saída.


|  |  | 
| --- |--- |
| id1 | dados | 
| 1 | linha de teste 1 | 
| 2 | linha de teste 2 | 
| 3 | linha de teste 3 | 