

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Migrasikan paket pragma Oracle SERIALLY\$1REUSABLE ke PostgreSQL
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql"></a>

*Vinay Paladi, Amazon Web Services*

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

Pola ini menyediakan step-by-step pendekatan untuk memigrasikan paket Oracle yang didefinisikan sebagai SERIALLY\$1REUSABLE pragma ke PostgreSQL di Amazon Web Services (AWS). Pendekatan ini mempertahankan fungsionalitas pragma SERIALLY\$1REUSABLE.

PostgreSQL tidak mendukung konsep paket dan pragma SERIALLY\$1REUSABLE. Untuk mendapatkan fungsionalitas serupa di PostgreSQL, Anda dapat membuat skema untuk paket dan menyebarkan semua objek terkait (seperti fungsi, prosedur, dan tipe) di dalam skema. Untuk mencapai fungsionalitas pragma SERIALLY\$1REUSABLE, contoh skrip fungsi pembungkus yang disediakan dalam pola ini menggunakan paket ekstensi AWS [Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html) (AWS SCT).

Untuk informasi selengkapnya, lihat [SERIALLY\$1REUSABLE Pragma](https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems046.htm) dalam dokumentasi Oracle.

## Prasyarat dan batasan
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ Versi terbaru AWS SCT dan driver yang diperlukan
+ Database Edisi yang kompatibel dengan Amazon Aurora PostgreSQL atau Amazon Relational Database Service (Amazon RDS) untuk database PostgreSQL 

**Versi produk**
+ Oracle Database versi 10g dan yang lebih baru

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

**Tumpukan teknologi sumber**
+ Database Oracle di tempat

**Tumpukan teknologi target**
+ [Aurora PostgreSQL kompatibel atau Amazon RDS untuk PostgreSQL](https://aws.amazon.com/rds/aurora/details/postgresql-details/)
+ AWS SCT

**Arsitektur migrasi**

![\[Data Oracle DB lokal menuju AWS menggunakan AWS SCT, file.sql, konversi manual, ke PostgreSQL.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/fe3c45d2-6ea4-43b5-adb1-18f068f126b9/images/2dc90708-e300-4251-9d12-de97b6588b72.png)


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

**Layanan AWS**
+ [AWS Schema Conversion Tool (AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)) mendukung migrasi database heterogen dengan secara otomatis mengonversi skema basis data sumber dan sebagian besar kode kustom ke format yang kompatibel dengan database target.
+ [Amazon Aurora PostgreSQL Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) adalah mesin database relasional yang dikelola sepenuhnya dan sesuai dengan ACID yang membantu Anda mengatur, mengoperasikan, dan menskalakan penerapan PostgreSQL.
+ [Amazon Relational Database Service (Amazon RDS) untuk PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) membantu Anda mengatur, mengoperasikan, dan menskalakan database relasional PostgreSQL di AWS Cloud.

**Alat-alat lainnya**
+ [pgAdmin](https://www.pgadmin.org/) adalah alat manajemen sumber terbuka untuk PostgreSQL. Ini menyediakan antarmuka grafis yang membantu Anda membuat, memelihara, dan menggunakan objek database.

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

### Migrasikan paket Oracle dengan menggunakan AWS SCT
<a name="migrate-the-oracle-package-by-using-aws-sct"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan AWS SCT. | Konfigurasikan konektivitas AWS SCT ke database sumber. Untuk informasi selengkapnya, lihat [Menggunakan Oracle Database sebagai sumber AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html). | DBA, Pengembang | 
| Konversi skrip. | Gunakan AWS SCT untuk mengonversi paket Oracle dengan memilih database target sebagai Aurora PostgreSQL kompatibel. | DBA, Pengembang | 
| Simpan file.sql. | Sebelum Anda menyimpan file.sql, ubah opsi **Pengaturan Proyek** di AWS SCT ke **File tunggal per tahap**. AWS SCT akan memisahkan file.sql menjadi beberapa file.sql berdasarkan jenis objek. | DBA, Pengembang | 
| Ubah kodenya. | Buka `init` fungsi yang dihasilkan oleh AWS SCT, dan ubah seperti yang ditunjukkan pada contoh di bagian *Informasi tambahan*. Ini akan menambahkan variabel untuk mencapai fungsionalitas`pg_serialize = 0`. | DBA, Pengembang | 
| Uji konversi. | Menyebarkan `init` fungsi ke database yang kompatibel dengan Aurora PostgreSQL, dan uji hasilnya. | DBA, Pengembang | 

## Sumber daya terkait
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-resources"></a>
+ [Alat Konversi Skema AWS](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Fitur 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)

## Informasi tambahan
<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()
```