本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 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 数据库
目标技术堆栈
Aurora Postgre SQL-兼容 Postgre 或适用于
亚马RDS逊 Post SQL AWS SCT
迁移架构
工具
AWS服务
AWSSchema Conversion Tool (AWSSCT) 通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式来支持异构数据库迁移。
Amazon Aurora Postgre SQL 兼容版是一款完全托管、ACID兼容的关系数据库引擎,可帮助您设置、操作和扩展 Postgre 部署。SQL
适用于 Postgre 的亚马逊关系数据库服务(亚马逊RDS)SQL可帮助您在云中设置、操作和扩展 Postgre SQL 关系数据库。AWS
其他工具
pgAdmin
是 Postgre SQL 的开源管理工具。它提供了一个图形界面,可帮助您创建、维护和使用数据库对象。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
设置AWSSCT。 | 配置与源数据库的AWSSCT连接。有关更多信息,请参阅使用 Oracle 数据库作为来源AWSSCT。 | DBA,开发者 |
转换脚本。 | 通过选择目标数据库作AWSSCT为 Aurora Postgre SQL-Compatible,用于转换 Oracle 软件包。 | DBA,开发者 |
保存 .sql 文件。 | 在保存.sql 文件之前,请将 “项目设置” 选项修改AWSSCT为 “每阶段单个文件”。AWSSCT会根据对象类型将.sql 文件分成多个.sql 文件。 | DBA,开发者 |
更改代码。 | 打开生成的 | 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()