本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 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 資料庫
目標技術堆疊
Aurora Postgre SQL- 相容
或 Amazon RDS for PostgreSQL AWS SCT
遷移架構
工具
AWS 服務
AWS Schema Conversion Tool (AWS SCT) 透過自動將來源資料庫結構描述和大部分自訂程式碼轉換為與目標資料庫相容的格式,支援異質資料庫遷移。
Amazon Aurora Postgre SQL-Compatible Edition 是完全受管且ACID合規的關聯式資料庫引擎,可協助您設定、操作和擴展 PostgreSQL 部署。
Postgre 的 Amazon Relational Database Service (Amazon RDS)SQL 可協助您在 AWS Cloud 中設定、操作和擴展 PostgreSQL 關聯式資料庫。
其他工具
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 產生的 | DBA、開發人員 |
測試轉換。 | 將 | 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()