

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 os pacotes de pragma Oracle SERIALLY\$1REUSABLE para o PostgreSQL
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql"></a>

*Vinay Paladi, Amazon Web Services*

## Resumo
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-summary"></a>

Esse padrão fornece uma step-by-step abordagem para migrar pacotes Oracle definidos como pragma SERIALLY\$1REUSABLE para o PostgreSQL na Amazon Web Services (AWS). Essa abordagem mantém a funcionalidade do pragma SERIALLY\$1REUSABLE.

O PostgreSQL não suporta o conceito de pacotes e o pragma SERIALLY\$1REUSABLE. Para obter uma funcionalidade semelhante no PostgreSQL, você pode criar esquemas para pacotes e implantar todos os objetos relacionados (como funções, procedimentos e tipos) dentro dos esquemas. Para aplicar essas variáveis, o exemplo de script de função wrapper fornecido nesse padrão usa um [pacote de extensão do AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html).

Para obter mais informações, consulte o [Pragma SERIALLY\$1REUSABLE](https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems046.htm) na documentação da Oracle.

## Pré-requisitos e limitações
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ A versão mais recente do AWS SCT e os drivers necessários
+ Um banco de dados Amazon Aurora Edição Compatível com PostgreSQL ou Amazon Relational Database Service (Amazon RDS) para banco de dados PostgreSQL 

**Versões do produto**
+ Banco de dados Oracle versão 10g e posterior

## Arquitetura
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-architecture"></a>

**Pilha de tecnologia de origem**
+ Banco de dados Oracle on-premises

**Pilha de tecnologias de destino**
+ [Compatível com Aurora PostgreSQL ou Amazon RDS para PostgreSQL](https://aws.amazon.com/rds/aurora/details/postgresql-details/)
+ AWS SCT

**Arquitetura de migração**

![\[Dados do banco de dados da Oracle on-premises são migrados para a AWS usando o AWS SCT, os arquivos .sql e a conversão manual para PostgreSQL.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/fe3c45d2-6ea4-43b5-adb1-18f068f126b9/images/2dc90708-e300-4251-9d12-de97b6588b72.png)


## Ferramentas
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-tools"></a>

**Serviços da AWS**
+ O [AWS Schema Conversion Tool (AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)) oferece suporte a migrações heterogêneas de bancos de dados convertendo automaticamente o esquema do banco de dados de origem e a maior parte do código personalizado em um formato compatível com o banco de dados de destino.
+ 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.

**Outras ferramentas**
+ 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.

## Épicos
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-epics"></a>

### Migrar o pacote Oracle usando o AWS SCT
<a name="migrate-the-oracle-package-by-using-aws-sct"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configurar o AWS SCT. | Configurar a conectividade do AWS SCT com o banco de dados de origem. Para obter mais informações, consulte [Uso de banco de dados Oracle como origem para o AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html). | DBA, Desenvolvedor | 
| Converter o script. | Use o AWS SCT para converter o pacote Oracle selecionando o banco de dados de destino como compatível com o Aurora PostgreSQL. | DBA, Desenvolvedor | 
| Salve os arquivos .sql. | Antes de salvar o arquivo .sql, modifique a opção **Configurações do projeto** no AWS SCT para **Arquivo único por estágio**. O AWS SCT deverá separar o arquivo .sql em vários arquivos .sql com base no tipo de objeto. | DBA, Desenvolvedor | 
| Alterar o código. | Abra a função `init` gerada pelo AWS SCT e altere-a conforme mostrado no exemplo na seção *Informações adicionais*. Ele adicionará uma variável para obter a funcionalidade `pg_serialize = 0`. | DBA, Desenvolvedor | 
| Teste a conversão. | Implante a função `init` no banco de dados compatível com PostgreSQL do Aurora e teste os resultados. | DBA, Desenvolvedor | 

## Recursos relacionados
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-resources"></a>
+ [AWS Schema Conversion Tool](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Características do Amazon Aurora](https://aws.amazon.com/rds/aurora/postgresql-features/)
+ [Pragma SERIALLY\$1REUSABLE](https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/seriallyreusable_pragma.htm#LNPLS01346)

## Mais informações
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-additional"></a>

```
Source Oracle Code:

CREATE OR REPLACE PACKAGE test_pkg_var
IS
PRAGMA SERIALLY_REUSABLE;
PROCEDURE function_1
 (test_id number);
PROCEDURE function_2
 (test_id number
 );
END;

CREATE OR REPLACE PACKAGE BODY test_pkg_var
IS
PRAGMA SERIALLY_REUSABLE;
v_char VARCHAR2(20) := 'shared.airline';
v_num number := 123;

PROCEDURE function_1(test_id number)
IS
begin
dbms_output.put_line( 'v_char-'|| v_char);
dbms_output.put_line( 'v_num-'||v_num);
v_char:='test1';
function_2(0);
END;

PROCEDURE function_2(test_id number)
is
begin
dbms_output.put_line( 'v_char-'|| v_char);
dbms_output.put_line( 'v_num-'||v_num);
END;
END test_pkg_var;

Calling the above functions

set serveroutput on


EXEC test_pkg_var.function_1(1);


EXEC test_pkg_var.function_2(1);


Target Postgresql Code:


CREATE SCHEMA test_pkg_var;

CREATE OR REPLACE FUNCTION test_pkg_var.init(pg_serialize IN INTEGER DEFAULT 0)

RETURNS void
AS
$BODY$

DECLARE

BEGIN

if aws_oracle_ext.is_package_initialized( 'test_pkg_var' ) AND pg_serialize = 0

then

return;

end if;

PERFORM aws_oracle_ext.set_package_initialized( 'test_pkg_var' );

PERFORM aws_oracle_ext.set_package_variable( 'test_pkg_var', 'v_char', 'shared.airline.basecurrency'::CHARACTER

VARYING(100));

PERFORM aws_oracle_ext.set_package_variable('test_pkg_var', 'v_num', 123::integer);

END;

$BODY$

LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_pkg_var.function_1(pg_serialize int default 1)

RETURNS void
AS

$BODY$
DECLARE

BEGIN

PERFORM test_pkg_var.init(pg_serialize);

raise notice 'v_char%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_char');

raise notice 'v_num%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_num');

PERFORM aws_oracle_ext.set_package_variable( 'test_pkg_var', 'v_char', 'test1'::varchar);

PERFORM test_pkg_var.function_2(0);
END;

$BODY$
LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_pkg_var.function_2(IN pg_serialize integer default 1)

RETURNS void

AS

$BODY$

DECLARE

BEGIN

PERFORM test_pkg_var.init(pg_serialize);

raise notice 'v_char%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_char');

raise notice 'v_num%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_num');

END;
$BODY$
LANGUAGE plpgsql;


Calling the above functions

select test_pkg_var.function_1()

 select test_pkg_var.function_2()
```