Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Migre los paquetes Pragma SERIALLY_REUTILIZABLE de Oracle a Amazon Aurora o Amazon RDS para PostgreSQL
Vinay Paladi, Amazon Web Services
Resumen
Este patrón proporciona un enfoque gradual para migrar paquetes de Oracle que utilizan el Pragma SERIALLY_REUTILIZABLE a Amazon PostgreSQL-Compatible Aurora Edition o Amazon RDS for AWS PostgreSQL, manteniendo la funcionalidad original.
El PRAGMA SERIALLY_REUTILIZABLE indica que el estado del paquete solo es necesario durante una llamada al servidor (por ejemplo, un bloque PL/SQL anónimo o una llamada a un procedimiento almacenado a través de un enlace de base de datos). Tras esta llamada, se puede reutilizar el almacenamiento de las variables del paquete, lo que reduce el consumo de memoria.
PostgreSQL no admite de forma nativa el concepto de SERIALLY_REUTILIZABLE Pragma. Para lograr una funcionalidad equivalente, este patrón utiliza un enfoque de función contenedora combinado con la función () de conversión de esquemas AWS Database Migration Service (AWS DMS SC AWS DMS) para migrar la estructura del paquete. El script de ejemplo proporcionado demuestra cómo conservar el comportamiento de restablecimiento en cada llamada en PostgreSQL.
Para obtener más información, consulte SERIALLY_REUSABLE Pragma
Requisitos previos y limitaciones
Un activo Cuenta de AWS
Acceso al servicio de conversión de AWS DMS esquemas
Una base de datos de Amazon Aurora PostgreSQL-Compatible Edition o una base de datos de Amazon RDS for PostgreSQL
Base de datos Oracle versión 10g o posterior
Arquitectura
Pila de tecnología de origen
On-premises Base de datos Oracle
Pila de tecnología de destino
Aurora PostgreSQL-Compatible
o Amazon RDS para PostgreSQL AWS DMS Conversión de esquemas
Arquitectura de migración

Tools (Herramientas)
Servicios de AWS
AWS Database Migration Service (AWS DMS) La conversión de esquemas hace que las migraciones de bases de datos entre diferentes tipos de bases de datos sean más predecibles. Úselo para evaluar la complejidad de la migración para su proveedor de datos de origen y para convertir los esquemas de bases de datos y los objetos de código. Puede aplicar el código convertido a la base de datos de destino.
Amazon Aurora PostgreSQL-Compatible Edition es un motor de base de datos ACID-compliant relacional totalmente gestionado que le ayuda a configurar, operar y escalar las implementaciones de PostgreSQL.
Amazon Relational Database Service (Amazon RDS) para PostgreSQL lo ayuda a configurar, utilizar y escalar una base de datos relacional de PostgreSQL en la Nube de AWS.
Otras herramientas
pgAdmin
es una herramienta de gestión de código abierto para PostgreSQL. Proporciona una interfaz gráfica que permite crear, mantener y utilizar objetos de bases de datos.
Prácticas recomendadas
Utilícelo siempre
reset_vars = 1para las llamadas de alto nivel y para las subllamadas internas.reset_vars = 0Mantenga todos los valores predeterminados de la
$initfunción como una única fuente de información.Haga coincidir los nombres de las variables de Oracle en PostgreSQL para garantizar la trazabilidad.
Valide comparando los resultados de Oracle
DBMS_OUTPUTcon los deRAISE NOTICEPostgreSQL.Realice pruebas en distintas sesiones de PostgreSQL para confirmar que las variables se restablecen entre llamadas.
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Configure AWS DMS SC. | Configure AWS DMS la conectividad con la base de datos de origen. Para obtener más información, consulte Convertir esquemas de bases de datos mediante la conversión de esquemas de DMS. | Administrador de base de datos, desarrollador |
Convierta el script. | Utilice AWS DMS SC para convertir el paquete de Oracle seleccionando la base de datos de destino como Aurora PostgreSQL-Compatible. | Administrador de base de datos, desarrollador |
Guarde los archivos.sql. | Antes de guardar el archivo.sql, modifique la opción de configuración del proyecto en AWS DMS SC a un solo archivo por etapa. Esto se configura AWS DMS para separar el archivo.sql en varios archivos.sql según el tipo de objeto. | Administrador de base de datos, desarrollador |
Cambie el código. | Abra la | Administrador de base de datos, desarrollador |
Pruebe la conversión. | Implemente la | Administrador de base de datos, desarrollador |
Resolución de problemas
| Problema | Solución |
|---|---|
El campo no existe un error al acceder a las variables del paquete. | Asegúrese de que la condición de la |
Las variables no se restablecen entre las llamadas de nivel superior o se restablecen inesperadamente durante las subllamadas internas. |
|
Recursos relacionados
Información adicional
-------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'