Blog

Noticias

Lanzamiento de Ora2Pg versión 23.1

Antananarivo, Madagascar – 10 de febrero de 2022

Ora2Pg

Ha sido lanzada oficialmente, y está disponible para su descarga, la versión 23.1 de Ora2Pg, una herramienta gratuita y fiable para la migración de bases de datos Oracle a PostgreSQL.

Esta versión corrige varios problemas reportados en los últimos cuatro meses y añade nuevas importantes características y mejoras.

  • Se añade el uso de las funciones greatest() / least(), desde la nueva versión de Orafce, para los casos en los que se requiera devolver NULL en una entrada NULL, como en Oracle.
  • Los valores de configuración de ALLOW y EXCLUDE ahora pueden ser leídos desde un archivo, lo cual es muy útil cuando se necesita filtrar una gran cantidad de tablas.
  • Se añade la posibilidad de utilizar el Número de Cambio del Sistema (SCN), para la exportación o validación de datos, proporcionando un SCN específico. Puede configurarse en la línea de comandos utilizando la opción -S o --scn. Es posible indicar un SCN específico o, si se desea utilizar el SCN actual en la primera conexión, establecer el valor en «current». Ejemplo de uso:
        ora2pg -c ora2pg.conf -t COPY --scn 16605281
    Con la opción --scn también es posible utilizar la capacidad de flashback de Oracle al especificar una expresión timestamp en lugar de un SCN. Por ejemplo:
        ora2pg -c ora2pg.conf -t COPY --scn "TO_TIMESTAMP('2021-12-01 00:00:00', 'YYYY-MM-DD HH:MI:SS')"
    o, por ejemplo, para recuperar únicamente los datos del día anterior:
        ora2pg -c ora2pg.conf -t COPY --scn "SYSDATE - 1" 
  • Se añade el formato de salida json a la evaluación de migración.
  • Se añade la nueva directiva de configuración TO_CHAR_NOTIMEZONE que elimina cualquier información sobre la zona horaria en la parte del formato de la función TO_CHAR(). La directiva está desactivada por defecto. Hay que tener en cuenta que la nueva configuración por defecto es incompatible con las versiones anteriores, ya que anteriormente siempre se eliminaba la parte relativa a la zona horaria.
  • Se añade la nueva directiva de configuración FORCE_IDENTITY_BIGINT. Puesto que normalmente la columna de identidad debe ser de tipo bigint para corresponder a una secuencia autoincremental, Ora2Pg siempre la forzará a ser bigint. Si, por alguna razón, se quiere que Ora2Pg respete el DATA_TYPE que fue definido para la columna de identidad, deberá desactivarse esta directiva.
  • Permite exportar sólo objetos inválidos cuando EXPORT_INVALID se configura con el valor 2
  • Se desactiva la exportación de datos por partición al definir una cláusula WHERE en una tabla particionada o al definir una cláusula WHERE global.

Se han añadido también dos nuevas opciones al comando ora2pg.

  • Nueva opción de línea de comandos --lo_import. Por defecto, Ora2Pg importa los BLOB de Oracle como bytea, por lo que la columna de destino se creará utilizando el tipo de datos bytea. Si se desea utilizar un objeto grande en lugar de un bytea, es suficiente con añadir la opción –blob_to_lo al comando ora2pg. Se creará la columna de destino con el tipo de datos Oid y se guardará el BLOB como un objeto grande utilizando la función lo_from_bytea(). El Oid devuelto al invocar lo_from_bytea() será añadido a la columna de destino en lugar del bytea. Esta opción sólo puede utilizarse con las acciones SHOW_COLUMN, TABLE e INSERT; la acción COPY no está soportada. Si se desea utilizar COPY o se dispone de BLOBs de gran tamaño (superiores a 1GB) que no pueden ser importados con lo_from_bytea(), habrá que añadir la opción --lo_import al comando ora2pg. Esto permitirá importar los datos en dos pasos:
  • 1) Exportar los datos usando COPY o INSERT: se establecerá en 0 el valor de la columna de destino Oid para BLOB, y el valor BLOB será guardado en un archivo dedicado. Además, se creará un script Shell para importar a la base de datos los archivos BLOB, utilizando el comando psql \lo_import, y para actualizar la columna Oid de la tabla al Oid del objeto grande devuelto. El script se llama lo_import-TABLENAME.sh
  • 2) Ejecutar todos los scripts lo_import-TABLENAME.sh tras definir las variables de entorno PGDATABASE y opcionalmente PGHOST, PGPORT, PGUSER, etc. si estas no corresponden a los valores por defecto de libpq. También puede ejecutarse de forma manual un VACUUM FULL de la tabla para eliminar el sobredimensionamiento creado por la actualización de la tabla.

    Limitación: la tabla debe contar con una clave primaria, la cual se utiliza para establecer la cláusula WHERE y así  actualizar la columna Oid tras la importación de objetos grandes. La importación de BLOB mediante este segundo método (--lo_import) es muy lenta, por lo que debe limitarse a las filas en las que el BLOB sea superior a 1GB; para todas las demás filas deberá utilizarse la opción –blob_to_lo. Para filtrar las filas puede utilizarse la directiva de configuración WHERE en ora2pg.conf.
  • Nueva opción de línea de comandos --cdc_ready para utilizar el SCN actual por tabla al exportar los datos y registrarlos en un archivo denominado TABLES_SCN.log. Puede utilizarse para las herramientas de Captura de Datos de Cambios (CDC).