將 Oracle SERIALLY_REUSABLE pragma 套件遷移至 PostgreSQL - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 Oracle SERIALLY_REUSABLE pragma 套件遷移至 PostgreSQL

由 Vinay Paladi 建立 (AWS)

環境:PoC 或試行

來源:Oracle 資料庫

目標:PostgreSQL

R 類型:重新架構

工作負載:Oracle;開放原始碼

技術:遷移;資料庫

AWS 服務:AWSSCT;Amazon Aurora

Summary

此模式提供將 step-by-step定義為 SERIALLY_REUSABLE pragma 的 Oracle 套件遷移至 Amazon Web Services () 上的 PostgreSQL 的方法AWS。此方法會維護 SERIALLY_REUSABLE pragma 的功能。

PostgreSQL 不支援套件和 SERIALLY_REUSABLE pragma 的概念。若要在 Postgre 中取得類似的功能SQL,您可以建立套件的結構描述,並在結構描述內部署所有相關物件 (例如函數、程序和類型)。為了實現 SERIALLY_REUSABLE pragma 的功能,此模式中提供的範例包裝函式指令碼使用AWSSchema Conversion Tool (AWS SCT) 延伸套件

如需詳細資訊,請參閱 Oracle 文件中的 SERIALLY_REUSABLE Pragma

先決條件和限制

先決條件

  • 作用中AWS帳戶

  • 的最新版本AWSSCT和必要的驅動程式

  • Amazon Aurora Postgre SQL-Compatible Edition 資料庫或 PostgreSQL 資料庫的 Amazon Relational Database Service (Amazon RDS)

產品版本

  • Oracle 資料庫 10g 版及更新版本

架構

來源技術堆疊

  • 內部部署的 Oracle 資料庫

目標技術堆疊

遷移架構

AWS 使用 SCT、.sql 檔案、手動轉換至 Postgre AWS 的內部部署 Oracle 資料庫資料SQL。

工具

AWS 服務

其他工具

  • pgAdmin 是 Postgre 的開放原始碼管理工具SQL。它提供圖形界面,可協助您建立、維護和使用資料庫物件。

史詩

任務描述所需的技能

設定 AWS SCT。

設定來源資料庫的AWSSCT連線。如需詳細資訊,請參閱使用 Oracle 資料庫作為 AWS 的來源SCT

DBA、開發人員

轉換指令碼。

使用 AWSSCT將目標資料庫選取為 Aurora Postgre SQL-Compatible,以轉換 Oracle 套件。

DBA、開發人員

儲存 .sql 檔案。

在儲存 .sql 檔案之前,請將 中的專案設定選項修改AWSSCT為每個階段的單一檔案。AWS SCT 會根據物件類型,將 .sql 檔案分隔為多個 .sql 檔案。

DBA、開發人員

變更程式碼。

開啟 AWS 產生的init函數SCT,並如其他資訊區段中的範例所示進行變更。它會新增變數來實現功能 pg_serialize = 0

DBA、開發人員

測試轉換。

init函數部署至 Aurora Postgre SQL- 相容資料庫,然後測試結果。

DBA、開發人員

相關資源

其他資訊

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