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
Cuenta de AWS activa
Amazon Relational Database Service (Amazon RDS) para la instancia de base de datos de Oracle
Esquema de
AWS_ORACLE_EXT
(parte del paquete de extensión AWS SCT) en la base de datos de destinoVersión más reciente de la herramienta de conversión de esquemas de AWS (AWS SCT)
y los controladores necesarios
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](images/pattern-img/ada89410-b866-4d39-af9c-021be6cc6ae5/images/7c004981-2ed0-4b67-989f-54d8691712ca.png)
En el diagrama, se muestra el siguiente flujo de trabajo:
Genere un informe de AWS SCT para la base de datos de origen usando Aurora PostgreSQL como base de datos de destino.
Identifique el bloque anónimo en el bloque de código SQL dinámico (por el que AWS SCT generó el error).
Convierta el bloque de código manualmente e impleméntelo en una base de datos de destino.
Herramientas
Servicios de AWS
La edición de Amazon Aurora compatible con PostgreSQL es un motor de base de datos relacional compatible con ACID, completamente administrado que le permite configurar, utilizar y escalar implementaciones de PostgreSQL.
Amazon Relational Database Service (Amazon RDS) para Oracle le ayuda a configurar, utilizar y escalar una base de datos relacional de Oracle en la nube de AWS.
La Herramienta de conversión de esquemas de AWS (AWS SCT)
le ayuda a hacer previsibles las migraciones de bases de datos heterogéneas convirtiendo automáticamente el esquema de la base de datos de origen y la mayoría de los objetos de código de la base de datos a un formato compatible con la base de datos de destino.
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
Tarea | Descripción | Habilidades 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 |
Tarea | Descripción | Habilidades 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 | 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 | Administrador de base de datos |
Tarea | Descripción | Habilidades 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 |
Tarea | Descripción | Habilidades 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 ; $$