As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Migrar os pacotes de pragma Oracle SERIALLY_REUSABLE para o PostgreSQL
Criado por Vinay Paladi (AWS)
Resumo
Esse padrão fornece uma step-by-step abordagem para migrar pacotes Oracle definidos como pragma SERIALLY_REUSABLE para o PostgreSQL na Amazon Web Services (AWS). Essa abordagem mantém a funcionalidade do pragma SERIALLY_REUSABLE.
O PostgreSQL não suporta o conceito de pacotes e o pragma SERIALLY_REUSABLE. Para obter uma funcionalidade semelhante no PostgreSQL, você pode criar esquemas para pacotes e implantar todos os objetos relacionados (como funções, procedimentos e tipos) dentro dos esquemas. Para aplicar essas variáveis, o exemplo de script de função wrapper fornecido nesse padrão usa um pacote de extensão do AWS Schema Conversion Tool (AWS SCT).
Para obter mais informações, consulte o Pragma SERIALLY_REUSABLE
Pré-requisitos e limitações
Pré-requisitos
Uma conta AWS ativa
A versão mais recente do AWS SCT e os drivers necessários
Um banco de dados Amazon Aurora Edição Compatível com PostgreSQL ou Amazon Relational Database Service (Amazon RDS) para banco de dados PostgreSQL
Versões do produto
Banco de dados Oracle versão 10g e posterior
Arquitetura
Pilha de tecnologia de origem
Banco de dados Oracle on-premises
Pilha de tecnologias de destino
Arquitetura de migração

Ferramentas
Serviços da AWS
O AWS Schema Conversion Tool (AWS SCT) oferece suporte a migrações heterogêneas de bancos de dados convertendo automaticamente o esquema do banco de dados de origem e a maior parte do código personalizado em um formato compatível com o banco de dados de destino.
O Amazon Aurora Edição Compatível com PostgreSQL é um mecanismo de banco de dados relacional totalmente gerenciado e em conformidade com ACID que ajuda você a configurar, operar e escalar as implantações de PostgreSQL.
O Amazon Relational Database Service (Amazon RDS) para PostgreSQL ajuda você a configurar, operar e escalar um banco de dados relacional PostgreSQL na Nuvem AWS.
Outras ferramentas
O pgAdmin
é uma ferramenta de gerenciamento de código aberto para PostgreSQL. Ele fornece uma interface gráfica que ajuda você a criar, manter e usar objetos de banco de dados.
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Configurar o AWS SCT. | Configurar a conectividade do AWS SCT com o banco de dados de origem. Para obter mais informações, consulte Uso de banco de dados Oracle como origem para o AWS SCT. | DBA, Desenvolvedor |
Converter o script. | Use o AWS SCT para converter o pacote Oracle selecionando o banco de dados de destino como compatível com o Aurora PostgreSQL. | DBA, Desenvolvedor |
Salve os arquivos .sql. | Antes de salvar o arquivo .sql, modifique a opção Configurações do projeto no AWS SCT para Arquivo único por estágio. O AWS SCT deverá separar o arquivo .sql em vários arquivos .sql com base no tipo de objeto. | DBA, Desenvolvedor |
Alterar o código. | Abra a função | DBA, Desenvolvedor |
Teste a conversão. | Implante a função | DBA, Desenvolvedor |
Recursos relacionados
Mais informações
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()