Referencia de problemas y patrones de conversiones

Los espacios de trabajo de conversión agregan todos los problemas de conversión en grupos y categorías para ayudarte a planificar la corrección de errores y advertencias de conversión. Cada categoría representa el tipo de trabajo que podrías necesitar realizar para corregir los problemas (revisar, refactorizar, ajustar los tipos de datos). Los grupos proporcionan una agregación adicional, ya que diferencian entre casos específicos en un nivel inferior:

Pantalla de descripción general del espacio de trabajo de conversión que muestra los grupos y las categorías de problemas de conversión.
Figura 1. Pantalla de descripción general del espacio de trabajo de conversión con grupos y categorías de problemas de conversión.
Pantalla de descripción general del espacio de trabajo de conversión que muestra los grupos y las categorías de problemas de conversión.

En la siguiente tabla, se enumeran todos los grupos de problemas de conversión que puedes encontrar durante la conversión de esquemas:

ID del grupo de problemas Descripción

El código fuente no es válido

Posible causa raíz

Los errores de este grupo suelen ocurrir cuando Database Migration Service encuentra una sintaxis desconocida o cuando el código fuente de Oracle no es válido (por ejemplo, a un procedimiento almacenado le falta la palabra clave END;).

Posible mitigación

Corrige los objetos no válidos en la base de datos de Oracle de origen. Luego, actualiza la instantánea del esquema de origen en Database Migration Service y vuelve a intentar el proceso de conversión de esquemas. Como alternativa, puedes excluir el objeto de la migración.

Faltan objetos con referencia

Posible causa raíz

Database Migration Service usa metadatos de objetos en el árbol de origen para mejorar la calidad de la conversión de código de los objetos dependientes. Si tu código hace referencia a objetos que no se incluyen en el esquema de origen, es posible que experimentes problemas de conversión, ya que Database Migration Service no puede determinar la estructura ni los tipos de datos de las columnas, los atributos o los objetos a los que se hace referencia y que faltan.

Entre los posibles errores de este grupo, se incluyen los tipos de datos incorrectos para los tipos definidos por el usuario (UDT) o los tipos de datos predeterminados de VARCHAR para columnas, parámetros o variables.

Posible mitigación

Asegúrate de que todos los objetos a los que se hace referencia se agreguen al árbol de origen de Database Migration Service o ajusta de forma manual el código de PostgreSQL según tu conocimiento del modelo de datos de origen para las dependencias faltantes.

Tablas sin clave primaria

Posible causa raíz

Database Migration Service requiere que todas las tablas tengan una clave primaria. Para las tablas sin claves primarias, Database Migration Service agrega una columna NUMERIC llamada rowid a la tabla de PostgreSQL de destino. Esta columna se propaga con los valores numéricos correspondientes de la pseudocolumna ROWID de Oracle de origen. Para garantizar que las declaraciones INSERT no fallen después de la migración, Database Migration Service crea una secuencia y la usa para incrementar de forma automática la columna rowid.

Posible mitigación

Puedes conservar o quitar la columna rowid después de la migración.

Funcionalidad integrada de Oracle no admitida

Posible causa raíz

Es posible que estés usando una funcionalidad integrada de Oracle que no es compatible.

Posible mitigación

Busca una funcionalidad similar en PostgreSQL y modifica el código convertido según corresponda. En algunos casos, la funcionalidad faltante puede proporcionarla la extensión Orafce, disponible para las migraciones de Cloud SQL para PostgreSQL y AlloyDB para PostgreSQL.

No se admite SQLCODE

Posible causa raíz

La función SQLCODE de Oracle no se admite para la conversión. SQLCODE devuelve un INTEGER, mientras que el equivalente más cercano en PostgreSQL es la función SQLSTATE que devuelve valores TEXT.

Posible mitigación

Si tu código fuente no depende de que SQLCODE devuelva un número entero (por ejemplo, SQLCODE solo se registra en una columna VARCHAR2 o con un mensaje DBMS_OUTPUT), entonces SQLSTATE se puede usar de forma segura en el código de PostgreSQL.

Si tu código fuente depende de que SQLCODE devuelva un número entero (por ejemplo, si lo usas con variables NUMBER o INTEGER, o si guardas los valores que devuelve SQLCODE como parámetros o columnas), debes refactorizar el código convertido.

No se admite la función de SQL de Oracle

Posible causa raíz

Database Migration Service no admite algunas funciones integradas de Oracle para la conversión.

Algunas funciones pueden tener sus equivalentes en PostgreSQL (por ejemplo, ASCII), otras pueden compartir el mismo nombre, pero tener especificaciones diferentes (por ejemplo, las funciones REGEXP%). Es posible que algunas funciones ni siquiera existan.

Posible mitigación

Inspecciona qué función de Oracle generó el error.

  • Si la función existe con el mismo comportamiento en PostgreSQL, puedes ignorar el mensaje de error, ya que el código convertido debería funcionar de la misma manera después de la migración.
  • Si una función tiene el mismo nombre, pero funciona de manera diferente o simplemente no existe en PostgreSQL, puedes intentar corregir el código convertido:

    • Crea una función definida por el usuario (UDF) con el mismo nombre en la base de datos de destino.
    • Reemplaza la llamada a función en la fuente por una expresión equivalente.
    • Usa la asistencia para la conversión mejorada con Gemini. Para obtener más información, consulta Convierte esquemas y código de SQL Server con la ayuda de Gemini.

    • Algunas funciones o características de la base de datos de Oracle se pueden replicar con extensiones, como Orafce. Para obtener más información sobre las extensiones compatibles con tu base de datos de destino, consulta Extensiones de base de datos compatibles.

No se admiten por completo los paquetes integrados de Oracle

Posible causa raíz

Database Migration Service admite ciertos paquetes integrados de Oracle, pero muchos no tienen compatibilidad total con la conversión, por ejemplo, DBMS_STATS, DBMS_UTILITY o DBMS_SQL.

Posible mitigación

Si usas paquetes no compatibles, es posible que debas hacer lo siguiente:

  • Cambia tu código. Por ejemplo, en lugar de usar DBMS_STATS.GATHER_TABLE_STATS, puedes usar un comando más simple, como ANALYZE.

    Es posible que los paquetes como UTL_FILE y DBMS_AQ requieran una refactorización, ya que no se pueden replicar con facilidad en PostgreSQL.

  • Algunas funciones o características de la base de datos de Oracle se pueden replicar con extensiones, como Orafce. Para obtener más información sobre las extensiones compatibles con tu base de datos de destino, consulta Extensiones de base de datos compatibles.

No se admite el tipo de datos de Oracle para la conversión

Posible causa raíz

Actualmente, algunos tipos de datos de Oracle no se admiten para la conversión o el movimiento de datos.

Posible mitigación

En la mayoría de los casos, PostgreSQL tiene un tipo de datos equivalente. Puedes usar archivos de asignación de conversiones para personalizar la lógica de conversión y transformar el tipo de datos de Oracle no compatible en el tipo de datos de PostgreSQL requerido.

Para obtener más información sobre la compatibilidad con los tipos de datos, consulta Espacios de trabajo de conversión: Descripción general y objetos compatibles.

Conflicto de nombres

Posible causa raíz

Este grupo captura problemas en los que varios objetos de la base de datos (como tablas, vistas materializadas) se convierten para usar el mismo nombre en la base de datos de destino. Por ejemplo, este problema puede ocurrir cuando tienes objetos de origen cuyos nombres solo difieren por mayúsculas o minúsculas. Los nombres de los objetos de Oracle no distinguen mayúsculas de minúsculas, pero PostgreSQL *sí* las distingue, por lo que los nombres de los objetos se convierten para usar la misma cadena.

Posible mitigación

Cambia el nombre de los objetos en conflicto directamente en la base de datos de origen o en el esquema convertido en el editor del espacio de trabajo de conversión. También puedes usar un archivo de asignación de conversiones con la directiva RENAME_*.

No se admite la función de origen

Posible causa raíz

En este grupo, se capturan todos los problemas genéricos relacionados con las funciones de Oracle que no se admiten para la conversión. Los problemas de este grupo no se incluyen en ningún otro grupo de problemas más específico.

Posible mitigación

No se admite el tipo de objeto de esquema

Posible causa raíz

Database Migration Service no admite ciertos tipos de objetos de esquema de Oracle para la conversión de código porque PostgreSQL no tiene equivalentes adecuados. Algunos ejemplos son las tablas organizadas por índices (IOT), los índices de Text Search o los cuerpos de los tipos definidos por el usuario (UDT).

Posible mitigación

Database Migration Service convierte los objetos no admitidos en el equivalente de PostgreSQL más cercano. Por ejemplo, las IOT se convierten en tablas normales con una restricción de clave primaria, y los índices de Text Search se convierten en índices de árbol B. Ten en cuenta que estas conversiones pueden provocar la pérdida de funcionalidad específica del tipo de objeto original.

No se admite la función de PL/SQL

Posible causa raíz

Este grupo captura todos los problemas genéricos relacionados con las funciones de PL/SQL que no se admiten para la conversión. Los problemas de este grupo no se incluyen en ningún otro grupo de problemas más específico.

Posible mitigación

No se admite la vinculación masiva

Posible causa raíz

Por el momento, la conversión de código de Database Migration Service no admite las funciones de vinculación masiva de Oracle, como BULK COLLECT, FORALL o SAVE EXCEPTIONS.

Posible mitigación

Para solucionar el problema, debes modificar el código que usa las funciones de vinculación masiva. Te recomendamos que consideres las diferencias en la arquitectura de PostgreSQL y Oracle, y si el procesamiento de arrays es necesario en PostgreSQL para tu caso de uso.

Existen varias estrategias para abordar las operaciones de vinculación masiva de Oracle en PostgreSQL. Su uso depende de tu situación específica, por lo que te recomendamos que uses la asistencia para la conversión potenciada por Gemini para satisfacer tus necesidades específicas. Aquí tienes algunas otras recomendaciones de ejemplo para ayudarte a comenzar:

  • Para un BULK COLLECT completo (sin LIMIT), puedes intentar usar la función ARRAY_AGG.
  • Para BULK COLLECT con LIMIT, puedes intentar usar un CURSOR FOR LOOP para cargar y procesar lotes de filas en arrays. Sin embargo, si tu caso permite cambios funcionales, una alternativa posiblemente más sencilla sería usar el CURSOR FOR LOOP para procesar una fila a la vez (en lugar de cargarlas en arrays).
  • Para las operaciones FORALL, puedes probar el DML basado en conjuntos con UNNEST si eliges usar el procesamiento de arrays.
  • Para SAVE EXCEPTIONS, es posible que debas escribir un controlador de excepciones dentro de un CURSOR FOR LOOP basado en filas, ya que no hay una cláusula equivalente en PostgreSQL.

No se admiten las colecciones

Posible causa raíz

La conversión de código de Database Migration Service tiene compatibilidad parcial con las colecciones de Oracle.

Posible mitigación

Debes modificar el código de PostgreSQL convertido según corresponda. Cuando resuelvas problemas con colecciones, recuerda que los arrays de PostgreSQL nunca son dispersos. Si asignas elementos de forma dispersa, los arrays de PostgreSQL pueden devolver resultados y recuentos de cardinalidad diferentes de los de Oracle.

Debido a que PostgreSQL no admite arrays indexados por cadenas, según la naturaleza de los datos, es posible que JSON/JSONB o las extensiones hstore sean adecuadas.

No se admiten las funciones canalizadas

Posible causa raíz

Database Migration Service no admite las funciones canalizadas.

Posible mitigación

Puedes reemplazar las funciones de canalización de Oracle por funciones de devolución de conjuntos de PostgreSQL. Te recomendamos que ajustes el código de manera que sea relevante para tu caso de uso. A continuación, te presentamos algunos ejemplos que pueden servirte para empezar:

  1. Haz referencia al tipo de PostgreSQL (UDT) que se convierte desde el objeto o tipo de registro de Oracle de origen que define el tipo de fila de la función canalizada. Luego, modifica la cláusula de devolución de la función de PostgreSQL para que sea RETURNS SETOF <type name> o RETURNS TABLE, según tu caso específico.

  2. Reemplaza el valor que se muestra en el código PIPE ROW convertido por RETURN NEXT <row or record variable>.

El tipo de colección de la función de canalización de origen, que se usa en la cláusula RETURN de la función de Oracle, no es necesario en PostgreSQL.

No se admite SQL dinámico

Posible causa raíz

Database Migration Service proporciona compatibilidad parcial para convertir SQL dinámico. Las palabras clave EXECUTE IMMEDIATE, OPEN FOR y USING/INTO de Oracle se convierten correctamente en sus equivalentes de PostgreSQL, pero las cadenas de SQL, DML o DDL dinámicas reales no se convierten.

Posible mitigación

Debes modificar el código convertido para que coincida con tus requisitos. Te recomendamos que uses la asistencia de conversión potenciada por Gemini para controlar SQL dinámico.

No se admite la opción CONNECT BY

Posible causa raíz

Database Migration Service admite la mayoría de los operadores, las funciones y las seudocolumnas de CONNECT BY, y los convierte en expresiones de tabla comunes (CTE) recursivas de PostgreSQL. Sin embargo, existen algunas excepciones que podrían requerir tu atención. Por ejemplo, la cláusula ORDER SIBLINGS BY solo se admite para el orden ascendente.

Posible mitigación

No es posible replicar la cláusula ORDER SIBLINGS BY para el orden descendente de manera simple, por lo que es posible que debas reestructurar tu código para que funcione con el orden ascendente.

Revisa los problemas informados con los operadores CONNECT BY y ajusta el código donde sea necesario. Te recomendamos que explores las funciones de conversión automática potenciadas por Gemini para acelerar estas correcciones. Para obtener más información, consulta Convierte código y esquemas de Oracle con la ayuda de Gemini.

No se admite JSON

Posible causa raíz

Existen ciertas limitaciones en la forma en que Database Migration Service admite JSON para el movimiento de datos y la conversión de código:

  • JSONB no es compatible con el movimiento de datos.
  • La conversión de código no admite las funciones o los operadores de consulta JSON en Oracle (como JSON_TABLE, JSON_QUERY, JSON_OBJECT[AGG], JSON_ARRAYAGG y JSON_PATCH).
  • En las versiones de Oracle anteriores a 21c, puedes almacenar datos JSON en columnas VARCHAR2, CLOB o BLOB, y verificarlos con la condición IS JSON. Database Migration Service no admite la conversión de esta condición.
Posible mitigación
  • Para mover los datos de JSON almacenados en las columnas VARCHAR2, CLOB o BLOB a PostgreSQL, es posible que debas escribir un archivo de asignación de conversión con la directiva MODIFY_TYPE.

    Por ejemplo:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

    Para obtener más información sobre los archivos de asignación de conversiones, consulta Archivos de asignación de conversiones.

  • Para convertir las funciones y los operadores JSON de Oracle en PostgreSQL, puedes usar funciones de PostgreSQL, como JSONB_ARRAY_ELEMENTS y JSON_AGG. Para obtener más información, consulta Funciones y operadores de JSON en la documentación de PostgreSQL.

Problemas con el bloqueo y las transacciones

Posible causa raíz

La conversión de código de Database Migration Service no admite sentencias LOCK ni SAVEPOINT. PostgreSQL no admite SAVEPOINT.

Posible mitigación
  • Divide los bloques SAVEPOINT en Oracle para separar los bloques de transacciones en PostgreSQL que usan la sentencia ROLLBACK.
  • Para implementar DBMS_LOCK, usa la extensión pg_dbms_lock de PostgreSQL. Esta extensión simplifica la migración de los bloqueos definidos por el usuario de Oracle a PostgreSQL emulando la funcionalidad del paquete DBMS_LOCK de Oracle.

No se admite XML

Posible causa raíz

Database Migration Service no admite XMLTYPE de Oracle ni las funciones y los operadores de XML asociados.

Posible mitigación

Aunque Database Migration Service no admite XMLTYPE de forma directa, puedes personalizar las columnas BLOB, CLOB, NVARCHAR2 o VARCHAR2 a XML para el movimiento de datos. PostgreSQL admite la funcionalidad de XML.

Para migrar tus datos XML, sigue estos pasos:

  1. Crea un archivo de asignación de conversiones con la directiva MODIFY_TYPE para los datos XML. Por ejemplo:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_XML_DATA:XML

    Para obtener más información sobre los archivos de asignación de conversiones, consulta Archivos de asignación de conversiones.

  2. Inicia el trabajo de migración. Este proceso migra todos los datos de Oracle a PostgreSQL, excepto los datos de las columnas de tipo XMLTYPE. Estas columnas se completan con valores NULL en PostgreSQL.
  3. Crea una tabla externa en PostgreSQL seleccionando solo la columna XMLTYPE de Oracle. Incluye la columna de clave primaria de la tabla de origen.
  4. Combina los datos XML de la tabla externa con la tabla original de PostgreSQL.

Para obtener más información sobre cómo funciona PostgreSQL con XMLTYPE, consulta Funciones XML en la documentación de PostgreSQL.

No se admite PIVOT

Posible causa raíz

Database Migration Service no admite los operadores de transposición PIVOT y UNPIVOT para la conversión de código.

Posible mitigación

Puedes lograr la transposición de PIVOT en PostgreSQL con la extensión tablefunc o reescribiendo la expresión PIVOT de origen en agregaciones condicionales. Por ejemplo:

  • SUM(CASE WHEN <condition> THEN <value> ELSE 0 END)
  • COUNT(CASE WHEN <condition> THEN 1 END)

Puedes crear transposiciones de UNPIVOT, que crean pares clave-valor a partir de un conjunto de columnas, en PostgreSQL de varias maneras:

  • Combinar una unión LATERAL con un conjunto de VALUES. Por ejemplo: SELECT ... FROM <table> CROSS JOIN LATERAL (VALUES ('<column1-name>', <column1>), ('<column2-name>', <column2>) AS u(column_name, column_value))
  • Usa UNNEST con ARRAY. Por ejemplo: SELECT ..., UNNEST(ARRAY['<column1-name>', '<column2-name>']) AS column_name, UNNEST(ARRAY[column1, column2]) AS column_value FROM <table>

No se admite la opción de sentencia ALTER

Posible causa raíz

Database Migration Service no admite sentencias ALTER (que, a menudo, se ejecutan en SQL dinámico) para la conversión.

Posible mitigación

Reemplaza las sentencias ALTER de Oracle por el comando SET en PostgreSQL. Te recomendamos que explores las funciones de conversión automática potenciadas por Gemini para acelerar estas correcciones. Para obtener más información, consulta Convierte código y esquemas de Oracle con la ayuda de Gemini.

No se admite la función de SQL

Posible causa raíz

Este grupo captura todos los problemas genéricos relacionados con las funciones de SQL que no se admiten para la conversión. Los problemas de este grupo no se incluyen en ningún otro grupo de problemas más específico. Entre los ejemplos, se incluyen activadores de eventos de base de datos, declaraciones GRANT, operaciones INSERT de varias tablas, DML en vistas intercaladas (INSERT INTO (SELECT ... FROM ...)) y vistas laterales.

Posible mitigación

Sintaxis no compatible

Posible causa raíz

Este grupo captura todos los problemas genéricos relacionados con la sintaxis de SQL o PL/SQL de Oracle no admitida. Los problemas de este grupo no se incluyen en ningún otro grupo de problemas más específico.

Posible mitigación

Cambia tu código para usar la sintaxis de PostgreSQL funcionalmente equivalente. Te recomendamos que explores las funciones de conversión automática potenciadas por Gemini para ajustar el código. Para obtener más información, consulta Convierte código y esquemas de Oracle con la ayuda de Gemini.

Sintaxis de SQL no compatible

Posible causa raíz

Tu código fuente usa sintaxis o elementos de SQL que no son compatibles con Database Migration Service. Por ejemplo, no se admite el parámetro NLS_LANG en la función TO_DATE de Oracle.

Posible mitigación
Sintaxis de PL/SQL no compatible

Posible causa raíz

Tu código fuente usa la sintaxis o los elementos de PL/SQL que no son compatibles con Database Migration Service. Por ejemplo, no se admiten las sentencias INSERT basadas en registros (como INSERT INTO table VALUES r_variable) ni PRAGMA RESTRICT_REFERENCES.

Posible mitigación

Cambia tu código para usar la sintaxis de PostgreSQL funcionalmente equivalente. Te recomendamos que explores las funciones de conversión automática potenciadas por Gemini para ajustar el código. Para obtener más información, consulta Convierte código y esquemas de Oracle con la ayuda de Gemini.

La sintaxis de fecha y marca de tiempo no es compatible

Posible causa raíz

Database Migration Service puede generar errores o advertencias para la sintaxis, las operaciones o las expresiones de fecha o marca de tiempo no admitidas. Entre los ejemplos de estos problemas, se incluyen comparaciones entre tipos de datos que no coinciden o el uso del modelo de formato TZH:TZM en marcas de tiempo. Para obtener más información sobre los objetos y los tipos de datos compatibles, consulta Acerca de los espacios de trabajo de conversión.

Posible mitigación

Puedes volver a crear la mayoría de las expresiones de fecha y marca de tiempo con equivalentes de PostgreSQL. Te recomendamos que explores las funciones de conversión automática potenciadas por Gemini para acelerar estas correcciones. Para obtener más información, consulta Convierte código y esquemas de Oracle con la ayuda de Gemini.

Elementos no compatibles de la sintaxis de manejo de excepciones de Oracle

Posible causa raíz

La conversión de código de Database Migration Service no admite los siguientes elementos de sintaxis de excepción de PL/SQL de Oracle:

  • El uso de RAISE_APPLICATION_ERROR con códigos de error variables en lugar de códigos -20nnn literales
  • El uso de SQLERRM con un argumento de código de error, ya que esta sintaxis no es compatible con PostgreSQL.
Posible mitigación

Debes resolver estos problemas de forma manual en el código convertido. Te recomendamos que explores las funciones de conversión automática potenciadas por Gemini para acelerar estas correcciones. Para obtener más información, consulta Convierte código y esquemas de Oracle con la ayuda de Gemini.

Problemas de conversión y tipos de datos

Posible causa raíz

Database Migration Service puede agrupar los problemas de conversión según el contexto (por ejemplo, problemas de conversión que ocurren en expresiones de comparación de tipos). El grupo CW_OP0500 captura todos los problemas de conversión de tipos de datos genéricos que no se incluyen en otros grupos de problemas.

Posible mitigación

En la mayoría de los casos, Database Migration Service emite un mensaje ERROR_UNIMPLEMENTED o ERROR_TYPE en el código de PostgreSQL convertido. Resuelve este error según tus conocimientos de los tipos de datos involucrados.

Problemas con el modelo de formato de fecha

Posible causa raíz

Es posible que encuentres advertencias o problemas cuando conviertas expresiones de fecha o marca de tiempo en cadenas o desde ellas según un modelo de formato. Database Migration Service usa un modelo predeterminado (actualmente DD-MON-RR) cuando las conversiones en el código fuente de Oracle excluyen un modelo de formato de fecha o marca de tiempo explícito.

En ocasiones, esto puede causar problemas en el código convertido si el modelo de formato emitido para la conversión implícita entra en conflicto con un modelo de formato explícito en la misma expresión. También es posible que veas este problema si es probable que tus datos se vean afectados por las diferencias entre el formato RR de Oracle y el formato YY de PostgreSQL.

Posible mitigación

Revisa y valida las expresiones de PostgreSQL convertidas en el espacio de trabajo de conversión.

Problemas con el modelo de formato numérico

Posible causa raíz

Database Migration Service no admite todos los modelos de formato de Oracle. Por ejemplo, no se admiten 'L' ni 'X'. Es posible que encuentres problemas o advertencias con el código que convierte cadenas en números según los modelos de formato de Oracle.

Posible mitigación

En el caso de los modelos de formato de Oracle que no tienen un equivalente en PostgreSQL, es posible que debas refactorizar tus expresiones o modelos de formato. Te recomendamos que explores las funciones de conversión automática potenciadas por Gemini para acelerar estas correcciones. Para obtener más información, consulta Convierte código y esquemas de Oracle con la ayuda de Gemini.

Problemas de conversión de tipos de datos

Posible causa raíz

Es posible que encuentres errores debido a la conversión de tipos de datos no admitidos o inexactos. Database Migration Service suele emitir ERROR_UNIMPLEMENTED. Por lo general, esto se debe a que faltan metadatos o están incompletos. Es posible que Database Migration Service no tenga suficiente información para convertir un tipo, por ejemplo, en argumentos de funciones o parámetros de procedimientos.

Posible mitigación

Ajusta el código de PostgreSQL para garantizar que las conversiones de tipos de datos sean correctas. Estas correcciones requieren que conozcas los atributos, las variables y las columnas a los que se hace referencia.

Problemas con la comparación

Posible causa raíz

Es posible que Database Migration Service no tenga suficientes metadatos o información sobre los tipos de datos cuando se convierten expresiones de comparación de datos. Por ejemplo, esto puede suceder cuando se compara un tipo definido por el usuario (UDT) con NULL.

Posible mitigación

Revisa las expresiones de PostgreSQL convertidas y resuelve los problemas. Te recomendamos que explores las funciones de conversión automática potenciadas por Gemini para acelerar estas correcciones. Para obtener más información, consulta Convierte código y esquemas de Oracle con la ayuda de Gemini.

Los problemas de esta categoría representan casos en los que el código fuente de Oracle se convierte correctamente en el equivalente de PostgreSQL más cercano, pero el código resultante puede tener diferencias semánticas o funcionales menores que requieren tu revisión. Esto sucede debido a las diferencias en la forma en que Oracle y PostgreSQL manejan los tipos de datos, los formatos o los objetos.

A primera vista, esta categoría puede parecer que se superpone con los problemas de la categoría Tipos de datos y conversión (CW_05), pero ten en cuenta que representan problemas diferentes. CW_05 contiene problemas conocidos en los que Database Migration Service no puede convertir el código de Oracle en su equivalente de PostgreSQL.

Revisa el modelo de formato de fecha

Posible causa raíz

La mayoría de los modelos de formato de fecha y marca de tiempo de Oracle tienen equivalentes adecuados en PostgreSQL, por lo que el código convertido no tiene diferencias semánticas ni funcionales. Algunos modelos no tienen una coincidencia exacta y su comportamiento varía. Un ejemplo es el formato RR de Oracle, que se convierte en el formato YY de PostgreSQL.

Posible mitigación

Revisa y valida las expresiones con conversiones de modelos de formato para asegurarte de que el código convertido se comporte como se espera.

Revisa el modelo de formato numérico

Posible causa raíz

La mayoría de los modelos de formato numérico de origen tienen un equivalente en PostgreSQL y, por lo tanto, el código convertido no tiene diferencias semánticas ni funcionales. Sin embargo, es posible que algunos modelos de formato no tengan una coincidencia exacta o se comporten de manera un poco diferente.

Posible mitigación

Revisa y valida las expresiones con conversiones de modelos de formato para asegurarte de que el código convertido funcione como se espera.

Revisa el código de excepción

Posible causa raíz

Cuando usas RAISE_APPLICATION_ERROR con un código de error en el rango de -20000 a -20999, Database Migration Service lo convierte en PostgreSQL RAISE EXCEPTION con un SQLSTATE en el rango de CW0000 a CW999. La conversión conserva los últimos 3 dígitos del código de error de origen y le agrega el prefijo CW.

Posible mitigación

Revisa este comportamiento para determinar si es adecuado para tus necesidades. Esta revisión solo es necesaria si los códigos de error de origen son significativos para tu aplicación, los equipos de asistencia o la documentación. Si el valor del código de error en sí no es significativo, puedes ignorar esta advertencia.

Revisa el mensaje de excepción

Posible causa raíz

La función SQLERRM existe tanto en Oracle PL/SQL como en PostgreSQL, pero puede devolver un texto de error diferente en cada motor. Por ejemplo, dividir por cero en Oracle devuelve el texto de error ORA-01476: divisor is equal to zero, pero ERROR: division by zero en PostgreSQL.

Posible mitigación

Si tu aplicación, infraestructura de asistencia o documentación dependen del texto del error, revisa la conversión. De lo contrario, puedes ignorar esta diferencia.

Revisa la emulación de funciones integradas de Oracle

Posible causa raíz

El objetivo de la conversión de código y esquemas de Database Migration Service es proporcionar el comportamiento de las funciones de Oracle con equivalentes de PostgreSQL, pero es posible que los resultados no siempre sean satisfactorios para tu situación. Por lo tanto, los espacios de trabajo de conversión siempre proporcionan advertencias con conversiones de funciones que podrían requerir tu revisión.

Posible mitigación

Te recomendamos que revises los objetos en los que los espacios de trabajo de conversión emiten advertencias en el grupo de problemas CW_OP0605.

Revisa el tipo de datos de la columna de clave externa

Posible causa raíz

Database Migration Service identificó especificaciones de tipos de datos que no coinciden entre los objetos superiores y secundarios (por ejemplo, cuando una columna superior es NUMBER(4) y la columna secundaria es NUMBER(10)).

Posible mitigación

La mayoría de las veces, las discrepancias leves en los tipos de datos no causan problemas en la funcionalidad de la base de datos. Sin embargo, te recomendamos que revises el modelo de datos convertido para detectar incoherencias.

Se recomienda una revisión funcional
Posible causa raíz

En este grupo, se capturan todos los problemas genéricos relacionados con las posibles diferencias funcionales en el código de Oracle y PostgreSQL. Los problemas de este grupo no se incluyen en ningún otro grupo de problemas más específico.

Posible mitigación

Revisa la emulación de funciones integradas de Oracle

Posible causa raíz

Muchas funciones integradas de Oracle no tienen un equivalente directo en PostgreSQL. Para ayudar a mitigar ese problema en las migraciones, Database Migration Service convierte tu código con diferentes expresiones de SQL para producir un comportamiento funcional equivalente en PostgreSQL.

En algunos casos, las expresiones convertidas pueden ser complejas. Database Migration Service emite advertencias en el grupo CW_OP0702 para destacar posibles problemas y avisar que se emuló una función con una expresión.

Posible mitigación

Revisa el código convertido para asegurarte de que las funciones convertidas se comporten como se espera en tu entorno de PostgreSQL.

Se requiere la refactorización de transacciones autónomas

Posible causa raíz

PostgreSQL no admite transacciones autónomas.

Posible mitigación

Puedes lograr transacciones autónomas en PostgreSQL con la extensión dblink, pg_background o PL/Proxy. Las llamadas a la base de datos que se realizan con cualquiera de estas extensiones se ejecutan en una sesión diferente y, por lo tanto, generan una transacción autónoma.

Se requiere la refactorización de los vínculos de la base de datos

Posible causa raíz

Database Migration Service no admite vínculos de bases de datos de Oracle. Los objetos que usan vínculos requieren refactorización.

Posible mitigación

Según el destino del vínculo de la base de datos, puedes implementar una funcionalidad equivalente en PostgreSQL con extensiones de base de datos, como dblink, postgres_fdw, oracle_fdw o PL/Proxy.

Se requiere la refactorización avanzada puesta en cola

Posible causa raíz

Los paquetes de Oracle Advanced Queuing (DBMS_AQ, DBMS_AQADM) no tienen equivalentes de PostgreSQL y requieren refactorización.

Posible mitigación

Considera las siguientes opciones:

  • Refactoriza la funcionalidad de cola fuera de la base de datos y en el nivel de aplicación.
  • Usa tablas, alertas y activadores de PostgreSQL para implementar un comportamiento equivalente.
  • Consulta al representante de tu equipo de soluciones técnicas para obtener más asistencia.

Se requiere la refactorización del correo electrónico de la base de datos

Posible causa raíz

Cloud SQL para PostgreSQL no admite el envío de correos electrónicos directamente desde la base de datos. Tampoco se admiten las extensiones que habilitan esta funcionalidad. Por lo tanto, Database Migration Service no convierte los usos del paquete UTL_SMTP.

Posible mitigación

Refactoriza el código de correo electrónico de la base de datos y traslada la responsabilidad de enviar correos electrónicos al nivel de la aplicación. Aún puedes usar la base de datos para capturar las condiciones en las que se requiere enviar un correo electrónico.

Un ejemplo de implementación podría ser escribir los detalles del correo electrónico en una tabla dedicada. Esta tabla también puede actuar como una cola de correos electrónicos que sondeas con una función de Cloud Run Functions y controlar el procesamiento SMTP real.

Se requiere la refactorización de trabajos y de programación

Posible causa raíz

Database Migration Service no convierte los paquetes de Oracle DBMS_JOB ni DBMS_SCHEDULER. Debes refactorizar el código que hace referencia a estos paquetes.

Posible mitigación

Para trabajos simples sin dependencias, puedes crear trabajos programados de forma manual en la base de datos de PostgreSQL de destino con la extensión pg_cron.

Para programas más complejos que pg_cron no admite, es posible que debas usar un programador de nivel de aplicación o de terceros.

Se requiere la refactorización de E/S de archivos

Posible causa raíz

Database Migration Service no admite el paquete UTL_FILE de Oracle. Debes refactorizar el código que hace referencia a estos paquetes.

La extensión Orafce incluye la emulación de UTL_FILE, pero es posible que no funcione en un entorno de PostgreSQL administrado por Google debido a las capacidades restringidas de E/S de archivos.

Posible mitigación
  • Refactoriza tu código para quitar las dependencias de UTL_FILE.
  • Cloud SQL para PostgreSQL tiene ciertas restricciones en las capacidades de E/S de archivos, por lo que no es posible implementar este comportamiento directamente en la base de datos de destino.

    Una alternativa posible podría ser instalar PostgreSQL con la extensión orafce en una VM de Compute Engine en tu VPC. Luego, puedes usar la extensión PL/Proxy en tu base de datos de destino para llamar a la versión de UTL_FILE compatible con PostgreSQL que se ejecuta en la base de datos de la VM de Compute Engine.

Sinónimos

Posible causa raíz

PostgreSQL no admite sinónimos. En el caso de los objetos de código, Database Migration Service reemplaza automáticamente las referencias de sinónimos por su esquema de origen y nombre de objeto. Si usas sinónimos fuera de los objetos de código, por ejemplo, en esquemas de solo lectura para usuarios de aplicaciones de bases de datos, debes convertirlos de forma manual.

Posible mitigación

Para el uso de sinónimos fuera de los objetos de código, puedes usar el parámetro SEARCH_PATH de PostgreSQL o refactorizar tu código para usar vistas para los objetos de consulta.

Se requiere la refactorización de las tablas temporales globales

Posible causa raíz

Este grupo de problemas es una advertencia de que Database Migration Service detectó una tabla temporal global en tu código fuente de Oracle. Para migrar tablas temporales globales, debes tener instalada y creada la extensión pgtt de PostgreSQL en la base de datos de destino.

Posible mitigación

Te recomendamos que verifiques que tienes la extensión pgtt de PostgreSQL instalada y creada en la base de datos de destino.

Revisa las sugerencias de Gemini

Posible causa raíz:

Este grupo de problemas captura todos los errores y advertencias genéricos relacionados con la conversión de código mejorada con Gemini.

Posible mitigación: Es posible que los problemas que se encuentran aquí no siempre indiquen problemas reales, pero te recomendamos que revises todas las conversiones mejoradas por Gemini para asegurarte de que cumplan con tus expectativas.

Revisa el código potenciado con IA

Posible causa raíz: Este código DDL se convirtió con funciones mejoradas de Gemini y es posible que debas revisarlo para verificar su exactitud.

Posible mitigación Te recomendamos que revises con atención el código convertido con potenciaciones con IA para asegurarte de que el resultado final coincida con la funcionalidad de tu esquema de origen.

Citas

Posible causa raíz: Las sugerencias mejoradas con Gemini pueden incluir contenido citado de varias fuentes. Es posible que algunas citas estén sujetas a restricciones de licencia. Te recomendamos que revises el código convertido para ver las citas.

Problemas de conversión de metadatos

Posible causa raíz:

Este grupo captura todos los problemas de conversión que no se incluyen en ningún otro grupo de problemas más específico.

Posible mitigación

Te recomendamos que revises el código convertido según tu conocimiento del modelo de datos de origen y que lo ajustes según sea necesario.

Problemas de conversión de metadatos

Posible causa raíz:

Este grupo captura todos los problemas de seguimiento de metadatos que no se incluyen en ningún otro grupo de problemas más específico.

Posible mitigación:

Los ejemplos de problemas en este grupo suelen estar relacionados con errores o advertencias de compilación que pueden generar problemas con los tipos de datos en el PostgreSQL convertido. Te recomendamos que revises el código convertido según tu conocimiento del modelo de datos de origen y que ajustes las referencias defectuosas.

Comunícate con tu equipo de asistencia al cliente

Posible causa raíz

En casos extremos especiales, es posible que encuentres un error interno con un objeto de origen de Oracle válido. Si es así, comunícate con tu equipo de asistencia para obtener más ayuda.

Problemas generales con las conversiones

Posible causa raíz

Este grupo contiene todos los problemas que no se incluyen en ninguna otra categoría o grupo de problemas más específico.

Posible mitigación

Te recomendamos que revises el código convertido según tu conocimiento del modelo de datos y el código de origen, y que lo ajustes según sea necesario.