Migrasikan paket pragma Oracle SERIALLY_REUSABLE ke PostgreSQL - AWS Prescriptive Guidance

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_REUSABLE ke PostgreSQL

Vinay Paladi, Amazon Web Services

Ringkasan

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

PostgreSQL tidak mendukung konsep paket dan pragma SERIALLY_REUSABLE. 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_REUSABLE, contoh skrip fungsi pembungkus yang disediakan dalam pola ini menggunakan paket ekstensi AWS Schema Conversion Tool (AWS SCT).

Untuk informasi selengkapnya, lihat SERIALLY_REUSABLE Pragma dalam dokumentasi Oracle.

Prasyarat dan batasan

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

Tumpukan teknologi sumber

  • Database Oracle di tempat

Tumpukan teknologi target

Arsitektur migrasi

Data Oracle DB lokal menuju AWS menggunakan AWS SCT, file.sql, konversi manual, ke PostgreSQL.

Alat

Layanan AWS

Alat-alat lainnya

  • pgAdmin adalah alat manajemen sumber terbuka untuk PostgreSQL. Ini menyediakan antarmuka grafis yang membantu Anda membuat, memelihara, dan menggunakan objek database.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan AWS SCT.

Konfigurasikan konektivitas AWS SCT ke database sumber. Untuk informasi selengkapnya, lihat Menggunakan Oracle Database sebagai sumber AWS SCT.

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 fungsionalitaspg_serialize = 0.

DBA, Pengembang

Uji konversi.

Menyebarkan init fungsi ke database yang kompatibel dengan Aurora PostgreSQL, dan uji hasilnya.

DBA, Pengembang

Sumber daya terkait

Informasi tambahan

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()