Gestionar bloques anónimos en instrucciones SQL dinámicas en Aurora PostgreSQL - Recomendaciones de AWS

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.

Gestionar bloques anónimos en instrucciones SQL dinámicas en Aurora PostgreSQL

Creado por anuradha chintha (AWS)

Entorno: PoC o piloto

Origen: base de datos relacional

Destino: PostgreSQL

Tipo R: renovar arquitectura

Carga de trabajo: Oracle; código abierto

Tecnologías: bases de datos; migración

Servicios de AWS: Amazon Aurora; Amazon RDS

Resumen

Este patrón le muestra cómo evitar el error que se produce al gestionar bloques anónimos en instrucciones SQL dinámicas. Recibirá un mensaje de error cuando use la herramienta de conversión de esquemas de AWS para convertir una base de datos de Oracle en una base de datos Aurora compatible con PostgreSQL. Para evitar el error, debe conocer el valor de una variable de enlace OUT, pero no podrá conocer el valor de una variable de enlace OUT hasta que ejecute la instrucción SQL. Este error se debe a que la herramienta de conversión de esquemas de AWS (AWS SCT) no entiende la lógica de la instrucción SQL dinámica. AWS SCT no puede convertir la instrucción SQL dinámica en código PL/SQL (es decir, funciones, procedimientos y paquetes).

Requisitos previos y limitaciones

Requisitos previos 

Arquitectura

Pila de tecnología de origen

  • Oracle Database 10g en las instalaciones y versiones posteriores

Pila de tecnología de destino

  • PostgreSQL de Amazon Aurora

  • Amazon RDS para PostgreSQL

  • Herramienta de conversión de esquemas de AWS (AWS SCT)

Arquitectura de migración

El siguiente diagrama muestra cómo usar las variables de enlace OUT de AWS SCT y Oracle para escanear el código de la aplicación en busca de instrucciones SQL integradas y convertir el código a un formato compatible que pueda usar una base de datos de Aurora.

Diagrama de arquitectura para usar las variables de enlace de AWS SCT y Oracle OUT

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. Genere un informe de AWS SCT para la base de datos de origen usando Aurora PostgreSQL como base de datos de destino.

  2. Identifique el bloque anónimo en el bloque de código SQL dinámico (por el que AWS SCT generó el error).

  3. Convierta el bloque de código manualmente e impleméntelo en una base de datos de destino.

Herramientas

Servicios de AWS

Otras herramientas

  • pgAdmin le permite conectarse e interactuar con su servidor de base de datos.

  • Oracle SQL Developer es un entorno de desarrollo integrado que puede usar para desarrollar y gestionar bases de datos en Oracle Database. Puede usar SQL *Plus u Oracle SQL Developer para este patrón.

Epics

TareaDescripciónHabilidades requeridas

Cree una instancia de Oracle en Amazon RDS o Amazon EC2.

Para crear una instancia de base de datos de Oracle en Amazon RDS, consulte Crear una instancia de base de datos de Oracle y conectarse a una base de datos en una instancia de base de datos en Oracle en la documentación de Amazon RDS.

Para crear una instancia de base de datos de Oracle en Amazon Elastic Compute Cloud (Amazon EC2), consulte Amazon EC2 para Oracle en la documentación de Recomendaciones de AWS.

Administrador de base de datos

Cree un esquema de base de datos y objetos para la migración.

Puede usar Amazon Cloud Directory para crear un esquema de base de datos. Para más información, consulte Crear un esquema en la documentación de Cloud Directory.

Administrador de base de datos

Configure grupos de seguridad entrantes y salientes.

Para crear y configurar grupos de seguridad, consulte Controlar el acceso con grupos de seguridad en la documentación de Amazon RDS.

Administrador de base de datos

Confirme que la base de datos se está ejecutando.

Para comprobar el estado de su base de datos, consulte Visualizar los eventos de Amazon RDS en la documentación de Amazon RDS.

Administrador de base de datos
TareaDescripciónHabilidades requeridas

Cree una instancia de Aurora PostgreSQL en Amazon RDS.

Para crear una instancia de Aurora PostgreSQL, consulte Crear un clúster de base de datos y conectarse a una base de datos en un clúster de base de datos de Aurora PostgreSQL en la documentación de Amazon RDS.

Administrador de base de datos

Configure un grupo de seguridad entrante y saliente.

Para crear y configurar grupos de seguridad, consulte Proporcionar acceso al clúster de base de datos en la VPC creando un grupo de seguridad en la documentación de Aurora.

Administrador de base de datos

Confirme que la base de datos Aurora PostgreSQL se está ejecutando.

Para comprobar el estado de su base de datos, consulte Visualizar los eventos de Amazon RDS en la documentación de Aurora.

Administrador de base de datos
TareaDescripciónHabilidades requeridas

Conectar AWS SCT a la base de datos de origen.

Para conectar AWS SCT a su base de datos de origen, consulte Conectar a PostgreSQL como fuente en la documentación de AWS SCT.

Administrador de base de datos

Conectar AWS SCT a la base de datos de destino.

Para conectar AWS SCT a su base de datos de destino, consulte ¿Qué es la la Herramienta de conversión de esquemas de AWS (AWS SCT)? en la Guía del usuario de la la Herramienta de conversión de esquemas de AWS (AWS SCT).

Administrador de base de datos

Convierta el esquema de la base de datos en AWS SCT y guarde el código convertido automáticamente como archivo SQL.

Para guardar los archivos convertidos de AWS SCT, consulte Guardar y aplicar el esquema convertido en AWS SCT la Guía del usuario de la la Herramienta de conversión de esquemas de AWS (AWS SCT).

Administrador de base de datos
TareaDescripciónHabilidades requeridas

Obtenga el archivo SQL para la conversión manual.

En el archivo convertido de AWS SCT, extraiga el archivo SQL que requiere la conversión manual.

Administrador de base de datos

Actualice el script.

Actualice manualmente el archivo SQL.

Administrador de base de datos

Recursos relacionados

Información adicional

En el siguiente ejemplo de código se muestra cómo configurar la base de datos de origen de Oracle:

CREATE or replace PROCEDURE calc_stats_new1 ( a NUMBER, b NUMBER, result out NUMBER) IS BEGIN result:=a+b; END; /
set serveroutput on ; DECLARE a NUMBER := 4; b NUMBER := 7; plsql_block VARCHAR2(100); output number; BEGIN plsql_block := 'BEGIN calc_stats_new1(:a, :b,:output); END;'; EXECUTE IMMEDIATE plsql_block USING a, b,out output; DBMS_OUTPUT.PUT_LINE('output:'||output); END;

En el siguiente ejemplo de código se muestra cómo configurar la base de datos de Aurora PostgreSQL de destino:

w integer, x integer) RETURNS integer AS $BODY$ DECLARE begin return w + x ; end; $BODY$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION test_pg.init() RETURNS void AS $BODY$ BEGIN if aws_oracle_ext.is_package_initialized ('test_pg' ) then return; end if; perform aws_oracle_ext.set_package_initialized ('test_pg' ); PERFORM aws_oracle_ext.set_package_variable('test_pg', 'v_output', NULL::INTEGER); PERFORM aws_oracle_ext.set_package_variable('test_pg', 'v_status', NULL::text); END; $BODY$ LANGUAGE plpgsql; DO $$ declare v_sql text; v_output_loc int; a integer :=1; b integer :=2; BEGIN perform test_pg.init(); --raise notice 'v_sql %',v_sql; execute 'do $a$ declare v_output_l int; begin select * from test_pg.calc_stats_new1('||a||','||b||') into v_output_l; PERFORM aws_oracle_ext.set_package_variable(''test_pg'', ''v_output'', v_output_l) ; end; $a$' ; v_output_loc := aws_oracle_ext.get_package_variable('test_pg', 'v_output'); raise notice 'v_output_loc %',v_output_loc; END ; $$