

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Migración de los paquetes pragma SERIALLY\$1REUTILIZABLE de Oracle a PostgreSQL
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql"></a>

*Vinay Paladi, Amazon Web Services*

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

Este patrón proporciona un step-by-step enfoque para migrar paquetes de Oracle que se definen como pragma SERIALLY\$1REUTILIZABLE a PostgreSQL en Amazon Web Services (AWS). Este enfoque mantiene la funcionalidad del pragma SERIALLY\$1REUTILIZABLE.

PostgreSQL no admite el concepto de paquetes ni el pragma SERIALLY\$1REUTILIZABLE. Para obtener una funcionalidad similar en PostgreSQL, puede crear esquemas para paquetes e implementar todos los objetos relacionados (como funciones, procedimientos y tipos) dentro de los esquemas. Para lograr la funcionalidad del pragma SERIALLY\$1REUTILIZABLE, el script de función contenedora de ejemplo que se proporciona en este patrón utiliza un paquete de extensiones de [Herramienta de conversión de esquemas de AWS (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html).

Para obtener más información, consulte [SERIALLY\$1REUSABLE Pragma](https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems046.htm) en la documentación de Oracle.

## Requisitos previos y limitaciones
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ La versión más reciente de AWS SCT y los controladores necesarios
+ Una base de datos de Edición compatible con Amazon Aurora PostgreSQL o una Amazon Relational Database Service (Amazon RDS) para PostgreSQL 

**Versiones de producto**
+ Oracle Database versión 10g y posteriores

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

**Pila de tecnología de origen**
+ Oracle Database en las instalaciones

**Pila de tecnología de destino**
+ [Aurora compatible con PostgreSQL](https://aws.amazon.com/rds/aurora/details/postgresql-details/) o Amazon RDS para PostgreSQL
+ AWS SCT

**Arquitectura de migración**

![\[Datos de bases de datos de Oracle en las instalaciones que se transfieren a AWS mediante AWS SCT, archivos .sql o conversión manual a PostgreSQL.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/fe3c45d2-6ea4-43b5-adb1-18f068f126b9/images/2dc90708-e300-4251-9d12-de97b6588b72.png)


## Tools (Herramientas)
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-tools"></a>

**Servicios de AWS**
+ La [Herramienta de conversión de esquemas de AWS (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) simplifica las migraciones de bases de datos heterogéneas al convertir automáticamente el esquema de la base de datos de origen y la mayor parte del código personalizado, lo que incluye las vistas, los procedimientos almacenados y las funciones, a un formato compatible con la base de datos de destino.
+ La [edición de Amazon Aurora compatible con PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) es un motor de base de datos relacional compatible con ACID, completamente administrado que le permite configurar, utilizar y escalar implementaciones de PostgreSQL.
+ [Amazon Relational Database Service (Amazon RDS) para PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) le ayuda a configurar, utilizar y escalar una base de datos relacional de PostgreSQL en la nube de AWS.

**Otras herramientas**
+ [pgAdmin](https://www.pgadmin.org/) es una herramienta de gestión de código abierto para PostgreSQL. Proporciona una interfaz gráfica que permite crear, mantener y utilizar objetos de bases de datos.

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

### Migración del paquete de Oracle mediante AWS SCT
<a name="migrate-the-oracle-package-by-using-aws-sct"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure AWS SCT. | Configure la conectividad de AWS SCT con la base de datos de origen. Para obtener más información, consulte [Uso de una base de datos de Oracle como origen para AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html). | Administrador de base de datos, desarrollador | 
| Convierta el script.  | Utilice AWS SCT para convertir el paquete de Oracle seleccionando la base de datos de destino como compatible con Aurora PostgreSQL. | Administrador de base de datos, desarrollador | 
| Guarde los archivos.sql. | Antes de guardar el archivo.sql, modifique la opción **Configuración del proyecto** en AWS SCT a **Archivo único por etapa**. AWS SCT separará el archivo.sql en varios archivos.sql según el tipo de objeto. | Administrador de base de datos, desarrollador | 
| Cambie el código. | Abra la función `init` generada por AWS SCT y cámbiela como se muestra en el ejemplo de la sección *Información adicional*. Añadirá una variable para lograr la funcionalidad de `pg_serialize = 0`. | Administrador de base de datos, desarrollador | 
| Pruebe la conversión. | Implemente la función `init` en la base de datos compatible con Aurora PostgreSQL y pruebe los resultados. | Administrador de base de datos, desarrollador | 

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

## Información adicional
<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()
```