Limitações da conversão de esquema do Oracle para o servidor flexível do Banco de Dados do Azure para PostgreSQL

Este artigo resume as limitações conhecidas, os objetos sem suporte e as considerações de migração ao usar o recurso de conversão de esquema do Oracle para o Banco de Dados do Azure para PostgreSQL no Visual Studio Code.

Limitações de suporte à plataforma

  • ARM64: sem suporte em Windows ou Linux.

Objetos sem suporte e parcialmente compatíveis

As seções a seguir listam objetos Oracle que a ferramenta não converte ou que ela converte com uma diferença de comportamento que você precisa manipular. Os objetos que são convertidos de forma limpa não estão listados aqui.

Essas tabelas descrevem o resultado típico para cada classe de objeto. Um objeto individual ainda pode precisar de atenção quando usa um constructo que não é convertido, como uma função que chama uma rotina de Java, portanto, o relatório por objeto de sua própria execução de conversão é autoritativo para seu esquema.

O sistema Oracle e os esquemas internos não são extraídos ou convertidos. Isso inclui esquemas como SYS, , SYSTEM, XDB, MDSYS, e CTXSYSWMSYS.

Note

Objetos que a ferramenta extrai, mas não consegue converter totalmente , são adicionados ao relatório de conversão de esquema como tarefas de revisão. Você pode resolver essas tarefas manualmente ou com a assistência do modo agente do GitHub Copilot.

Saída do espaço reservado

Quando a ferramenta não pode produzir uma conversão de trabalho para um objeto, ela emite DDL de melhor esforço ou espaço reservado em vez de remover o objeto. O espaço reservado mantém o nome e a assinatura do original para que os objetos que dependem dele ainda convertam e implantem. Essa abordagem impede que um pequeno número de objetos problemáticos bloqueie o restante do esquema.

Um espaço reservado não está funcional. O relatório de conversão de esquema sinaliza cada objeto que recebe um como precisando de revisão antes de implantar. Objetos que dependem de um espaço reservado também podem ser retidos do script de implantação gerado, de modo que uma única rotina não convertida pode afetar vários outros objetos.

As causas mais comuns são:

  • Transações autônomas. As rotinas que usam PRAGMA AUTONOMOUS_TRANSACTION são a maior causa única. A conversão roteia o trabalho autônomo, dblinkportanto, se dblink não estiver instalado no destino quando você converter, essas rotinas voltarão para a saída do espaço reservado. Rotinas cujo corpo não é um simples INSERT seguido por COMMIT, ou que contêm um manipulador de exceção ou uma MERGE instrução, também precisam de revisão manual.
  • Uma referência que a ferramenta não pôde resolver. Um objeto que faz referência a outro objeto que a ferramenta não converteu ou que ele converteu em uma unidade de trabalho diferente não pode ser verificado.
  • Instruções de controle de transação. Construções como ROLLBACK TO SAVEPOINT nem sempre são convertidas de forma limpa.
  • PL/SQL encapsulado. Eles sempre produzem um espaço reservado. Para obter mais informações, consulte PL/SQL encapsulado.

Objetos programáveis

Tipo de objeto Limitation O que fazer
Corpo do pacote O estado do pacote é mapeado para variáveis de sessão postgreSQL, de modo que o estado que persiste entre chamadas não se comporta da mesma forma que uma instância de pacote Oracle. Teste se o estado compartilhado se comporta conforme o seu aplicativo espera.
Rotina que usa PRAGMA AUTONOMOUS_TRANSACTION O trabalho autônomo é executado em uma conexão separada, dblinkportanto, ele é confirmado independentemente do chamador e não é revertido se o chamador falhar. Várias formas do corpo precisam de revisão manual. Instale dblink antes de converter e examine cada rotina para confirmar se essa diferença é aceitável.
Gatilho (evento do sistema) A ferramenta reconhece somente LOGON e LOGOFF como subtipos de evento do sistema. STARTUP, SHUTDOWNe SERVERERROR os gatilhos não são classificados como gatilhos de evento do sistema, portanto, eles podem passar para conversão e produzir saída que não funciona no PostgreSQL. Examine a origem desses gatilhos e reimplemente a lógica fora do banco de dados.
Gatilho (edição cruzada) A redefinição baseada em edição não é detectada. Um gatilho de edição cruzada é convertido em um gatilho comum, de modo que ele é acionado para cada sessão, em vez de apenas para manipulação de dados que cruza edições. Converta uma única edição e manipule a distribuição de versão em seu processo de lançamento.
Corpo do tipo Não extraído. Reimplementar métodos do tipo objeto como funções PostgreSQL.
Java origem, Java procedimento armazenado e classe Java Não extraído. Banco de Dados do Azure para PostgreSQL servidor flexível não pode executar Java no banco de dados. Reescreva a lógica em PL/pgSQL ou mova-a para a camada do aplicativo.
Biblioteca C externa (CREATE LIBRARY) Não extraído. Reescreva a lógica em PL/pgSQL ou mova-a para a camada do aplicativo.
PL/SQL encapsulado O corpo não pode ser lido, portanto, somente um espaço reservado é produzido. Para obter mais informações, consulte PL/SQL encapsulado. Forneça a origem desembrulhada original e converta novamente.

PL/SQL encapsulado

A ferramenta não pode ler a origem das unidades PL/SQL armazenadas no formulário encapsulado (ofuscado) usando o utilitário Oracle wrap ou DBMS_DDL.WRAP. A ferramenta detecta essas unidades, lê os metadados de assinatura do dicionário de dados Oracle e gera uma rotina postgreSQL que tem o mesmo nome e assinatura e um corpo que gera um erro quando é chamado.

Esse espaço reservado permite que objetos que dependem da unidade encapsulada convertam e implantem. A rotina gerada não contém lógica e o relatório de conversão de esquema lista todos os objetos encapsulados como uma tarefa de revisão que você deve resolver antes de entrar em operação.

Para converter uma unidade encapsulada corretamente, forneça a origem original desembrulhada e execute a conversão novamente.

Objetos de armazenamento e dados

Tipo de objeto Limitation O que fazer
Operador definido pelo usuário (CREATE OPERATOR) A conversão não é garantida e pode produzir saída de espaço reservado. Examine o operador gerado e teste-o.
Índice (bitmap, junção de bitmap, particionado global ou domínio) Não extraído. O PostgreSQL não usa índices de domínio ou bitmap do Oracle. Geralmente não há nenhuma ação funcional. Ajuste as consultas sensíveis ao desempenho no destino.
Log de exibição materializado (MLOG$) Não extraído. Nada. Estes são objetos de suporte de atualização do Oracle que o PostgreSQL não precisa.
Tabela externa Não extraído. Banco de Dados do Azure para PostgreSQL servidor flexível não tem acesso ao sistema de arquivos do servidor; portantofile_fdw, não está disponível. Carregue o arquivo em uma tabela com um lado \copy do cliente ou COPY ... FROM STDINcom a azure_storage extensão ou por meio do aplicativo.
Tabela AQ (Enfileiramento Avançado) Não extraído. O Oracle Advanced Queuing carrega a lógica do aplicativo. Reprojete-a com uma fila de aplicativos, uma extensão PostgreSQL ou um serviço de mensagens Azure.
Tabela blockchain Não extraído. Reimplemente o requisito de integridade na camada do aplicativo.
Cluster e cluster de hash Não extraído. Recrie como uma tabela simples ou particionada.
Objeto directory (CREATE DIRECTORY) Não extraído. Manipule o acesso ao arquivo na camada do aplicativo.
Tipo de índice definido pelo usuário (CREATE INDEXTYPE) Não extraído. Recrie o método de acesso com um índice de extensão PostgreSQL em que existe um.
Link do banco de dados Não convertido. Para obter mais informações, consulte links de banco de dados. Recrie com um wrapper de dados estrangeiro.
Contexto do aplicativo (CREATE CONTEXT, DBMS_SESSION.SET_CONTEXT) Não extraído. Mapeie o contexto para as configurações de sessão do PostgreSQL e leia-as com current_setting().
Exibição analítica, dimensão do atributo, hierarquia, dimensão OLAP, modelo de mineração de dados e mapa de zona materializado Não extraído. Eles não têm nenhum destino postgreSQL. Recompile a saída necessária como exibições ou funções ou solte-as.
Cláusula de armazenamento LOB, esquema XML registrado (DBMS_XMLSCHEMA.REGISTERSCHEMA) e índice associado ao esquema XML Não extraído. Remodele o requisito de armazenamento ou validação no destino.
Resource Manager plano e grupo de consumidores, perfil SQL, linha de base do plano SQL, edição, perfil de Tradução SQL, política de Gerenciamento do Ciclo de Vida da Informação, perfil de bloqueio e objeto do Gerenciador de Workspaces Não extraído. São artefatos de instância, otimizador ou ciclo de vida oracle que estão fora do escopo. Recrie-os na camada de aplicativo ou infraestrutura ou solte-os no Banco de Dados do Azure para PostgreSQL.

A ferramenta não converte automaticamente links de banco de dados públicos e privados (CREATE DATABASE LINK, CREATE PUBLIC DATABASE LINK). Os links de banco de dados armazenam credenciais e informações de endpoint remoto que não se traduzem diretamente para o PostgreSQL.

Recrie esses links no destino usando um wrapper de dados estrangeiro postgreSQL, como postgres_fdw ou oracle_fdw, ou refatorar para conexões no nível do aplicativo. Pesquise referências em sua fonte Oracle para @link que você encontre todas as dependências, incluindo referências dentro de sinônimos e exibições.

Objetos de segurança e identidade

Usuários, funções, privilégios e políticas de proteção de dados são a maior lacuna na conversão. A ferramenta converte objetos de esquema, não a camada de segurança ao seu redor. Trate essa área como um fluxo de trabalho manual separado e planeje-a do inventário de origem oracle em vez do relatório de conversão de esquema.

Tipo de objeto Limitation O que fazer
Usuário Não extraído. Provisione logons separadamente em Azure. Recrie cada usuário como uma função PostgreSQL e valide o acesso resultante antes de entrar no ar.
Função Não extraído. Recrie cada função no destino.
Privilégio do sistema Não extraído. Recrie como instruções PostgreSQL GRANT .
Associação de Função Não extraído. Recrie como GRANT <role> TO <role> instruções.
Privilégio e concessão de objeto A extração de concessão é desativada por padrão e abrange somente concessões de objeto. Recrie as concessões do inventário de origem e valide-as.
Segurança em nível de linha e Banco de Dados Virtual Privado (DBMS_RLS) Não convertido. Recrie as políticas como políticas de segurança em nível de linha do PostgreSQL.
Segurança de rótulo do Oracle Não convertido. Reprojete os limites de acesso a dados no destino.
Redação de dados (DBMS_REDACT) Não convertido. Reaplicar o mascaramento no destino, na camada do aplicativo ou com um equivalente postgreSQL.
Perfil, política de senha e política de auditoria unificada ou refinada (DBMS_FGA, AUDIT POLICY) Não extraído. Configure os parâmetros de servidor Azure equivalentes e a auditoria e gerencie-os como infraestrutura como código.

Importante

A ferramenta não oferece segurança em nível de linha, Banco de Dados Virtual Privado, Segurança de Rótulo Oracle e políticas de redação de dados. Um esquema convertido implanta e retorna dados sem eles, de modo que as linhas filtradas pelo Oracle são visíveis e as colunas mascaradas pelo Oracle são retornadas em texto claro. Recrie essas políticas e verifique-as antes de rotear o tráfego de produção para o destino.

Objetos do agendador

A ferramenta não converte metadados do agendador Oracle em agendamentos postgreSQL de trabalho.

Tipo de objeto Limitation O que fazer
DBMS_SCHEDULER trabalho e agendamento Não convertido. Recrie o agendamento no destino com pg_cronum agendador externo, como Aplicativos Lógicos do Azure ou Azure Functions.
Trabalho herdado DBMS_JOB Não detectado. Recrie a agenda com ou um pg_cron agendador de aplicativos.
Programa, cadeia, credencial, observador de arquivos, classe de trabalho, grupo, janela e trabalho baseado em evento Não convertido. Recompile a orquestração em um agendador externo.

Lacunas no nível do recurso

Os itens a seguir são recursos oracle em vez de tipos de objeto. A ferramenta não detecta esses recursos ou os converte de uma maneira que perde parte do comportamento original, portanto, nem sempre aparecem como uma tarefa de revisão.

Característica Limitation O que fazer
Tabela particionada híbrida (Oracle 19.3 e posterior) Converte como uma tabela comum e as partições externas são perdidas. Identifique tabelas particionadas híbridas na origem e carregue os dados externos separadamente.
Exibição de edição e gatilho de edição cruzada A redefinição baseada em edição não é detectada. Uma exibição de edição é convertida como uma exibição simples. Converta uma edição e, em seguida, manipule a distribuição de versão manualmente.
Tabela imutável (Oracle 19.11 e posterior) Não detectado e não há nenhum equivalente postgreSQL. Imponha o requisito na camada do aplicativo ou com gatilhos.
Arquivo de Dados do Flashback O histórico temporal não é modelado. Use um padrão de tabela de histórico ou uma extensão temporal no destino.
Consulta de flashback (AS OF TIMESTAMP, AS OF SCN) Não convertido. Reescreva consultas que leem versões históricas de uma linha.
Oracle Sharding Não modelado e não há nenhum equivalente postgreSQL de banco de dados único. Reprojete a estratégia de distribuição.
BFILE e específicos do LOB do SecureFile Tratado apenas como uma nota genérica sobre tipos exóticos. Examine o padrão de armazenamento e acesso para cada coluna.

Colunas de identidade, colunas virtuais e geradas, colunas invisíveis e tabelas temporárias globais são tratadas pelo conversor e não são limitações. As tabelas temporárias privadas existem apenas no runtime, portanto, elas não aparecem no inventário de origem.

Obter ajuda

Quando você encontra limitações:

  1. Use o modo de agente do Copilot do GitHub para obter assistência guiada com tarefas de revisão.
  2. Consulte a documentação do PostgreSQL para implementações alternativas.
  3. Revise as práticas recomendadas para padrões de migração do Oracle para o Banco de Dados do Azure para PostgreSQL.
  4. Teste em um ambiente isolado antes de implantar na produção.