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á.
Migre pacotes Oracle SERIALLY_REUSABLE Pragma para o Amazon Aurora ou o Amazon RDS for PostgreSQL
Vinay Paladi, Amazon Web Services
Resumo
Esse padrão fornece uma abordagem passo a passo para migrar pacotes Oracle que usam o PRAGMA SERIALLY_REUSABLE para o Amazon Aurora Edition PostgreSQL-Compatible ou o Amazon RDS for PostgreSQL ativado, mantendo a funcionalidade original. AWS
O PRAGMA SERIALLY_REUSABLE indica que o estado do pacote é necessário somente durante uma chamada ao servidor (por exemplo, um bloco PL/SQL anônimo ou uma chamada de procedimento armazenado por meio de um link de banco de dados). Após essa chamada, o armazenamento das variáveis do pacote pode ser reutilizado, reduzindo o consumo de memória.
O PostgreSQL não oferece suporte nativo ao conceito do pragma SERIALLY_REUSABLE. Para obter uma funcionalidade equivalente, esse padrão usa uma abordagem de função wrapper combinada com o recurso AWS Database Migration Service (AWS DMS) Schema Conversion (AWS DMS SC) para migrar a estrutura do pacote. O script de exemplo fornecido demonstra como preservar o comportamento de redefinição em cada chamada no PostgreSQL.
Para obter mais informações, consulte o Pragma SERIALLY_REUSABLE
Pré-requisitos e limitações
Um ativo Conta da AWS
Acesso ao serviço de conversão de AWS DMS esquema
Um banco de dados Amazon Aurora PostgreSQL-Compatible Edition ou um banco de dados Amazon RDS for PostgreSQL
Banco de dados Oracle versão 10g ou posterior
Arquitetura
Pilha de tecnologia de origem
On-premises Banco de dados Oracle
Pilha de tecnologias de destino
Aurora PostgreSQL-Compatible
ou Amazon RDS para Amazon RDS for PostgreSQL AWS DMS Conversão de esquema
Arquitetura de migração

Ferramentas
Serviços da AWS
AWS Database Migration Service (AWS DMS) A conversão de esquema torna as migrações de banco de dados entre diferentes tipos de bancos de dados mais previsíveis. Use-o para avaliar a complexidade de sua migração para seu provedor de dados de origem e para converter esquemas de banco de dados e objetos de código. É possível aplicar o código convertido ao banco de dados de destino.
O Amazon Aurora PostgreSQL-Compatible Edition é um mecanismo de banco de dados ACID-compliant relacional totalmente gerenciado que ajuda você a configurar, operar e escalar implantações do PostgreSQL.
O Amazon Relational Database Service (Amazon RDS) para PostgreSQL ajuda você a configurar, operar e escalar um banco de dados relacional do 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.
Práticas recomendadas
Sempre use
reset_vars = 1para chamadas de nível superior ereset_vars = 0para subchamadas internas.Mantenha todos os valores padrão na
$initfunção como uma única fonte confiável.Combine os nomes das variáveis Oracle no PostgreSQL para rastreabilidade.
Valide comparando o Oracle
DBMS_OUTPUTcom a saída do PostgreSQLRAISE NOTICE.Teste em sessões separadas do PostgreSQL para confirmar a redefinição das variáveis entre as chamadas.
Épicos
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Configure o AWS DMS SC. | Configure a AWS DMS conectividade com o banco de dados de origem. Para obter mais informações, consulte Conversão de esquemas de banco de dados usando a conversão de esquema DMS. | DBA, Desenvolvedor |
Converter o script. | Use o AWS DMS SC para converter o pacote Oracle selecionando o banco de dados de destino como Aurora PostgreSQL-Compatible. | DBA, Desenvolvedor |
Salve os arquivos .sql. | Antes de salvar o arquivo.sql, modifique a opção Configurações do projeto no AWS DMS SC para Arquivo único por estágio. Isso configura AWS DMS a separação do arquivo.sql em vários arquivos.sql com base no tipo de objeto. | DBA, Desenvolvedor |
Alterar o código. | Abra a | DBA, Desenvolvedor |
Teste a conversão. | Implante a | DBA, Desenvolvedor |
Solução de problemas
| Problema | Solução |
|---|---|
Erro de campo não existe ao acessar variáveis do pacote. | Certifique-se de que a condição da |
Variáveis que não são redefinidas entre chamadas de nível superior ou são redefinidas inesperadamente durante subchamadas internas. | Use |
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) := 'DEFAULT_VALUE'; v_num NUMBER := 123; PROCEDURE function_2(test_id NUMBER) IS BEGIN dbms_output.put_line('function_2 => v_char=' || v_char || ', v_num=' || v_num); END; PROCEDURE function_1(test_id NUMBER) IS BEGIN dbms_output.put_line('function_1 => v_char=' || v_char || ', v_num=' || v_num); v_char := 'MODIFIED_VALUE'; dbms_output.put_line('function_1 => v_char after update=' || v_char); function_2(0); END; END test_pkg_var; / SET SERVEROUTPUT ON EXEC test_pkg_var.function_1(1); EXEC test_pkg_var.function_2(1); ------Target PostgreSQL Code: CREATE SCHEMA IF NOT EXISTS testoracle; CREATE OR REPLACE FUNCTION testoracle.test_pkg_var$init(reset_vars IN INTEGER DEFAULT 0) RETURNS void AS $BODY$ DECLARE v_need_init BOOLEAN; BEGIN v_need_init := aws_oracle_ext.packageinitialize(proutinename => 'testoracle.test_pkg_var'); IF v_need_init OR reset_vars = 1 THEN PERFORM aws_oracle_ext.setglobalvariable(proutinename => 'testoracle.test_pkg_var', pvariable => 'v_char', pval => 'DEFAULT_VALUE'::CHARACTER VARYING(20)); PERFORM aws_oracle_ext.setglobalvariable(proutinename => 'testoracle.test_pkg_var', pvariable => 'v_num', pval => 123); END IF; END; $BODY$ LANGUAGE plpgsql; CREATE OR REPLACE PROCEDURE testoracle.test_pkg_var$function_1(reset_vars INT DEFAULT 1) AS $BODY$ BEGIN PERFORM testoracle.test_pkg_var$init(reset_vars); RAISE NOTICE 'function_1 => v_char=%, v_num=%', aws_oracle_ext.getglobalvariable(proutinename => 'testoracle.test_pkg_var', pvariable => 'v_char', ptp => NULL::CHARACTER VARYING(20)), aws_oracle_ext.getglobalvariable(proutinename => 'testoracle.test_pkg_var', pvariable => 'v_num', ptp => NULL::DOUBLE PRECISION); PERFORM aws_oracle_ext.setglobalvariable(proutinename => 'testoracle.test_pkg_var', pvariable => 'v_char', pval => 'MODIFIED_VALUE'::CHARACTER VARYING(20)); RAISE NOTICE 'function_1 => v_char after update=%', aws_oracle_ext.getglobalvariable(proutinename => 'testoracle.test_pkg_var', pvariable => 'v_char', ptp => NULL::CHARACTER VARYING(20)); CALL testoracle.test_pkg_var$function_2(0); END; $BODY$ LANGUAGE plpgsql; CREATE OR REPLACE PROCEDURE testoracle.test_pkg_var$function_2(reset_vars INT DEFAULT 1) AS $BODY$ BEGIN PERFORM testoracle.test_pkg_var$init(reset_vars); RAISE NOTICE 'function_2 => v_char=%, v_num=%', aws_oracle_ext.getglobalvariable(proutinename => 'testoracle.test_pkg_var', pvariable => 'v_char', ptp => NULL::CHARACTER VARYING(20)), aws_oracle_ext.getglobalvariable(proutinename => 'testoracle.test_pkg_var', pvariable => 'v_num', ptp => NULL::DOUBLE PRECISION); END; $BODY$ LANGUAGE plpgsql; CALL testoracle.test_pkg_var$function_1(1); -- loads defaults, sets v_char='MODIFIED_VALUE', function_2 sees 'MODIFIED_VALUE' CALL testoracle.test_pkg_var$function_2(1); -- new transcation: PRAGMA reset, sees 'DEFAULT_VALUE'