Migre valores CLOB de Oracle a filas individuales en PostgreSQL en AWS - 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 valores CLOB de Oracle a filas individuales en PostgreSQL en AWS

Creado por Sai Krishna Namburu (AWS) y Sindhusha Paturu (AWS)

Entorno: PoC o piloto

Origen: base de datos de Oracle

Destino: Compatible con Aurora PostgreSQL o Amazon RDS para PostgreSQL

Tipo R: redefinir la plataforma

Carga de trabajo: Oracle; código abierto

Tecnologías: migración; almacenamiento y copia de seguridad; bases de datos

Servicios de AWS: Amazon Aurora; AWS DMS; Amazon S3; Amazon RDS

Resumen

Este patrón describe cómo dividir valores de objetos grandes (CLOB) de Oracle en filas individuales en Amazon Aurora compatible con PostgreSQL y Amazon Relational Database Service (Amazon RDS) para PostgreSQL. PostgreSQL no admite el tipo de datos CLOB.

Las tablas con particiones de intervalos se identifican en la base de datos Oracle de origen, y el nombre de la tabla, el tipo de partición, el intervalo de partición y otros metadatos se registran y cargan en la base de datos de destino. Puede cargar datos CLOB de tamaño inferior a 1 GB en tablas de destino como texto mediante AWS Database Migration Service (AWS DMS), o bien puede exportar los datos en formato CSV, cargarlos en un bucket de Amazon Simple Storage Service (Amazon S3) y migrarlos a su base de datos PostgreSQL de destino.

Tras la migración, puede usar el código de PostgreSQL personalizado proporcionado con este patrón para dividir los datos CLOB en filas individuales en función del nuevo identificador de caracteres de línea (CHR(10)) y rellenar la tabla de destino. 

Requisitos previos y limitaciones

Requisitos previos 

  • Una tabla de base de datos de Oracle con particiones de intervalos y registros con tipo de datos CLOB.

  • Una base de datos de Aurora compatible con PostgreSQL o Amazon RDS para PostgreSQL con una estructura de tabla similar a la tabla de origen (las mismas columnas y tipos de datos).

Limitaciones

  • El valor de CLOB no puede superar 1 GB.

  • Cada fila de la tabla de destino debe tener un nuevo identificador de caracteres de línea.

Versiones de producto

  • Oracle 12c

  • Aurora PostgreSQL 11.6

Arquitectura

El siguiente diagrama muestra una tabla de origen de Oracle con datos CLOB, y la tabla PostgreSQL equivalente en Aurora compatible con PostgreSQL versión 11.6.

Tabla CLOB de origen y tabla PostgreSQL de destino equivalente.

Herramientas

Servicios de AWS

Otras herramientas

Puede usar las siguientes herramientas de cliente para conectarse, acceder y gestionar sus bases de datos de Aurora compatible con PostgreSQL y Amazon RDS para PostgreSQL. (Estas herramientas no se usan en este patrón).

  • 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.

  • DBeaver es una herramienta de base de datos de código abierto para desarrolladores y administradores de bases de datos. Esta herramienta le permite manipular, supervisar, analizar, administrar y migrar sus datos.

Prácticas recomendadas

Para conocer las prácticas recomendadas para migrar su base de datos de Oracle a PostgreSQL, consulte la publicación del blog de AWS Prácticas recomendadas para migrar una base de datos de Oracle a Amazon RDS PostgreSQL o Amazon Aurora PostgreSQL: consideraciones sobre el proceso de migración y la infraestructura.

Para obtener más información sobre las prácticas recomendadas para configurar la tarea de AWS DMS de migración de grandes objetos binarios, consulte Migración de grandes objetos binarios (LOB) en la documentación de AWS DMS.

Epics

TareaDescripciónHabilidades requeridas

Analice los datos de CLOB.

En la base de datos Oracle de origen, analice los datos de CLOB para comprobar si contienen encabezados de columna y así poder determinar el método de carga de los datos en la tabla de destino. 

Para analizar los datos de entrada, ejecute la siguiente consulta.

SELECT * FROM clobdata_or;  

Desarrollador

Cargue los datos de CLOB en la base de datos de destino.

Migre la tabla que contiene datos de CLOB a una tabla provisional (transitoria) en la base de datos de destino de Aurora o Amazon RDS. Puede usar AWS DMS o cargar los datos en formato de archivo CSV a un bucket de Amazon S3.

Para obtener más información sobre el uso de AWS DMS para esta tarea, consulte Uso de una base de datos Oracle como fuente y Uso de una base de datos PostgreSQL como destino en la documentación de AWS DMS.

Para obtener más información sobre el uso de Amazon S3 para esta tarea, consulte Uso de Amazon S3 como destino en la documentación de AWS DMS.

Ingeniero de migraciones, administrador de bases de datos

Valide la tabla PostgreSQL de destino.

Valide los datos de destino, incluidos los encabezados, comparándolos con los datos de origen. Para ello, ejecute las siguientes consultas en la base de datos de destino.

SELECT * FROM clobdata_pg; SELECT * FROM clobdatatarget;

Compare los resultados con los resultados de las consultas a la base de datos de origen (desde el primer paso).

Desarrollador

Divida los datos de CLOB en filas independientes.

Ejecute el código PostgreSQL personalizado que se proporciona en la sección Información adicional para dividir los datos CLOB e insertarlos en filas independientes en la tabla PostgreSQL de destino.

Desarrollador
TareaDescripciónHabilidades requeridas

Valide los datos en la tabla de destino.

Valide los datos insertados en la tabla de destino ejecutando las siguientes consultas.

SELECT * FROM clobdata_pg; SELECT * FROM clobdatatarget;
Desarrollador

Recursos relacionados

Información adicional

Función de PostgreSQL para dividir datos CLOB

do $$ declare totalstr varchar; str1 varchar; str2 varchar; pos1 integer := 1; pos2 integer ; len integer; begin select rawdata||chr(10) into totalstr from clobdata_pg; len := length(totalstr) ; raise notice 'Total length : %',len; raise notice 'totalstr : %',totalstr; raise notice 'Before while loop'; while pos1 < len loop select position (chr(10) in totalstr) into pos2; raise notice '1st position of new line : %',pos2; str1 := substring (totalstr,pos1,pos2-1); raise notice 'str1 : %',str1; insert into clobdatatarget(data) values (str1); totalstr := substring(totalstr,pos2+1,len); raise notice 'new totalstr :%',totalstr; len := length(totalstr) ; end loop; end $$ LANGUAGE 'plpgsql' ;

Ejemplos de entrada y salida

Puede usar los siguientes ejemplos para probar el código PostgreSQL antes de migrar los datos.

Cree una base de datos Oracle con tres líneas de entrada.

CREATE TABLE clobdata_or ( id INTEGER GENERATED ALWAYS AS IDENTITY, rawdata clob ); insert into clobdata_or(rawdata) values (to_clob('test line 1') || chr(10) || to_clob('test line 2') || chr(10) || to_clob('test line 3') || chr(10)); COMMIT; SELECT * FROM clobdata_or;

Se mostrarán los siguientes valores.

id

rawdata

1

test line 1 test line 2 test line 3

Cargue los datos de origen en una tabla transitoria de PostgreSQL (clobdata_pg) para su procesamiento.

SELECT * FROM clobdata_pg; CREATE TEMP TABLE clobdatatarget (id1 SERIAL,data VARCHAR ); <Run the code in the additional information section.> SELECT * FROM clobdatatarget;

Se mostrarán los siguientes valores.

id1

datos

1

Línea de prueba 1

2

Línea de prueba 2

3

Línea de prueba 3