Así migramos bases de datos Oracle a PostgreSQL usando AWS

francisco luis arbeláez lópez
Bancolombia Tech
Published in
15 min readOct 29, 2021

Bancolombia es una de las pocas empresas bancarias que declaran al open source como una estrategia core de la organización y desde la Oficina Open Source del banco fomentamos y acompañamos los procesos de migración de tecnologías privativas hacia tecnologías open.

Dentro de estas tecnologías, una de las principales son las bases de datos y migrar una tecnología privativa como Oracle a PostgreSQL genera una eficiencia económica considerable para cualquier empresa. Además, PostgreSQL es una tecnología que, por ser open source, está en constante evolución y actualmente cubre la mayoría de las características que posee Oracle.

Bancolombia tomó la decisión de convertirse en un banco 100% cloud, utilizando principalmente la nube de AWS y, de cara a la migración de bases de datos AWS nos ofrece herramientas y servicios que se pueden aprovechar para facilitar este proceso.

Esquema de migración

La migración de una base de datos de origen Oracle a una de destino PostgreSQL corresponde a un esquema de migración heterogénea, en el cual los motores de origen y destino son diferentes. En este caso, el proceso de migración consta de 2 pasos, el primero es la conversión de esquemas y el segundo es la migración de los datos desde el origen hasta el destino.

AWS provee dos herramientas de gran utilidad para realizar estas tareas, el Schema Conversion Tool (SCT) y el Database Migration Service (DMS).

Prerrequisitos

Para poder realizar la configuración de las herramientas y la migración de los datos se debe cumplir con los siguientes prerrequisitos:

  1. Crear la Base de Datos de destino.

Esta debe ser una instancia RDS PostgresSQL la cual será el destino de la migración.

2. Disponer de una máquina que tenga acceso a la BD de origen (Oracle) y a la de destino (PostgreSQL).

En esta máquina se debe instalar la herramienta Schema Conversion Tool y es allí donde se ejecutará el proceso de conversión de esquemas.

Esta máquina puede ser local (On-Premise) o puede ser una instancia EC2 (en la nube).

Para esta máquina se puede utilizar Sistema Operativo Linux, Windows o Mac.

3. Usuario de conexión a BD de origen (Oracle).

El usuario debe tener, como mínimo, permisos suficientes para leer los esquemas que se van a migrar.

Se puede utilizar un usuario administrador o crear un usuario con los permisos mínimos (select_catalog_role y permiso de consulta en el diccionario de la base de datos). Estos permisos proporcionan un acceso de solo lectura a las vistas y tablas del sistema que requiere AWS SCT para realizar la conversión de esquemas.

4. Usuario de conexión a BD de destino (PostgreSQL).

Este usuario requiere permisos de creación de esquemas en la base de datos de destino ya que es con el cual se ejecutan los scripts de creación de los esquemas convertidos.

Se puede utilizar un usuario administrador o crear un usuario con los permisos mínimos.

Conversión del esquema (SCT)

Schema Conversion Tool (SCT) es una herramienta de conversión de esquemas, que proporciona AWS para facilitar la migración de bases de datos heterogéneas.

SCT realiza una conversión automática del esquema de la base de datos de origen y la mayor parte del código personalizado a un formato compatible con la base de datos de destino.

Instalación de la herramienta Schema Conversion Tool (SCT)

AWS SCT es una aplicación autónoma que se debe descargar e instalar en una máquina que tenga acceso a la BD de origen y de destino para poder realizar la conversión.

Se puede instalar en Sistemas Operativos Linux, Windows o Mac.

  • Descarga de la herramienta SCT.

Para descargar el AWS SCT utilice el link del sistema operativo que desea:

Microsoft Windows

Ubuntu Linux (.deb)

Fedora Linux (.rpm)

  • Instalación de la herramienta SCT.

Para proceder con la instalación extraiga el contenido del archivo .zip descargado y ejecute el instalador.

Se abrirá el asistente de instalación y se sigue el proceso allí indicado y no se requiere ninguna configuración especial.

Asistente de instalación de SCT
Ícono de la herramienta SCT
  • Descarga drivers JDBC Oracle y PostgreSQL.

Luego de descargar e instalar la herramienta se deben descargar los controladores de Java Database Connectivity (JDBC) para sus motores de base de datos de origen y destino, estos drivers son necesarios para que SCT pueda establecer las conexiones con ambos motores, Oracle y PostgreSQL.

Puede descargar los drivers de los siguientes links:

Driver Oracle

Driver PostgreSQL

Se recomienda descargar la última versión del Driver disponible.

  • Configuración de conectores JDBC

Luego de descargar los drivers JDBC se debe configurar su ruta en la herramienta SCT para poder realizar las conexiones a las bases de datos de Origen y Destino.

Una vez abierta la aplicación se da click en el menú “Settings” opción “Global settings”

En la ventana “Global settings” se selecciona la opción “Drivers” del menú lateral izquierdo y en los campos correspondientes a cada motor de Base de Datos se selecciona la ruta donde se descargó el driver correspondiente.

Configuración de los drivers

Con esto ya tenemos la herramienta SCT correctamente configurada para realizar la conversión de esquemas.

Convertir esquema de BD

Después de configurada puede utilizar la AWS Schema Conversion Tool (AWS SCT) para convertir sus esquemas de base de datos existente de un motor de base de datos a otro.

  • Crear proyecto de conversión

El primer paso para realizar la conversión de esquema es crear un proyecto de conversión.

El proyecto de conversión está dentro de SCT y permite hacer un análisis de los esquemas y objetos a convertir, y generar un esquema propuesto previo a su ejecución en la BD de destino.

Cuando se está creando el proyecto se debe especificar el nombre que se le quiere dar al proyecto, se selecciona la ruta en la que va a que quede almacenado, se selecciona el tipo de proyecto, en este caso “Transactional database (OLTP)” y también se selecciona el motor de origen (Oracle) y el motor de destino (Amazon RDS for PostgreSQL).

Creación proyecto de conversión de esquemas

Con esto queda creado el proyecto de conversión de esquemas.

  • Establecer conexión de origen y destino

Al crear el proyecto en la ventana principal de SCT se habilitan 2 opciones en el menú “Connect to Oracle” y “Connect to Amazon RDS for PostgreSQL” para establecer las conexiones a la BD de origen y destino.

Al darle clic a cualquiera de estas dos opciones se abre la ventana para establecer la conexión a la base de datos de origen o destino.

En esta ventana se diligencian los datos de conexión a la base de datos Oracle o PostgreSQL. Luego se puede seleccionar la opción para guardar la contraseña y un botón “Test connection” para probar que la conexión funcione.

En este momento la herramienta carga la información de los esquemas de las BDs. La herramienta lista en el panel izquierdo los esquemas disponibles para convertir en la base de datos de origen. En el panel derecho se carga la información de los esquemas de la base de datos de destino, en este caso solo tiene el esquema “public” que es creado por defecto cuando se crea la instancia, pero aún no se ha creado ningún otro esquema.

  • Crear informe de migración

Cuando se programa una conversión de base de datos, resulta útil crear algunos informes que ayuden a entender todo lo que implica.

Puede utilizar AWS SCT para crear un informe de evaluación de la migración de la base de datos. Con este informe, obtendrá un resumen de sus tareas de conversión del esquema y detalles de elementos que no se pueden convertir automáticamente a la base de datos de destino.

Al seleccionar la opción de creación del reporte la herramienta realiza el análisis de los objetos de la BD de origen y genera el informe de evaluación de conversión.

Tras crear un informe de evaluación, se abrirá la vista del informe de evaluación.

Informe de evaluación

En la pestaña “Summary” (Resumen) se muestra un resumen ejecutivo del análisis de los objetos y se muestran los elementos convertidos automáticamente o no convertidos a los cuales les asigna un grado de complejidad de las acciones requeridas para convertirlos manualmente.

La pestaña “Action Items” (Elementos de acción) muestra los elementos que no se han podido convertir automáticamente y recomendaciones sobre qué hacer con ellos para convertirlos manualmente.

Esta es solo una recomendación hecha por la herramienta, no implica que se debe corregir de esta manera obligatoriamente, puede tomar la acción que usted considere más adecuada.

  • Convertir esquema

En el panel de la izquierda que muestra el esquema de la base de datos de origen, se selecciona “Schemas” para convertirlos. Clic derecho, luego en el menú contextual se selecciona “Convert schema”.

Convertir esquema

Cuando la AWS SCT termina de convertir el esquema, puede ver el esquema propuesto en el panel a la derecha del proyecto.

En este momento, no se aplica ningún esquema a su instancia de base de datos de Amazon RDS de destino. El esquema planificado es parte de su proyecto. Si selecciona un elemento del esquema convertido, podrá ver el comando de esquema previsto en el panel de la parte inferior en el centro de la instancia de base de datos de Amazon RDS de destino.

Puede editar el esquema en esta ventana. El esquema editado se almacena como parte de su proyecto y estará escrito en la instancia de base de datos de destino cuando decida aplicar su esquema convertido.

  • Aplicar esquema convertido a BD de destino

Puede aplicar el esquema de base de datos convertido a su instancia de base de datos de Amazon RDS de destino. Después de haber aplicado el esquema a su instancia de base de datos de destino, podrá actualizar el esquema en función de los elementos de acción del informe de evaluación de la migración de la base de datos.

Para aplicar el esquema de base de datos convertido a su instancia de base de datos de Amazon RDS de destino seleccione del esquema del panel derecho del proyecto el esquema o esquemas que va a aplicar a su instancia de base de datos de destino, clic derecho sobre “Schemas” y en el menú contextual selecciona la opción “Apply to database”.

Aplicar esquema convertido

En este momento la herramienta ejecuta el esquema propuesto sobre la BD de destino.

Al finalizar el proceso el esquema quedará creado en la BD de destino.

NOTA: Este procedimiento sobrescribe el esquema de destino existente. Tenga cuidado de no sobrescribir involuntariamente el esquema. Tenga cuidado de no sobrescribir el esquema de su instancia de base de datos de destino que ya haya modificado, o reemplazará dichos cambios.

Migración de los datos (DMS)

El servicio Database Migration Services le ayuda a migrar las bases de datos a AWS de manera rápida y segura. La base de datos fuente permanece totalmente operativa durante la migración, lo que minimiza el tiempo de inactividad de las aplicaciones que dependen de ella.

AWS Database Migration Service admite migraciones homogéneas, como de Oracle a Oracle, además de migraciones heterogéneas entre diferentes plataformas de base de datos, como de Oracle o Microsoft SQL Server a Amazon Aurora.

Para configurar correctamente el servicio DMS se deben crear puntos de enlace a las bases de datos de origen y destino, una instancia de replicación que será en la cual se ejecute el proceso de migración, y una tarea de migración que será la tarea que se ejecutará en la instancia de replicación.

  • Creación de instancia de replicación.

Desde la consola de administración de AWS se debe acceder al servicio Database Migration Service.

Una vez en el panel de DMS en el menú del lado izquierdo se selecciona la opción “Instancias de replicación” y se procede a crear la instancia.

En la página de creación de la instancia se especifica un nombre para identificar la instancia de replicación, y se puede definir un ARN más descriptivo o dejar que DMS lo defina automáticamente, y se puede adicionar una descripción opcional para la instancia.

Luego se especifican las características de la instancia entre ellas la “Clase de instancia” que define el poder de cómputo y memoria que tendrá la instancia de replicación. Este tipo de instancia se debe definir teniendo en cuenta la Base de Datos que se migrará, cantidad de información y esto definirá que tantos recursos se necesitan y que tanto tiempo puede tomar el proceso de migración en ejecutarse.

También se selecciona la versión de DMS que se utilizara para ejecutar la tarea de migración, es este caso se recomienda siempre utilizar la última versión disponible.

Luego se selecciona la capacidad de almacenamiento de la instancia y la VPC en la que se creará la instancia, y finalmente se especifica si la instancia estará configurada como Multi AZ o Single AZ. Para ambientes productivos se recomienda multi AZ.

Las demás configuraciones de la instancia se pueden dejar con los valores por defecto.

  • Creación puntos de enlace.

En el panel de DMS en el menú del lado izquierdo se selecciona la opción “Puntos de enlace” y se procede a crear los puntos de enlace a las BDs de origen y destino.

El primer paso es seleccionar el tipo de punto de enlace, origen o destino. Primero se crea el punto de enlace de la base de datos de origen.

Si la Base de Datos es una RDS entonces se puede marcar la casilla “Seleccionar una instancia de base de datos de RDS” y en el listado “Instancia de RDS” se selecciona la RDS de origen.

Luego en la configuración del punto de enlace se digita un nombre para identificar el punto de enlace, y se puede definir un ARN más descriptivo o dejar que DMS lo defina automáticamente, luego en la lista “Motor de origen” se selecciona el motor de la base de datos de origen (En este caso Oracle) y luego se tiene la opción de proporcionar los datos de conexión a la base de datos manualmente o utilizando un secreto de AWS definido previamente.

Finalmente, la página da una opción para probar la conexión del punto de enlace y para finalizar la creación se da clic en el botón “Crear un punto de enlace”.

Luego se debe crear el punto de enlace de destino siguiendo los mismos pasos que para el punto de origen.

  • Creación tarea de migración

Para crear la tarea de migración desde el panel de DMS se accede en el menú izquierdo a la opción “Tareas de migración de base de datos”.

En la ventana de crear una tarea de migración de base de datos, se define un nombre para identificar fácilmente la tarea, también se puede especificar un nombre de ARN más fácil de entender, aunque se tiene la opción de dejar el nombre por defecto que genera AWS. Luego se selecciona la instancia de replicación y los puntos de enlace de origen y destino que se habían definido previamente para ejecutar la tarea de migración.

Luego se selecciona el tipo de migración que se va a realizar; existen 3 tipos diferentes de migración.

  • Migración de datos existentes: que corresponde a una migración inicial desde cero.
  • Migración de datos existentes y replicar los cambios continuos: esta opción permite que las bases de datos continúen sincronizándose a medida que la base de datos de origen va cambiando.
  • Replicar solo los cambios en los datos: lo cual indica que solo se van a migrar los datos que llegan nuevos a la base de datos de origen.

Luego se definen otras opciones de configuración de la tarea como lo es el “Modo de preparación de las tablas de destino” en este caso seleccionamos la opción “No hacer nada” ya que en la base de datos de destino ya existen las tablas que se crearon en el proceso de conversión de esquema.

También, se define la configuración de cómo migrar las columnas tipo LOB, en este caso se selecciona la opción “Modo de LOB completo” para migrar toda la información que contengan estas columnas.

La herramienta nos brinda la opción de “Habilitar la validación” de registros después de migrados comparando origen y destino, esto incrementa el tiempo de ejecución de la tarea, y también nos permite “Habilitar registros de cloudWatch”, el cual es recomendable habilitar para poder hacer un seguimiento a la ejecución de la tarea.

Luego se deben especificar las reglas de mapeo de tablas, en esta sección se debe incluir por lo menos una regla de selección para especificar el esquema o los esquemas que se van a migrar.

Para que la tarea de migración funcione correctamente, se deben crear unas reglas de transformación para cambiar el nombre de los objetos a minúsculas, esto se debe a que los objetos en las bases de datos PostgreSQL quedan creados con sus nombres en minúsculas y en la tarea de migración se debe asegurar de que los nombres de los objetos de la base de datos de destino se van a procesar en minúsculas.

Se debe adicionar de la misma manera otras dos reglas de transformación para los nombres de los esquemas, tablas y las columnas.

En la sección “Configuración de inicio de tareas de migración” se puede especificar si queremos que la tarea se inicie automáticamente al crearla o si ejecutarla de manera manual más tarde.

  • Ejecutar tarea de migración

El paso final para la migración es ejecutar la tarea de migración que configuramos durante los pasos anteriores.

Previo a la ejecución de la tarea de migración se deben desactivar tanto las claves foráneas como los triggers en la base de datos de destino, ya que la carga de la información se realiza de manera masiva y con varios procesos en paralelo sin tener en cuenta la integridad referencial entre las tablas y esto generaría errores de clave foránea al cargar los registros, además se inactivan los triggers para que estos no se disparen involuntariamente con la carga de los registros.

Al final de la ejecución de la tarea se deben habilitar nuevamente tanto las claves foráneas como los triggers.

Para ejecutar la tarea de migración desde la lista de “Tareas de migración de base de datos” damos clic sobre el nombre de la tarea que acabamos de crear.

Se abre una página con la información básica de la tarea de migración en esta página se da clic en el botón “Acciones” y luego en la opción “Reiniciar/Reanudar”.

En la parte inferior se muestran unas pestañas con información adicional sobre la tarea entre ella el porcentaje de progreso de la tarea.

Una vez finalizada la tarea el estado cambia a Carga completa y la barra de progreso llega al 100%.

En este momento el proceso de migración ha finalizado y la información debe estar cargada en la base de datos de destino.

Recuerde activar las claves foráneas y los triggers al finalizar la tarea de migración.

Casos especiales

Normalmente las migraciones heterogéneas siempre implican una intervención manual para transformar todos los tipos de objetos y tipos de datos de un motor de BD a otro.

En el caso de migraciones de Oracle a PostgreSQL se presentan frecuentemente los siguientes casos especiales:

Migración con diferentes tipos de índices.

  • Índices Bitmap: no los migra ya que en PostgreSQL no hay un homologo para este tipo de índice.
  • ReverseKey index: Al migrarlos a PostgreSQL son creados como un índice btree normal.

En aplicaciones que utilicen estos tipos de índices se deben evaluar si se ve afectado el rendimiento al crear estos índices como btree o buscar otra alternativa

Migración campos tipo LOB.

Si la tabla no tiene clave primaria la tarea de migración no es capaz de migrar los campos tipo LOB.

Migración de sinónimos.

PostgreSQL no maneja sinónimos por lo que ningún sinónimo se migra. En esta situación la aplicación que trabaje con sinónimos tiene que hacer obligatoriamente refactor.

Migración objetos de código

Procedimientos almacenados, funciones, triggers, types y paquetes. En la mayoría de los casos se requiere intervención manual para la migración de los objetos de código.

En PostgreSQL no existe el concepto de paquetes, la herramienta lo migra y lo crea como un procedimiento almacenado.

El objetivo de esta publicación es dar mayor contexto al proceso de migración de bases de datos definido desde la Oficina Open Source de Bancolombia.

--

--