Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se resumen las limitaciones conocidas, los objetos no admitidos y las consideraciones de migración al usar Oracle para Azure Database for PostgreSQL característica de conversión de esquemas en Visual Studio Code.
Limitaciones de compatibilidad con la plataforma
- ARM64: no se admite en Windows o Linux.
Objetos no admitidos y parcialmente admitidos
En las secciones siguientes se enumeran los objetos de Oracle que la herramienta no convierte o que convierte con una diferencia de comportamiento que necesita controlar. Los objetos que se convierten limpiamente no aparecen aquí.
Estas tablas describen el resultado típico de cada clase de objeto. Un objeto individual todavía puede necesitar atención cuando usa una construcción que no convierte, como una función que llama a una rutina de Java, por lo que el informe por objeto de su propia ejecución de conversión es autoritativo para el esquema.
El sistema Oracle y los esquemas incorporados no se extraen ni se convierten. Esto incluye esquemas como SYS, , SYSTEMXDB, MDSYS, , CTXSYSy WMSYS.
Note
Los objetos que extrae la herramienta, pero no se pueden convertir completamente , se agregan al informe de conversión de esquemas como tareas de revisión. Puede resolver esas tareas manualmente o con la ayuda del modo agente de Copilot de GitHub.
Salida del marcador de posición
Cuando la herramienta no puede generar una conversión de trabajo para un objeto, emite el mejor esfuerzo o DDL de marcador de posición en lugar de quitar el objeto. El marcador de posición mantiene el nombre y la firma del original para que los objetos que dependen de él sigan convirtiendo e implementando. Este enfoque impide que un número reducido de objetos de problema bloqueen el resto del esquema.
Un marcador de posición no es funcional. El informe de conversión de esquema marca cada objeto que recibe uno según sea necesario revisar antes de implementarlo. Los objetos que dependen de un marcador de posición también se pueden recuperar del script de implementación generado, por lo que una única rutina no convertida puede afectar a varios otros objetos.
Las causas más comunes son:
- Transacciones autónomas. Las rutinas que usan
PRAGMA AUTONOMOUS_TRANSACTIONson la causa única más grande. La conversión enruta el trabajo autónomo a travésdblinkde , por lo que sidblinkno está instalado en el destino al convertir, estas rutinas se revierten a la salida del marcador de posición. Las rutinas cuyo cuerpo no es un simpleINSERTseguido deCOMMIT, o que contienen un controlador de excepciones o unaMERGEinstrucción, también necesitan revisión manual. - Una referencia a la herramienta no se pudo resolver. Un objeto que hace referencia a otro objeto que la herramienta no ha convertido o que ha convertido en una unidad de trabajo diferente, no se puede comprobar la compilación.
- Instrucciones de control de transacciones. Construcciones como
ROLLBACK TO SAVEPOINTno siempre se convierten limpiamente. - PL/SQL encapsulado. Estos siempre generan un marcador de posición. Para obtener más información, vea Pl/SQL encapsulado.
Objetos programables
| Tipo de objeto | Limitación | Qué hacer |
|---|---|---|
| Cuerpo del paquete | El estado del paquete se asigna a las variables de sesión de PostgreSQL, por lo que el estado que persiste en las llamadas no se comporta igual que una instancia de paquete de Oracle. | Pruebe que el estado compartido se comporta como espera la aplicación. |
Rutina que usa PRAGMA AUTONOMOUS_TRANSACTION |
El trabajo autónomo se ejecuta en una conexión independiente a través dblinkde , por lo que se confirma independientemente del autor de la llamada y no se revierte si se produce un error en el autor de la llamada. Varias formas corporales necesitan revisión manual. |
Instale dblink antes de convertir y revise cada rutina para confirmar que esta diferencia es aceptable. |
| Desencadenador (evento del sistema) | La herramienta solo LOGON reconoce y LOGOFF como subtipos de evento del sistema.
STARTUPLos desencadenadores , SHUTDOWNy SERVERERROR no se clasifican como desencadenadores de eventos del sistema, por lo que pueden pasar a la conversión y generar resultados que no funcionan en PostgreSQL. |
Revise el origen de estos desencadenadores y vuelva a implementar la lógica fuera de la base de datos. |
| Desencadenador (edición cruzada) | No se detecta la redefinición basada en ediciones. Un desencadenador entre ediciones se convierte en un desencadenador normal, por lo que se activa para cada sesión en lugar de solo para la manipulación de datos que cruza ediciones. | Convierta una sola edición y controle la implementación de versiones en el proceso de lanzamiento. |
| Cuerpo del tipo | No extraído. | Reimplement métodos de tipo de objeto como funciones de PostgreSQL. |
| Java origen, procedimiento almacenado Java y clase Java | No extraído. Azure Database for PostgreSQL servidor flexible no se puede ejecutar Java en la base de datos. | Vuelva a escribir la lógica en PL/pgSQL o muévala a la capa de aplicación. |
Biblioteca C externa (CREATE LIBRARY) |
No extraído. | Vuelva a escribir la lógica en PL/pgSQL o muévala a la capa de aplicación. |
| PL/SQL encapsulado | No se puede leer el cuerpo, por lo que solo se genera un marcador de posición. Para obtener más información, vea Pl/SQL encapsulado. | Proporcione el origen desencapsulado original y vuelva a convertirlo. |
PL/SQL encapsulado
La herramienta no puede leer el origen de las unidades PL/SQL almacenadas en formularios encapsulados (ofuscados) mediante la utilidad Oracle wrap o DBMS_DDL.WRAP. La herramienta detecta estas unidades, lee sus metadatos de firma del diccionario de datos de Oracle y genera una rutina de PostgreSQL que tiene el mismo nombre y firma y un cuerpo que genera un error cuando se llama.
Este marcador de posición permite a los objetos que dependen de la unidad ajustada convertir e implementar. La rutina generada no contiene lógica y el informe de conversión de esquema enumera todos los objetos encapsulados como una tarea de revisión que debe resolver antes de continuar.
Para convertir correctamente una unidad ajustada, proporcione el origen desencapsulado original y vuelva a ejecutar la conversión.
Objetos de datos y almacenamiento
| Tipo de objeto | Limitación | Qué hacer |
|---|---|---|
Operador definido por el usuario (CREATE OPERATOR) |
No se garantiza la conversión y puede generar una salida de marcador de posición. | Revise el operador generado y pruábelo. |
| Índice (mapa de bits, combinación de mapa de bits, particionado global o dominio) | No extraído. PostgreSQL no usa índices de dominio ni mapa de bits de Oracle. | Normalmente no hay ninguna acción funcional. Ajuste las consultas sensibles al rendimiento en el destino. |
Registro de vista materializado (MLOG$) |
No extraído. | Nada. Se trata de objetos compatibles con la actualización de Oracle que PostgreSQL no necesita. |
| Tabla externa | No extraído. Azure Database for PostgreSQL servidor flexible no tiene acceso al sistema de archivos de servidor, por lo que file_fdw no está disponible. |
Cargue el archivo en una tabla con un lado \copy cliente o COPY ... FROM STDIN, con la extensión o a través de la azure_storage aplicación. |
| Tabla Advanced Queuing (AQ) | No extraído. Oracle Advanced Queuing lleva lógica de aplicación. | Vuelva a diseñarla con una cola de aplicaciones, una extensión de PostgreSQL o un servicio de mensajería Azure. |
| Tabla de cadena de bloques | No extraído. | Vuelva a implementar el requisito de integridad en la capa de aplicación. |
| Clúster y clúster hash | No extraído. | Vuelva a crear como una tabla sin formato o con particiones. |
Objeto Directory (CREATE DIRECTORY) |
No extraído. | Controle el acceso a archivos en la capa de aplicación. |
Tipo de índice definido por el usuario (CREATE INDEXTYPE) |
No extraído. | Vuelva a crear el método de acceso con un índice de extensión postgreSQL donde exista uno. |
| Vínculo de base de datos | No convertido. Para obtener más información, vea Vínculos de base de datos. | Vuelva a crear con un contenedor de datos externos. |
Contexto de aplicación (CREATE CONTEXT, DBMS_SESSION.SET_CONTEXT) |
No extraído. | Asigne el contexto a la configuración de sesión de PostgreSQL y léelas con current_setting(). |
| Vista analítica, dimensión de atributo, jerarquía, dimensión OLAP, modelo de minería de datos y mapa de zona materializado | No extraído. No tienen ningún destino de PostgreSQL. | Vuelva a generar la salida necesaria como vistas o funciones, o colóquela. |
Cláusula de almacenamiento LOB, esquema XML registrado (DBMS_XMLSCHEMA.REGISTERSCHEMA) y índice enlazado a esquema XML |
No extraído. | Remodele el requisito de almacenamiento o validación en el destino. |
| Resource Manager plan y grupo de consumidores, perfil de SQL, línea base del plan de SQL, edición, perfil de traducción de SQL, directiva de administración del ciclo de vida de la información, perfil de bloqueo y objeto del Administrador de áreas de trabajo | No extraído. Se trata de artefactos de instancia, optimizador o ciclo de vida de Oracle que están fuera del ámbito. | Vuelva a crearlos en la capa de aplicación o infraestructura, o colóquelos en Azure Database for PostgreSQL. |
Vínculos de base de datos
La herramienta no convierte automáticamente vínculos de base de datos privados y públicos (CREATE DATABASE LINK, CREATE PUBLIC DATABASE LINK). Los vínculos de base de datos almacenan las credenciales y la información del punto de conexión remoto que no se traducen directamente en PostgreSQL.
Vuelva a crear estos vínculos en el destino mediante un contenedor de datos externos de PostgreSQL, como postgres_fdw o oracle_fdw, o refactorice en conexiones de nivel de aplicación. Busque en el origen @link de Oracle las referencias para que encuentre todas las dependencias, incluidas las referencias dentro de sinónimos y vistas.
Objetos de seguridad e identidad
Los usuarios, los roles, los privilegios y las directivas de protección de datos son la mayor brecha en la conversión. La herramienta convierte objetos de esquema, no la capa de seguridad alrededor de ellos. Trate esta área como una secuencia de trabajo manual independiente y planee el inventario de origen de Oracle en lugar del informe de conversión de esquemas.
| Tipo de objeto | Limitación | Qué hacer |
|---|---|---|
| Usuario | No extraído. | Aprovisione los inicios de sesión por separado en Azure. Vuelva a crear cada usuario como rol de PostgreSQL y valide el acceso resultante antes de iniciarse. |
| Rol | No extraído. | Vuelva a crear cada rol en el destino. |
| Privilegios del sistema | No extraído. | Vuelva a crearse como instrucciones PostgreSQL GRANT . |
| Pertenencia a roles | No extraído. | Vuelva a crear como GRANT <role> TO <role> instrucciones . |
| Privilegio y concesión de objetos | La extracción de concesión está desactivada de forma predeterminada y cubre solo las concesiones de objetos. | Vuelva a crear concesiones desde el inventario de origen y después validelas. |
Seguridad de nivel de fila y base de datos privada virtual (DBMS_RLS) |
No convertido. | Vuelva a crear las directivas como directivas de seguridad de nivel de fila de PostgreSQL. |
| Seguridad de etiquetas de Oracle | No convertido. | Rediseñe los límites de acceso a datos en el destino. |
Redacción de datos (DBMS_REDACT) |
No convertido. | Vuelva a aplicar el enmascaramiento en el destino, en el nivel de aplicación o con un equivalente de PostgreSQL. |
Perfil, directiva de contraseña y directiva de auditoría unificada o específica (DBMS_FGA, AUDIT POLICY) |
No extraído. | Configure los parámetros y auditorías de servidor de Azure equivalentes y administrelos como infraestructura como código. |
Importante
La herramienta no lleva a cabo directivas de seguridad de nivel de fila, base de datos privada virtual, seguridad de etiquetas de Oracle y redacción de datos. Un esquema convertido implementa y devuelve datos sin ellos, por lo que las filas filtradas por Oracle son visibles y las columnas que Oracle enmascarada se devuelven en texto no cifrado. Vuelva a crear estas directivas y comprutelas antes de enrutar el tráfico de producción al destino.
Objetos scheduler
La herramienta no convierte los metadatos del programador de Oracle en programaciones de PostgreSQL en funcionamiento.
| Tipo de objeto | Limitación | Qué hacer |
|---|---|---|
DBMS_SCHEDULER trabajo y programación |
No convertido. | Vuelva a crear la programación en el destino con pg_crono use un programador externo, como Azure Logic Apps o Azure Functions. |
Trabajo heredado DBMS_JOB |
No detectado. | Vuelva a crear la programación con pg_cron o un programador de aplicaciones. |
| Programa, cadena, credencial, monitor de archivos, clase de trabajo, grupo, ventana y trabajo basado en eventos | No convertido. | Recompile la orquestación en un programador externo. |
Brechas de nivel de característica
Los siguientes elementos son características de Oracle en lugar de tipos de objeto. La herramienta no detecta estas características ni las convierte de forma que pierda parte del comportamiento original, por lo que no siempre aparecen como una tarea de revisión.
| Feature | Limitación | Qué hacer |
|---|---|---|
| Tabla con particiones híbridas (Oracle 19.3 y versiones posteriores) | Convierte como una tabla normal y se pierden las particiones externas. | Identifique las tablas con particiones híbridas en el origen y cargue los datos externos por separado. |
| Vista de edición y desencadenador entre ediciones | No se detecta la redefinición basada en ediciones. Una vista de edición se convierte como una vista sin formato. | Convierta una edición y, a continuación, controle la implementación de versiones manualmente. |
| Tabla inmutable (Oracle 19.11 y versiones posteriores) | No se ha detectado y no hay ningún equivalente de PostgreSQL. | Aplique el requisito en la capa de aplicación o con desencadenadores. |
| Archivo de datos de Flashback | El historial temporal no está modelado. | Use un patrón de tabla de historial o una extensión temporal en el destino. |
Consulta de flashback (AS OF TIMESTAMP, AS OF SCN) |
No convertido. | Reescriba las consultas que leen versiones históricas de una fila. |
| Particionamiento de Oracle | No se modela y no hay ningún equivalente de PostgreSQL de base de datos única. | Rediseñe la estrategia de distribución. |
BFILE y detalles de LOB de SecureFile |
Solo se controla como una nota genérica sobre los tipos exóticos. | Revise el patrón de almacenamiento y acceso para cada columna. |
El convertidor controla las columnas de identidad, las columnas virtuales y las generadas, las columnas invisibles y las tablas temporales globales. Las tablas temporales privadas solo existen en tiempo de ejecución, por lo que no aparecen en el inventario de origen.
Obtención de ayuda
Cuando encuentre limitaciones:
- Use el modo agente de Copilot de GitHub para obtener ayuda guiada con las tareas de revisión.
- Consulte la documentación de PostgreSQL para ver implementaciones alternativas.
- Procedimientos recomendados para patrones de migración de Oracle a Azure Database for PostgreSQL.
- Pruebe en un entorno temporal antes de realizar la implementación en producción.