

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Migrer les packages pragma Oracle SERIALLY\$1REUSERABLE vers PostgreSQL
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql"></a>

*Vinay Paladi, Amazon Web Services*

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

Ce modèle fournit une step-by-step approche pour la migration des packages Oracle définis comme le pragma SERIALLY\$1REUSIBLE vers PostgreSQL sur Amazon Web Services (AWS). Cette approche conserve les fonctionnalités du pragma SERIALLY\$1REUSERABLE.

PostgreSQL ne supporte pas le concept de packages ni le pragma SERIALLY\$1REUSIBLE. Pour obtenir des fonctionnalités similaires dans PostgreSQL, vous pouvez créer des schémas pour les packages et déployer tous les objets associés (tels que les fonctions, les procédures et les types) dans les schémas. Pour bénéficier des fonctionnalités du pragma SERIALLY\$1REUSERABLE, l'exemple de script de fonction wrapper fourni dans ce modèle utilise un pack d'extension AWS Schema [Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html).

Pour plus d'informations, consultez [SERIALLY\$1REUSERABLE Pragma](https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems046.htm) dans la documentation Oracle.

## Conditions préalables et limitations
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ La dernière version d'AWS SCT et les pilotes requis
+ Une base de données Amazon Aurora PostgreSQL Edition compatible ou une base de données Amazon Relational Database Service (Amazon RDS) pour PostgreSQL 

**Versions du produit**
+ Oracle Database version 10g et versions ultérieures

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

**Pile technologique source**
+ Base de données Oracle sur site

**Pile technologique cible**
+ [Compatible avec Aurora PostgreSQL ou Amazon RDS](https://aws.amazon.com/rds/aurora/details/postgresql-details/) pour PostgreSQL
+ AWS SCT

**Architecture de migration**

![\[Données de base de données Oracle sur site envoyées à AWS à l'aide d'AWS SCT, de fichiers .sql, conversion manuelle, vers PostgreSQL.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/fe3c45d2-6ea4-43b5-adb1-18f068f126b9/images/2dc90708-e300-4251-9d12-de97b6588b72.png)


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

**Services AWS**
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) prend en charge les migrations de bases de données hétérogènes en convertissant automatiquement le schéma de base de données source et la majorité du code personnalisé dans un format compatible avec la base de données cible.
+ [Amazon Aurora PostgreSQL Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) est un moteur de base de données relationnelle entièrement géré et compatible ACID qui vous aide à configurer, exploiter et dimensionner les déploiements PostgreSQL.
+ [Amazon Relational Database Service (Amazon RDS) pour PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) vous aide à configurer, exploiter et dimensionner une base de données relationnelle PostgreSQL dans le cloud AWS.

**Autres outils**
+ [pgAdmin](https://www.pgadmin.org/) est un outil de gestion open source pour PostgreSQL. Il fournit une interface graphique qui vous permet de créer, de gérer et d'utiliser des objets de base de données.

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

### Migrer le package Oracle à l'aide d'AWS SCT
<a name="migrate-the-oracle-package-by-using-aws-sct"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez AWS SCT. | Configurez la connectivité AWS SCT à la base de données source. Pour plus d'informations, consultez la section [Utilisation de la base de données Oracle comme source pour AWS SCT.](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html) | DBA, Développeur | 
| Convertissez le script. | Utilisez AWS SCT pour convertir le package Oracle en sélectionnant la base de données cible compatible avec Aurora PostgreSQL. | DBA, Développeur | 
| Enregistrez les fichiers .sql. | Avant d'enregistrer le fichier .sql, modifiez l'option **Paramètres du projet** dans AWS SCT sur **Fichier unique par étape.** AWS SCT séparera le fichier .sql en plusieurs fichiers .sql en fonction du type d'objet. | DBA, Développeur | 
| Changez le code. | Ouvrez la `init` fonction générée par AWS SCT et modifiez-la comme indiqué dans l'exemple de la section *Informations supplémentaires*. Il ajoutera une variable pour obtenir la fonctionnalité`pg_serialize = 0`. | DBA, Développeur | 
| Testez la conversion. | Déployez la `init` fonction sur la base de données compatible Aurora PostgreSQL et testez les résultats. | DBA, Développeur | 

## Ressources connexes
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-resources"></a>
+ [Outil de conversion de schéma AWS](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Fonctionnalités d'Amazon Aurora](https://aws.amazon.com/rds/aurora/postgresql-features/)
+ [PRAGMA RÉUTILISABLE EN SÉRIE](https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/seriallyreusable_pragma.htm#LNPLS01346)

## Informations supplémentaires
<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()
```