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 los errores y las advertencias de conversión. Cada categoría representa el tipo de trabajo que tal vez debas realizar para corregir los problemas (revisar, refactorizar, ajustar los tipos de datos). Los grupos proporcionan una mayor agregación, ya que diferencian los casos específicos en un nivel inferior:

Pantalla de descripción general del espacio de trabajo de conversiones 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 Conversiones con grupos y categorías de problemas de conversión.
Pantalla de descripción general del espacio de trabajo de conversiones 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 del esquema:

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, falta la palabra clave END; en un procedimiento almacenado).

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 del esquema. 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 que faltan.

Los posibles errores en este grupo incluyen tipos de datos incorrectos para los tipos definidos por el usuario (UDT) o los tipos de datos VARCHAR predeterminados 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 manualmente 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. En el caso de las tablas sin claves primarias, Database Migration Service agrega una columna NUMERIC llamada rowid a la tabla PostgreSQL de destino. Esta columna se propaga con los valores numéricos correspondientes de la seudocolumna ROWID de Oracle de origen. Para garantizar que las sentencias INSERT no fallen después de la migración, Database Migration Service crea una secuencia y la usa para incrementar automáticamente la columna rowid.

Posible mitigación

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

Funcionalidad integrada de Oracle no compatible

Posible causa raíz

Es posible que estés usando una funcionalidad integrada de Oracle que no se admite.

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 proporcionarse a través de la extensión Orafce, disponible para las migraciones de Cloud SQL para PostgreSQL y AlloyDB para PostgreSQL.

SQLCODE aún no está disponible

Posible causa raíz

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

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, lo usas con variables NUMBER o INTEGER, o guardas los valores de retorno de SQLCODE como parámetros o columnas), debes refactorizar el código convertido.

Aún 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), mientras que otras pueden compartir el mismo nombre, pero tener especificaciones diferentes (por ejemplo, las funciones REGEXP%). Es posible que algunas funciones no 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 la función en la fuente por una expresión equivalente.
    • Usar la asistencia para la conversión mejorada con Gemini Para obtener más información, consulta Convierte código y esquemas de SQL Server con la asistencia 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 admitidas en la base de datos de destino, consulta Extensiones de bases 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 completa 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 refactorización porque no se pueden replicar fácilmente 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 admitidas en la base de datos de destino, consulta Extensiones de bases de datos compatibles.

Aún no se admite la conversión del tipo de datos de Oracle

Posible causa raíz

Actualmente, algunos tipos de datos de Oracle no son compatibles con la conversión ni la transferencia 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 conversión para personalizar la lógica de conversión y transformar el tipo de datos de Oracle no admitido en el tipo de datos de PostgreSQL requerido.

Para obtener más información sobre la compatibilidad con los tipos de datos, consulta Conversion workspaces - overview and supported objects.

Aún no se admite la función de origen

Posible causa raíz

Este grupo captura todos los problemas genéricos relacionados con las funciones de Oracle que no son compatibles con 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. Entre los ejemplos, se incluyen las tablas organizadas por índices (IOT), los índices de búsqueda de texto o los cuerpos para 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 búsqueda de texto se convierten en índices de árbol B. Ten en cuenta que estas conversiones pueden provocar la pérdida de funciones específicas del tipo de objeto original.

Aún 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

Aún no se admite la vinculación masiva

Posible causa raíz

Actualmente, la conversión de código de Database Migration Service no admite 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. Tal vez quieras considerar 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 utilices la asistencia para conversiones potenciada por Gemini para satisfacer tus necesidades específicas. Aquí tienes 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 simple sería usar 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.

Aún 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 las colecciones, recuerda que los arrays de PostgreSQL nunca son dispersos. Si asignas elementos de forma dispersa, los arreglos de PostgreSQL pueden devolver resultados y recuentos de cardinalidad diferentes de los arreglos de Oracle.

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

Aún 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 canalizadas de Oracle por funciones que devuelven conjuntos de PostgreSQL. Te recomendamos que ajustes el código de una manera que sea pertinente para tu caso de uso. Estos son algunos ejemplos para ayudarte a comenzar:

  1. Hace referencia al tipo de PostgreSQL (UDT) que se convierte del tipo de objeto o 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 de devolución en el código PIPE ROW convertido por RETURN NEXT <row or record variable>.

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

Aún no se admite la opción de SQL dinámico

Posible causa raíz

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

Posible mitigación

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

Aún 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 ciertas 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 una manera sencilla, 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 de 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 Cómo convertir código y esquemas de Oracle con la asistencia de Gemini.

Aún 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 ni los operadores de consulta JSON en Oracle (como JSON_TABLE, JSON_QUERY, JSON_OBJECT[AGG], JSON_ARRAYAGG, JSON_PATCH).
  • En las versiones de Oracle anteriores a 21c, puedes almacenar datos de JSON en columnas de 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 transferir 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 a PostgreSQL, puedes usar funciones de PostgreSQL, como JSONB_ARRAY_ELEMENTS y JSON_AGG. Para obtener más información, consulta Funciones y operadores 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 utilizan la instrucción 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, ya que emula la funcionalidad del paquete DBMS_LOCK de Oracle.

Aún no se admite XML

Posible causa raíz

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

Posible mitigación

Aunque Database Migration Service no admite directamente XMLTYPE, puedes personalizar las columnas BLOB, CLOB, NVARCHAR2 o VARCHAR2 a XML para el movimiento de datos. PostgreSQL admite la funcionalidad 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.t
  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 en la tabla original de PostgreSQL.

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

PIVOT aún no está disponible

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 fuente PIVOT en agregaciones condicionales. Por ejemplo:

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

Puedes crear transposiciones 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))
  • Usar UNNEST con ARRAY Por ejemplo: SELECT ..., UNNEST(ARRAY['<column1-name>', '<column2-name>']) AS column_name, UNNEST(ARRAY[column1, column2]) AS column_value FROM <table>

Aún no se admite la opción de instrucción ALTER

Posible causa raíz

Database Migration Service no convierte las sentencias ALTER (que a menudo se ejecutan en SQL dinámico).

Posible mitigación

Reemplaza las instrucciones 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 Cómo convertir código y esquemas de Oracle con la asistencia de Gemini.

Aún 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 los activadores de eventos de bases de datos, las sentencias GRANT, las operaciones INSERT de varias tablas, el DML en vistas intercaladas (INSERT INTO (SELECT ... FROM ...)) y las 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 Oracle SQL o PL/SQL 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 Cómo convertir código y esquemas de Oracle con la asistencia 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 de 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 sintaxis o 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 Cómo convertir código y esquemas de Oracle con la asistencia 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 las 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 admitidos, 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 los 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 Cómo convertir código y esquemas de Oracle con la asistencia 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 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 Cómo convertir código y esquemas de Oracle con la asistencia 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 genéricos de conversión de tipos de datos 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 tu conocimiento de los tipos de datos involucrados.

Problemas con la máscara de formato de fecha

Posible causa raíz

Es posible que encuentres advertencias o problemas cuando conviertas expresiones de fecha o marca de tiempo a 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.

A veces, 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 la máscara 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 Cómo convertir código y esquemas de Oracle con la asistencia de Gemini.

Problemas de conversión de tipos de datos

Posible causa raíz

Es posible que se produzcan errores debido a la conversión de tipos de datos no admitidos o imprecisos. 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 las conversiones correctas de los tipos de datos. Estas correcciones requieren que conozcas los atributos, las variables y las columnas a los que haces 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 convierte expresiones de comparación de datos. Por ejemplo, esto puede ocurrir 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 Cómo convertir código y esquemas de Oracle con la asistencia de Gemini.

Los problemas de esta categoría representan casos en los que el código fuente de Oracle se convierte correctamente al equivalente más cercano de PostgreSQL, 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 controlan los tipos de datos, los formatos o los objetos.

A primera vista, esta categoría podría 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 a su equivalente en PostgreSQL.

Revisa la máscara del 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 según lo esperado.

Revisa la máscara del formato numérico

Posible causa raíz

La mayoría de los modelos de formato numérico de origen tienen un equivalente en PostgreSQL, por lo que 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 ligeramente diferente.

Posible mitigación

Revisa y valida las expresiones con conversiones de modelos de formato para asegurarte de que el código convertido funcione según lo esperado.

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 RAISE EXCEPTION de PostgreSQL con un SQLSTATE en el rango de CW0000 a CW999. La conversión conserva los últimos 3 dígitos del código de error fuente y les 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 fuente son significativos para tu aplicación, los equipos de asistencia o la documentación. Si el valor del código de error 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

La conversión de código y esquemas de Database Migration Service tiene como objetivo proporcionar el comportamiento de las funciones de Oracle con equivalentes de PostgreSQL, pero los resultados podrían no ser siempre satisfactorios para tu situación. Por lo tanto, los espacios de trabajo de conversión siempre proporcionan advertencias sobre las 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 objetos principales y secundarios (por ejemplo, cuando una columna principal es NUMBER(4) y la columna secundaria es NUMBER(10)).

Posible mitigación

La mayoría de las veces, las pequeñas discrepancias 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

Este grupo captura todos los problemas genéricos relacionados con 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 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 advertir 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 las extensiones dblink, pg_background o PL/Proxy. Las llamadas a la base de datos realizadas 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 de la vinculación de la base de datos, puedes implementar una funcionalidad equivalente en PostgreSQL con extensiones de bases 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 en PostgreSQL y requieren refactorización.

Posible mitigación

Considera las siguientes opciones:

  • Refactoriza la funcionalidad de filas fuera de la base de datos y hacia el nivel de la 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 asistencia adicional.

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 transfiere la responsabilidad de enviar correos electrónicos al nivel de la aplicación. Aun así, puedes usar la base de datos para registrar las condiciones en las que se requiere enviar correos electrónicos.

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 sondea con una función de Cloud Run Functions y controla el procesamiento real de SMTP.

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 y DBMS_SCHEDULER. Debes refactorizar el código que hace referencia a estos paquetes.

Posible mitigación

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

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

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 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 el esquema de origen y el nombre del objeto. Si usas sinónimos fuera de los objetos de código, por ejemplo, en esquemas de solo lectura para los usuarios de aplicaciones de bases de datos, debes convertirlos de forma manual.

Posible mitigación

Para usar 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.

Tablas temporales globales

Posible causa raíz

Este grupo de problemas es una advertencia que indica que Database Migration Service detectó una tabla temporal global en el 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 la extensión pgtt de PostgreSQL esté 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 las advertencias genéricos relacionados con la conversión de código mejorada con Gemini.

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

Revisa el código aumentado con IA

Posible causa raíz: Este código DDL se convirtió con funciones mejoradas con Gemini y es posible que necesite tu revisión para garantizar su precisión.

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

Citas

Posible causa raíz: Las sugerencias mejoradas por 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 abarca todos los problemas relacionados con las conversiones que no se incluyen en otros grupos de problemas más específicos.

Posible mitigación

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

Problemas de conversión de metadatos

Posible causa raíz:

Este grupo abarca 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:

Por lo general, los ejemplos de problemas en este grupo se relacionan 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 fuente de Oracle válido. Si es así, comunícate con el equipo de asistencia al cliente para obtener ayuda adicional.

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íficos.

Posible mitigación

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