Migre columnas generadas virtuales de Oracle a Postgre SQL - 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.

Migre columnas generadas virtuales de Oracle a Postgre SQL

Creado por Veeranjaneyulu Grandhi (AWS), Rajesh Madiwale () y Ramesh Pathuri () AWS AWS

Entorno: producción

Origen: base de datos de Oracle

Objetivo: Amazon compatible RDS con Postgre o SQL Aurora Postgre SQL

Tipo R: renovar arquitectura

Carga de trabajo: Oracle

Tecnologías: Migración; bases de datos

AWSservicios: Amazon Aurora; AmazonRDS; AWS DMS

Resumen

En la versión 11 y anteriores, Postgre SQL no proporciona una función que sea directamente equivalente a una columna virtual de Oracle. Gestionar las columnas generadas de forma virtual al migrar de Oracle Database a la SQL versión 11 o anterior de Postgre resulta difícil por dos motivos: 

  • Las columnas virtuales no están visibles durante la migración.

  • Postgre SQL no admite la expresión antes de la generate versión 12.

Sin embargo, existen soluciones alternativas para emular una funcionalidad similar. Cuando utiliza AWS Database Migration Service (AWSDMS) para migrar datos de Oracle Database a la SQL versión 11 y anteriores de Postgre, puede utilizar funciones de activación para rellenar los valores de las columnas generadas de forma virtual. Este patrón proporciona ejemplos de SQL código de Oracle Database y Postgre que puede utilizar para este fin. SíAWS, puede utilizar Amazon Relational Database Service (Amazon) para SQL Postgre o RDS Amazon Aurora SQL Postgre -Compatible Edition para su base de datos de Postgre. SQL

A partir de la versión 12 de Postgre, se admiten las columnas generadasSQL. Las columnas generadas pueden calcularse sobre la marcha a partir de otros valores de columna o calcularse y almacenarse. Las columnas SQL generadas por Postgre son similares a las columnas virtuales de Oracle.

Requisitos previos y limitaciones

Requisitos previos 

  • Una cuenta activa AWS

  • Base de datos de origen de Oracle

  • SQLBases de datos Target Postgre (en Amazon RDS para Postgre SQL o Aurora, compatible con Postgre) SQL

  • SQLExperiencia en codificación PL/PG

Limitaciones

  • Se aplica solo a las versiones de Postgre SQL anteriores a la versión 12. 

  • Se aplica a la versión 11g o posterior de Oracle Database.

  • Las columnas virtuales no se admiten en las herramientas de migración de datos.

  • Solo se aplica a las columnas definidas en la misma tabla.

  • Si una columna generada de forma virtual hace referencia a una función determinista definida por el usuario, no se puede utilizar como columna clave de partición.

  • El resultado de la expresión debe ser un valor escalar. No puede devolver un tipo de datos proporcionado por Oracle, un tipo definido por el usuario, LOB o LONG RAW.

  • Los índices que se definen en columnas virtuales equivalen a los índices basados en funciones en Postgre. SQL

  • Se deben recopilar las estadísticas de las tablas.

Herramientas

  • pgAdmin 4 es una herramienta de gestión de código abierto para Postgre. SQL Esta herramienta proporciona una interfaz gráfica que simplifica la creación, el mantenimiento y el uso de los objetos de la base de datos.

  • Oracle SQL Developer es un entorno de desarrollo integrado y gratuito para trabajar con bases de datos de Oracle tanto SQL en despliegues tradicionales como en la nube. 

Epics

TareaDescripciónHabilidades requeridas

Cree una tabla de base de datos de Oracle de origen.

En Oracle Database, cree una tabla con columnas generadas de forma virtual mediante la siguiente declaración.

CREATE TABLE test.generated_column ( CODE NUMBER, STATUS VARCHAR2(12) DEFAULT 'PreOpen', FLAG CHAR(1) GENERATED ALWAYS AS (CASE UPPER(STATUS) WHEN 'OPEN' THEN 'N' ELSE 'Y' END) VIRTUAL VISIBLE );

En esta tabla de origen, los datos de la STATUS columna se migran AWS DMS a la base de datos de destino. Sin embargo, la FLAG columna se rellena mediante generate by la funcionalidad, por lo que no estará visible AWS DMS durante la migración. Para implementar la funcionalidad de generated by, debe utilizar activadores y funciones de la base de datos de destino para rellenar los valores de la columna FLAG, como se muestra en la siguiente epopeya.

DBA, desarrollador de aplicaciones

Cree una SQL tabla de Postgreg de destino en. AWS

Cree una SQL tabla de Postgre con la siguiente AWS declaración.

CREATE TABLE test.generated_column ( code integer not null, status character varying(12) not null , flag character(1) );

En esta tabla, la columna status es una columna estándar. La columna flag será una columna generada en función de los datos de la columna status.

DBA, desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Crea un disparador de PostgreSQL.

En PostgreSQL, cree un disparador.

CREATE TRIGGER tgr_gen_column AFTER INSERT OR UPDATE OF status ON test.generated_column FOR EACH ROW EXECUTE FUNCTION test.tgf_gen_column();
DBA, desarrollador de aplicaciones

Crea una función de SQL activación de Postgre.

En PostgreSQL, cree una función para el disparador. Esta función rellena una columna virtual que la aplicación o AWS DMS actualiza y valida los datos.

CREATE OR REPLACE FUNCTION test.tgf_gen_column() RETURNS trigger AS $VIRTUAL_COL$ BEGIN IF (TG_OP = 'INSERT') THEN IF (NEW.flag IS NOT NULL) THEN RAISE EXCEPTION 'ERROR: cannot insert into column "flag"' USING DETAIL = 'Column "flag" is a generated column.'; END IF; END IF; IF (TG_OP = 'UPDATE') THEN IF (NEW.flag::VARCHAR != OLD.flag::varchar) THEN RAISE EXCEPTION 'ERROR: cannot update column "flag"' USING DETAIL = 'Column "flag" is a generated column.'; END IF; END IF; IF TG_OP IN ('INSERT','UPDATE') THEN IF (old.flag is NULL) OR (coalesce(old.status,'') != coalesce(new.status,'')) THEN UPDATE test.generated_column SET flag = (CASE UPPER(status) WHEN 'OPEN' THEN 'N' ELSE 'Y' END) WHERE code = new.code; END IF; END IF; RETURN NEW; END $VIRTUAL_COL$ LANGUAGE plpgsql;
DBA, desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Cree una instancia de replicación.

Para crear una instancia de replicación, siga las instrucciones de la AWS DMS documentación. La instancia de replicación debe estar en la misma nube privada virtual (VPC) que las bases de datos de origen y destino.

DBA, desarrollador de aplicaciones

Cree puntos de conexión de origen y destino.

Para crear los puntos finales, siga las instrucciones de la AWS DMS documentación.

DBA, desarrollador de aplicaciones

Probar los puntos de conexión.

Puede probar las conexiones de los puntos finales especificando la instancia de replicación VPC y seleccionando Ejecutar prueba.

DBA, desarrollador de aplicaciones

Cree e inicie una tarea de carga completa.

Para obtener instrucciones, consulte Creación de una tarea y Configuración de tareas de carga completa en la AWS DMS documentación.

DBA, desarrollador de aplicaciones

Valide los datos de la columna virtual.

Compare los datos de la columna virtual en las bases de datos de origen y destino. Puede validar los datos manualmente o escribir un script para este paso.

DBA, Desarrollador de aplicaciones

Recursos relacionados