将 Oracle SERIALLY _ REUSABLE 编译指示包迁移到 Postgre SQL - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Oracle SERIALLY _ REUSABLE 编译指示包迁移到 Postgre SQL

由 Vinay Paladi 创作 () AWS

环境:PoC 或试点

源:Oracle 数据库

目标:Postgre SQL

R 类型:重构

工作负载:Oracle;开源

技术:迁移;数据库

AWS服务:AWSSCT; 亚马逊 Aurora

Summary

这种模式提供了 step-by-step一种将定义为 SERIALLY _ REUSABLE pragma 的 Oracle 包迁移到 Amazon Web Services SQL 上的 Postgre 的方法 () AWS。这种方法保持了 SERIALLY _ REUSABLE pragma 的功能。

Postgre SQL 不支持软件包的概念和 SERIALLY _ REUSABLE pragma。要在 Postgre 中获得类似的功能SQL,您可以为包创建架构,并在架构中部署所有相关对象(例如函数、过程和类型)。为了实现 SERIALLY _ REUSABLE pragma 的功能,此模式中提供的示例包装函数脚本使用了 S AWSchema Conversion Tool (AWSSCT) 扩展包。

有关更多信息,请参阅 Oracle 文档中的 SERIALLY_ REUSABLE Pragma

先决条件和限制

先决条件

  • 一个活跃的AWS账户

  • 的最新版本AWSSCT和所需的驱动程序

  • 亚马逊 Aurora Postgre SQL 兼容版数据库或适用于 Postgre 数据库的亚马逊关系数据库服务RDS(亚马逊)SQL

产品版本

  • Oracle 数据库版本 10g 及更高版本

架构

源技术堆栈

  • 本地 Oracle 数据库

目标技术堆栈

迁移架构

要AWS使用的本地 Oracle 数据库数据AWSSCT、.sql 文件、手动转换为 Post SQL gre。

工具

AWS服务

其他工具

  • pgAdmin是 Postgre SQL 的开源管理工具。它提供了一个图形界面,可帮助您创建、维护和使用数据库对象。

操作说明

任务描述所需技能

设置AWSSCT。

配置与源数据库的AWSSCT连接。有关更多信息,请参阅使用 Oracle 数据库作为来源AWSSCT

DBA,开发者

转换脚本。

通过选择目标数据库作AWSSCT为 Aurora Postgre SQL-Compatible,用于转换 Oracle 软件包。

DBA,开发者

保存 .sql 文件。

在保存.sql 文件之前,请将 “项目设置” 选项修改AWSSCT为 “每阶段单个文件”。AWSSCT会根据对象类型将.sql 文件分成多个.sql 文件。

DBA,开发者

更改代码。

打开生成的init函数 AWSSCT,然后按照 “其他信息” 部分的示例所示对其进行更改。它将添加一个变量来实现 pg_serialize = 0 功能。

DBA,开发者

测试转换。

将该init函数部署到SQL兼容 Aurora Postgre 的数据库,然后测试结果。

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