

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Migrieren Sie Oracle SERIALLY\$1REUSABLE Pragma-Pakete nach PostgreSQL
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql"></a>

*Vinay Paladi, Amazon Web Services*

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

Dieses Muster bietet einen step-by-step Ansatz für die Migration von Oracle-Paketen, die als SERIALLY\$1REUSABLE Pragma definiert sind, nach PostgreSQL auf Amazon Web Services (AWS). Bei diesem Ansatz wird die Funktionalität des Pragmas SERIALLY\$1REUSABLE beibehalten.

PostgreSQL unterstützt das Konzept von Paketen und das Pragma SERIALLY\$1REUSABLE nicht. Um ähnliche Funktionen in PostgreSQL zu erhalten, können Sie Schemas für Pakete erstellen und alle zugehörigen Objekte (wie Funktionen, Prozeduren und Typen) innerhalb der Schemas bereitstellen. Um die Funktionalität des Pragmas SERIALLY\$1REUSABLE zu erreichen, verwendet das in diesem Muster bereitgestellte Beispiel-Wrapper-Funktionsskript ein [AWS Schema Conversion Tool (AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)) -Erweiterungspaket.

Weitere Informationen finden Sie unter [SERIALLY\$1REUSABLE](https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems046.htm) Pragma in der Oracle-Dokumentation.

## Voraussetzungen und Einschränkungen
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ Die neueste Version von AWS SCT und die erforderlichen Treiber
+ Eine Amazon Aurora PostgreSQL-kompatible Edition-Datenbank oder ein Amazon Relational Database Service (Amazon RDS) für PostgreSQL-Datenbank 

**Produktversionen**
+ Oracle Database Version 10g und höher

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

**Quelltechnologie-Stack**
+ Oracle-Datenbank vor Ort

**Zieltechnologie-Stack**
+ [Aurora PostgreSQL-kompatibel](https://aws.amazon.com/rds/aurora/details/postgresql-details/) oder Amazon RDS für PostgreSQL
+ AWS SCT

**Migrationsarchitektur**

![\[Lokale Oracle-DB-Daten werden mithilfe von AWS SCT-, .sql-Dateien, manueller Konvertierung nach PostgreSQL an AWS gesendet.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/fe3c45d2-6ea4-43b5-adb1-18f068f126b9/images/2dc90708-e300-4251-9d12-de97b6588b72.png)


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

**AWS-Services**
+ Das [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) unterstützt heterogene Datenbankmigrationen, indem das Quelldatenbankschema und ein Großteil des benutzerdefinierten Codes automatisch in ein Format konvertiert werden, das mit der Zieldatenbank kompatibel ist.
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) ist eine vollständig verwaltete, ACID-konforme relationale Datenbank-Engine, die Sie bei der Einrichtung, dem Betrieb und der Skalierung von PostgreSQL-Bereitstellungen unterstützt.
+ [Amazon Relational Database Service (Amazon RDS) für PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) unterstützt Sie bei der Einrichtung, dem Betrieb und der Skalierung einer relationalen PostgreSQL-Datenbank in der AWS-Cloud.

**Andere Tools**
+ [pgAdmin](https://www.pgadmin.org/) ist ein Open-Source-Verwaltungstool für PostgreSQL. Es bietet eine grafische Oberfläche, mit der Sie Datenbankobjekte erstellen, verwalten und verwenden können.

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

### Migrieren Sie das Oracle-Paket mithilfe von AWS SCT
<a name="migrate-the-oracle-package-by-using-aws-sct"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie AWS SCT ein. | Konfigurieren Sie die AWS SCT-Konnektivität zur Quelldatenbank. Weitere Informationen finden Sie unter [Verwenden von Oracle Database als Quelle für AWS SCT.](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html) | DBA, Entwickler | 
| Konvertiert das Skript. | Verwenden Sie AWS SCT, um das Oracle-Paket zu konvertieren, indem Sie die Zieldatenbank als Aurora PostgreSQL-kompatibel auswählen. | DBA, Entwickler | 
| Speichern Sie die .sql-Dateien. | Bevor Sie die SQL-Datei speichern, ändern Sie die Option **Projekteinstellungen** in AWS SCT auf **Einzelne Datei pro Phase**. AWS SCT teilt die .sql-Datei je nach Objekttyp in mehrere .sql-Dateien auf. | DBA, Entwickler | 
| Ändern Sie den Code. | Öffnen Sie die von AWS SCT generierte `init` Funktion und ändern Sie sie, wie im Beispiel im Abschnitt *Zusätzliche Informationen* gezeigt. Es wird eine Variable hinzugefügt, um die Funktionalität `pg_serialize = 0` zu erreichen. | DBA, Entwickler | 
| Testen Sie die Konvertierung. | Stellen Sie die `init` Funktion in der Aurora PostgreSQL-kompatiblen Datenbank bereit und testen Sie die Ergebnisse. | DBA, Entwickler | 

## Zugehörige Ressourcen
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-resources"></a>
+ [AWS-Schemakonvertierungstool](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Funktionen von Amazon Aurora](https://aws.amazon.com/rds/aurora/postgresql-features/)
+ [SERIALLY\$1REUSABLE Pragma](https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/seriallyreusable_pragma.htm#LNPLS01346)

## Zusätzliche Informationen
<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()
```