

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Migrazione dei pacchetti pragma Oracle SERIALLY\_REUSABLE in PostgreSQL
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql"></a>

*Vinay Paladi, Amazon Web Services*

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

Questo modello fornisce un step-by-step approccio per la migrazione dei pacchetti Oracle definiti come pragma SERIALLY\_REUSABLE su PostgreSQL su Amazon Web Services (AWS). Questo approccio mantiene la funzionalità del pragma SERIALLY\_REUSABLE.

PostgreSQL non supporta il concetto di pacchetti e il pragma SERIALLY\_REUSABLE. Per ottenere funzionalità simili in PostgreSQL, puoi creare schemi per pacchetti e distribuire tutti gli oggetti correlati (come funzioni, procedure e tipi) all'interno degli schemi. Per ottenere la funzionalità del pragma SERIALLY\_REUSABLE, lo script di funzione wrapper di esempio fornito in questo modello utilizza un pacchetto di estensione AWS [Schema](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html) Conversion Tool (AWS SCT).

[Per ulteriori informazioni, consulta SERIALLY\_REUSABLE Pragma nella documentazione Oracle.](https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems046.htm)

## Prerequisiti e limitazioni
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ La versione più recente di AWS SCT e i driver richiesti
+ Un database Amazon Aurora compatibile con PostgreSQL Edition o un database Amazon Relational Database Service (Amazon RDS) per PostgreSQL 

**Versioni del prodotto**
+ Database Oracle versione 10g e successive

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

**Stack tecnologico di origine**
+ Database Oracle locale

**Stack tecnologico Target**
+ Compatibile con [Aurora PostgreSQL o Amazon RDS per PostgreSQL](https://aws.amazon.com/rds/aurora/details/postgresql-details/)
+ AWS SCT

**Architettura di migrazione**

![Dati Oracle DB locali che vengono trasferiti in AWS utilizzando AWS SCT, file.sql, conversione manuale in PostgreSQL.](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/fe3c45d2-6ea4-43b5-adb1-18f068f126b9/images/2dc90708-e300-4251-9d12-de97b6588b72.png)


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

**Servizi AWS**
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) supporta migrazioni di database eterogenei convertendo automaticamente lo schema del database di origine e la maggior parte del codice personalizzato in un formato compatibile con il database di destinazione.
+ [Amazon Aurora PostgreSQL Compatible Edition è un motore](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) di database relazionale completamente gestito e conforme ad ACID che ti aiuta a configurare, gestire e scalare le distribuzioni PostgreSQL.
+ [Amazon Relational Database Service (Amazon RDS) per PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) ti aiuta a configurare, gestire e scalare un database relazionale PostgreSQL nel cloud AWS.

**Altri strumenti**
+ [pgAdmin](https://www.pgadmin.org/) è uno strumento di gestione open source per PostgreSQL. Fornisce un'interfaccia grafica che consente di creare, gestire e utilizzare oggetti di database.

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

### Esegui la migrazione del pacchetto Oracle utilizzando AWS SCT
<a name="migrate-the-oracle-package-by-using-aws-sct"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura AWS SCT. | Configura la connettività AWS SCT al database di origine. Per ulteriori informazioni, consulta [Using Oracle Database as a source for AWS SCT.](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html) | DBA, Sviluppatore | 
| Converti lo script. | Usa AWS SCT per convertire il pacchetto Oracle selezionando il database di destinazione come compatibile con Aurora PostgreSQL. | DBA, Sviluppatore | 
| Salva i file.sql. | Prima di salvare il file.sql, modifica l'opzione **Project Settings** in AWS SCT su **File singolo per fase**. AWS SCT separerà il file.sql in più file.sql in base al tipo di oggetto. | DBA, Sviluppatore | 
| Cambia il codice. | Apri la `init` funzione generata da AWS SCT e modificala come mostrato nell'esempio nella sezione *Informazioni aggiuntive*. Aggiungerà una variabile per ottenere la funzionalità. `pg_serialize = 0` | DBA, Sviluppatore | 
| Prova la conversione. | Implementa la `init` funzione nel database Aurora compatibile con PostgreSQL e verifica i risultati. | DBA, Sviluppatore | 

## Risorse correlate
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-resources"></a>
+ [Strumento di conversione dello schema AWS](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Caratteristiche di Amazon Aurora](https://aws.amazon.com/rds/aurora/postgresql-features/)
+ [SERIALLY\_REUSABLE Pragma](https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/seriallyreusable_pragma.htm#LNPLS01346)

## Informazioni aggiuntive
<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()
```