Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo resume as limitações conhecidas, objetos não suportados e considerações de migração quando utiliza a funcionalidade de conversão de esquema Oracle to Base de Dados do Azure para PostgreSQL no Visual Studio Code.
Limitações de suporte à plataforma
- ARM64: Não suportado no Windows nem no Linux.
Objetos não suportados e parcialmente suportados
As secções seguintes listam objetos Oracle que a ferramenta não converte, ou que converte com uma diferença de comportamento que precisas de gerir. Objetos que convertem de forma limpa não estão listados aqui.
Estas tabelas descrevem o resultado típico para cada classe de objetos. Um objeto individual pode ainda precisar de atenção quando usa um construto que não converte, como uma função que chama uma rotina Java, por isso o relatório por objeto da sua própria execução de conversão é autoritativo para o seu esquema.
O sistema Oracle e os esquemas incorporados não são extraídos nem convertidos. Isto inclui esquemas como SYS, SYSTEM, XDB, MDSYS, CTXSYS, e WMSYS.
Note
Os 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. Pode resolver essas tarefas manualmente ou com assistência no modo agente do Copilot do GitHub.
Saída provisória
Quando a ferramenta não consegue produzir uma conversão funcional para um objeto, emite DDL de melhor esforço ou provisório em vez de eliminar o objeto. O marcador mantém o nome e a assinatura do original para que os objetos que dependem dele continuem a converter e a implementar. Esta abordagem impede que um pequeno número de objetos problemáticos bloqueie o resto do esquema.
Um marcador não funciona. O relatório de conversão de esquema sinaliza todos os objetos que recebem um como necessitando de revisão antes de implementar. Objetos que dependem de um marcador também podem ser retidos do script de implementação gerado, pelo que uma única rotina não convertida pode afetar vários outros objetos.
As principais causas comuns:
- Transações autónomas. As rotinas que usam
PRAGMA AUTONOMOUS_TRANSACTIONsão a principal causa individual. A conversão encaminha o trabalho autónomo atravésdblinkde , por isso, sedblinknão estiver instalado no alvo quando convertes, estas rotinas voltam para a saída de placeholder. Rotinas cujo corpo não é um simplesINSERTseguido deCOMMIT, ou que contêm um gestor de exceções ou umaMERGEinstrução, também precisam de revisão manual. - Uma referência que a ferramenta não conseguiu resolver. Um objeto que faz referência a outro objeto que a ferramenta não converteu, ou que converteu numa unidade de trabalho diferente, não pode ser verificado por compilação.
- Extratos de controlo de transações. Construtos como
ROLLBACK TO SAVEPOINTnão convertem sempre de forma limpa. - PL/SQL envolvido. Estes produzem sempre um marcador de lugar. Para mais informações, veja PL/SQL enrolado.
Objetos programáveis
| Tipo de objeto | Limitação | O que fazer |
|---|---|---|
| Carroçaria do pacote | O estado do pacote mapeia para as variáveis da sessão PostgreSQL, por isso o estado que persiste entre chamadas não se comporta da mesma forma que uma instância de pacote Oracle. | Teste se o estado partilhado se comporta como a sua aplicação espera. |
Rotina que utiliza PRAGMA AUTONOMOUS_TRANSACTION |
O trabalho autónomo corre numa ligação separada através dblinkde , por isso faz commit independente do chamador e não é revertido se o chamador falhar. Vários formatos de carroçaria precisam de revisão manual. |
Instale dblink antes de converter e depois reveja cada rotina para confirmar se esta diferença é aceitável. |
| Trigger (evento do sistema) | A ferramenta reconhece apenas LOGON e LOGOFF como subtipos de evento do sistema.
STARTUP, SHUTDOWN, e SERVERERROR os triggers não são classificados como triggers de evento de sistema, por isso podem passar para conversão e produzir saída que não funciona no PostgreSQL. |
Revise a fonte destes gatilhos e reimplemente a lógica fora da base de dados. |
| Trigger (edição cruzada) | A redefinição baseada em edições não é detetada. Um gatilho multi-edição converte-se num gatilho comum, por isso dispara em cada sessão em vez de apenas para manipulação de dados que cruza edições. | Converte uma única edição e trata do lançamento das versões no teu processo de lançamento. |
| Carroçaria tipo | Não extraído. | Reimplementar métodos do tipo objeto como funções PostgreSQL. |
| Código-fonte Java, procedimento armazenado Java e classe Java | Não extraído. O servidor flexível Base de Dados do Azure para PostgreSQL não consegue executar Java na base de dados. | Reescreve a lógica em PL/pgSQL ou move-a para a camada de aplicação. |
Biblioteca C externa (CREATE LIBRARY) |
Não extraído. | Reescreve a lógica em PL/pgSQL ou move-a para a camada de aplicação. |
| PL/SQL encapsulado | O corpo não pode ser lido, por isso só é produzido um marcador de lugar. Para mais informações, veja PL/SQL enrolado. | Forneça a fonte original desembrulhada e converta novamente. |
PL/SQL encapsulado
A ferramenta não consegue ler a origem das unidades PL/SQL que são armazenadas em formato wrapped (ofuscado) usando a utilitária Oracle wrap ou DBMS_DDL.WRAP. A ferramenta deteta estas unidades, lê os seus metadados de assinatura do dicionário de dados Oracle e gera uma rotina PostgreSQL com o mesmo nome e assinatura, e um corpo que gera um erro quando é chamada.
Este marcador permite que objetos que dependem da unidade envolvida se convertam e implementem. A rotina gerada não contém lógica, e o relatório de conversão de esquema lista cada objeto enrolado como uma tarefa de revisão que deve resolver antes de entrar em produção.
Para converter corretamente uma unidade enrolada, forneça a fonte original não enrolada e execute a conversão novamente.
Objetos de dados e armazenamento
| Tipo de objeto | Limitação | O que fazer |
|---|---|---|
Operador definido pelo utilizador (CREATE OPERATOR) |
A conversão não é garantida e pode produzir resultados provisórios. | Revê o operador gerado e testa-o. |
| Índice (bitmap, joinência bitmap, partição global ou domínio) | Não extraído. O PostgreSQL não utiliza índices de bitmap Oracle nem de domínio. | Normalmente não há ação funcional. Ajuste as consultas sensíveis ao desempenho no alvo. |
Registo de visualização materializada (MLOG$) |
Não extraído. | Nada. Estes são objetos de suporte para atualização Oracle que o PostgreSQL não precisa. |
| Tabela externa | Não extraído. O servidor flexível Base de Dados do Azure para PostgreSQL não tem acesso ao sistema de ficheiros do servidor, por isso file_fdw não está disponível. |
Carregue o ficheiro numa tabela com um lado \copy do cliente ou COPY ... FROM STDIN, com a azure_storage extensão, ou através da sua aplicação. |
| Tabela de Fila Avançada (AQ) | Não extraído. O Oracle Advanced Queuing transporta lógica de aplicação. | Redesenhe-o com uma fila de aplicações, uma extensão PostgreSQL ou um serviço de mensagens Azure. |
| Tabela blockchain | Não extraído. | Reimplemente o requisito de integridade na camada de aplicação. |
| Cluster e cluster de hash | Não extraído. | Recriar como uma tabela simples ou particionada. |
Objeto diretório (CREATE DIRECTORY) |
Não extraído. | Trata do acesso a ficheiros na camada de aplicação. |
Tipo de índice definido pelo utilizador (CREATE INDEXTYPE) |
Não extraído. | Recrie o método de acesso com um índice de extensão PostgreSQL onde existe. |
| Link da base de dados | Não convertido. Para mais informações, consulte Links para bases de dados. | Recria com um invólucro de dados estrangeiro. |
Contexto da aplicação (CREATE CONTEXT, DBMS_SESSION.SET_CONTEXT) |
Não extraído. | Mapeie o contexto para as definições da sessão PostgreSQL e leia-as com current_setting(). |
| Vista analítica, dimensão de atributos, hierarquia, dimensão OLAP, modelo de mineração de dados e mapa de zonas materializadas | Não extraído. Estes não têm alvo PostgreSQL. | Reconstrua a saída necessária como vistas ou funções, ou elimine-a. |
Cláusula de armazenamento LOB, esquema XML registado (DBMS_XMLSCHEMA.REGISTERSCHEMA) e índice limitado por esquema XML |
Não extraído. | Remodelar o requisito de armazenamento ou validação no alvo. |
| Resource Manager plano e grupo de consumidores, perfil SQL, linha base do plano SQL, edição, perfil de tradução SQL, política de Gestão do Ciclo de Vida da Informação, perfil de confinamento e objeto Workspace Manager | Não extraído. Estes são artefactos de instância, otimizador ou ciclo de vida da Oracle que estão fora do âmbito. | Recrie-os na camada de aplicação ou infraestrutura, ou coloque-os no Base de Dados do Azure para PostgreSQL. |
Ligações a bases de dados
A ferramenta não converte automaticamente ligações de bases de dados privadas e públicas (CREATE DATABASE LINK, CREATE PUBLIC DATABASE LINK). As ligações à base de dados armazenam credenciais e informações remotas de endpoints que não se traduzem diretamente para PostgreSQL.
Recrie estas ligações no destino usando um wrapper de dados estrangeiro PostgreSQL, como postgres_fdw ou oracle_fdw, ou refatore para ligações ao nível da aplicação. Pesquise a sua fonte Oracle por @link referências para encontrar todas as dependências, incluindo referências dentro de sinónimos e vistas.
Objetos de segurança e identidade
Utilizadores, 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 à sua volta. Trate esta área como um fluxo de trabalho manual separado e planeie-a a partir do inventário da sua fonte Oracle em vez do relatório de conversão de esquema.
| Tipo de objeto | Limitação | O que fazer |
|---|---|---|
| User | Não extraído. | Provisionar logins separadamente no Azure. Recrie cada utilizador como um papel PostgreSQL e valide o acesso resultante antes de o lançar. |
| Função | Não extraído. | Recria cada papel no alvo. |
| Privilégio do sistema | Não extraído. | Recriar como instruções PostgreSQL GRANT . |
| Participação na função | Não extraído. | Recria como GRANT <role> TO <role> declarações. |
| Objeto de privilégio e concessão | A extração de concessões está desativada por defeito e cobre apenas concessões de objetos. | Recria subsídios a partir do teu inventário de origem e depois valida-os. |
Segurança ao nível da linha e Base de Dados Privada Virtual (DBMS_RLS) |
Não convertido. | Recrie as políticas como políticas de segurança ao nível de linha do PostgreSQL. |
| Segurança de Etiquetas Oracle | Não convertido. | Redesenhar os limites de acesso aos dados no alvo. |
Redação de dados (DBMS_REDACT) |
Não convertido. | Reaplique o mascaramento no destino, na camada de aplicação ou com um equivalente PostgreSQL. |
Política de perfil, palavra-passe e política de auditoria unificada ou detalhada (DBMS_FGA, AUDIT POLICY) |
Não extraído. | Configure os parâmetros equivalentes do servidor Azure e auditorias, e gere como infraestrutura como código. |
Importante
A ferramenta não mantém políticas de segurança ao nível de linha, Virtual Private Database, Oracle Label Security e redação de dados. Um esquema convertido é implementado e devolve dados sem eles, por isso as linhas que a Oracle filtrou ficam visíveis e as colunas que a Oracle mascarou são devolvidas em texto claro. Recrie estas políticas e verifique-as antes de encaminhar o tráfego de produção para o alvo.
Objetos do escalonador
A ferramenta não converte metadados do agendador Oracle em agendamentos PostgreSQL funcionais.
| Tipo de objeto | Limitação | O que fazer |
|---|---|---|
DBMS_SCHEDULER Trabalho e horário |
Não convertido. | Recrie o agendamento no destino com pg_cron, ou use um agendador externo como o Azure Logic Apps ou o Funções do Azure. |
Trabalho de legado DBMS_JOB |
Não detetado. | Recrie o horário com pg_cron ou com um agendador de aplicações. |
| Programa, cadeia, credencial, observador de ficheiros, classe de trabalho, grupo, janela e trabalho baseado em eventos | Não convertido. | Reconstrua a orquestração num agendador externo. |
Lacunas ao nível das funcionalidades
Os seguintes itens são características Oracle em vez de tipos de objetos. A ferramenta ou não deteta estas funcionalidades ou converte-as de forma a perder parte do comportamento original, por isso nem sempre aparecem como uma tarefa de revisão.
| Feature | Limitação | O que fazer |
|---|---|---|
| Tabela particionada híbrida (Oracle 19.3 e posteriores) | Converte-se como uma tabela comum, e as partições externas perdem-se. | Identifique tabelas particionadas híbridas na fonte e carregue os dados externos separadamente. |
| Vista de edição e gatilho multi-edição | A redefinição baseada em edições não é detetada. Uma vista de edição converte-se numa vista simples. | Converte uma edição e depois gere manualmente o lançamento da versão. |
| Tabela Imutável (Oracle 19.11 e posteriores) | Não detetado, e não existe equivalente ao PostgreSQL. | Impõe o requisito na camada de aplicação ou com triggers. |
| Arquivo de dados Flashback | A história temporal não é modelada. | Use um padrão de tabela de histórico ou uma extensão temporal no alvo. |
Consulta de flashback (AS OF TIMESTAMP, AS OF SCN) |
Não convertido. | Reescreva consultas que leiam versões históricas de uma linha. |
| Compartilhamento Oracle | Não é modelado, e não existe um equivalente PostgreSQL para uma base de dados única. | Redesenhar a estratégia de distribuição. |
BFILE e especificidades do LOB do SecureFile |
Tratado apenas como uma nota genérica sobre tipos exóticos. | Revise o padrão de armazenamento e acesso de 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. Tabelas temporárias privadas existem apenas em tempo de execução, por isso não aparecem no inventário de origem.
Obter ajuda
Quando encontrar limitações:
- Usa o modo agente do Copilot do GitHub para assistência guiada nas tarefas de revisão.
- Consulte a documentação PostgreSQL para implementações alternativas.
- Consulte as melhores práticas para padrões de migração do Oracle para o Base de Dados do Azure para PostgreSQL.
- Teste num ambiente scratch antes de implementar para produção.