Referência de problemas e padrões de conversão

Os espaços de trabalho de conversão agregam todos os problemas em grupos e categorias para ajudar você a planejar a correção de erros e avisos. Cada categoria representa o tipo de trabalho que você pode precisar realizar para corrigir os problemas (revisar, refatorar, ajustar tipos de dados). Os grupos oferecem mais agregação, já que diferenciam casos específicos em um nível mais baixo:

Tela de visão geral do espaço de trabalho de conversão que mostra grupos e categorias de problemas de conversão.
Figura 1. Tela de visão geral do espaço de trabalho de conversão com grupos e categorias de problemas de conversão.
Tela de visão geral do espaço de trabalho de conversão que mostra grupos e categorias de problemas de conversão.

A tabela a seguir lista todos os grupos de problemas de conversão que podem ocorrer durante a conversão de esquema:

ID do grupo de problemas Descrição

Código-fonte inválido

Possível causa raiz

Os erros nesse grupo geralmente ocorrem quando o Database Migration Service encontra uma sintaxe desconhecida ou quando o código-fonte do Oracle não é válido (por exemplo, um procedimento armazenado não tem a palavra-chave END;).

Possível mitigação

Corrija os objetos inválidos no banco de dados Oracle de origem. Em seguida, atualize o snapshot do esquema de origem no Database Migration Service e tente novamente o processo de conversão do esquema. Como alternativa, é possível excluir o objeto da migração.

Objetos referenciados ausentes

Possível causa raiz

O Database Migration Service usa metadados de objetos na árvore de origem para melhorar a qualidade da conversão de código de objetos dependentes. Se o código se referir a objetos que não estão incluídos no esquema de origem, poderão ocorrer problemas de conversão porque o Database Migration Service não consegue determinar a estrutura ou os tipos de dados das colunas, atributos ou objetos referenciados ausentes.

Possíveis erros nesse grupo incluem tipos de dados incorretos para tipos definidos pelo usuário (UDTs) ou tipos de dados VARCHAR padrão para colunas, parâmetros ou variáveis.

Possível mitigação

Adicione todos os objetos referenciados à árvore de origem do Database Migration Service ou ajuste manualmente o código PostgreSQL com base no seu conhecimento do modelo de dados de origem para as dependências ausentes.

Tabelas sem chave primária

Possível causa raiz

O Database Migration Service exige que todas as tabelas tenham uma chave primária. Para tabelas sem chaves primárias, o Database Migration Service adiciona uma coluna NUMERIC chamada rowid à tabela PostgreSQL de destino. Essa coluna é preenchida com os valores numéricos correspondentes da pseudocoluna ROWID do Oracle de origem. Para garantir que as instruções INSERT não falhem após a migração, o Database Migration Service cria uma sequência e a usa para incrementar automaticamente a coluna rowid.

Possível mitigação

Você pode manter ou remover a coluna rowid após a migração.

Funcionalidade integrada da Oracle não compatível

Possível causa raiz

Talvez você esteja usando uma funcionalidade integrada do Oracle que não é compatível.

Possível mitigação

Encontre uma funcionalidade semelhante no PostgreSQL e modifique o código convertido de acordo. Em alguns casos, a funcionalidade ausente pode ser fornecida pela extensão Orafce, disponível para migrações do Cloud SQL para PostgreSQL e do AlloyDB para PostgreSQL.

SQLCODE não é compatível no momento

Possível causa raiz

A função SQLCODE do Oracle não é compatível com a conversão. SQLCODE retorna um INTEGER, enquanto o equivalente mais próximo no PostgreSQL é a função SQLSTATE, que retorna valores TEXT.

Possível mitigação

Se o código-fonte não depender de SQLCODE para retornar um número inteiro (por exemplo, SQLCODE só é registrado em uma coluna VARCHAR2 ou com uma mensagem DBMS_OUTPUT), SQLSTATE poderá ser usado com segurança no código PostgreSQL.

Se o código-fonte depender de SQLCODE para retornar um número inteiro (por exemplo, se você o usar com variáveis NUMBER ou INTEGER ou salvar valores de retorno de SQLCODE como parâmetros ou colunas), será necessário refatorar o código convertido.

A função SQL do Oracle ainda não é compatível.

Possível causa raiz

Algumas funções integradas do Oracle não são compatíveis com o Database Migration Service para conversão.

Algumas funções podem ter equivalentes no PostgreSQL (por exemplo, ASCII), outras podem compartilhar o mesmo nome, mas ter especificações diferentes (por exemplo, funções REGEXP%). Algumas funções podem não existir.

Possível mitigação

Inspecione qual função do Oracle gerou o erro.

  • Se a função existir com o mesmo comportamento no PostgreSQL, ignore a mensagem de erro, já que o código convertido deve funcionar da mesma forma após a migração.
  • Se uma função tiver o mesmo nome, mas funcionar de maneira diferente ou simplesmente não existir no PostgreSQL, tente corrigir o código convertido:

    • Crie uma função definida pelo usuário (UDF) com o mesmo nome no banco de dados de destino.
    • Substitua a chamada de função na origem por uma expressão equivalente.
    • Use a assistência de conversão aprimorada do Gemini. Para mais informações, consulte Converter código e esquema do SQL Server com a ajuda do Gemini.

    • Algumas funções ou recursos do banco de dados Oracle podem ser replicados com extensões, como Orafce. Para mais informações sobre as extensões compatíveis com o banco de dados de destino, consulte Extensões de banco de dados compatíveis.

Os pacotes integrados do Oracle não são totalmente compatíveis

Possível causa raiz

O Database Migration Service é compatível com alguns pacotes integrados do Oracle, mas muitos não têm suporte completo para conversão, como DBMS_STATS, DBMS_UTILITY ou DBMS_SQL.

Possível mitigação

Se você usa pacotes sem suporte, talvez seja necessário:

  • Mude o código. Por exemplo, em vez de usar DBMS_STATS.GATHER_TABLE_STATS, use um comando mais simples como ANALYZE.

    Pacotes como UTL_FILE e DBMS_AQ podem exigir refatoração porque não podem ser facilmente replicados no PostgreSQL.

  • Algumas funções ou recursos do banco de dados Oracle podem ser replicados com extensões, como Orafce. Para mais informações sobre as extensões compatíveis com o banco de dados de destino, consulte Extensões de banco de dados compatíveis.

O tipo de dados do Oracle ainda não é compatível com a conversão

Possível causa raiz

No momento, alguns tipos de dados do Oracle não são compatíveis com a conversão ou a movimentação de dados.

Possível mitigação

Na maioria dos casos, o PostgreSQL tem um tipo de dados equivalente. Você pode usar arquivos de mapeamento de conversão para personalizar a lógica de conversão e transformar o tipo de dados Oracle não compatível no tipo de dados PostgreSQL necessário.

Para mais informações sobre a compatibilidade com tipos de dados, consulte Visão geral dos espaços de trabalho de conversão e objetos compatíveis.

O recurso de origem ainda não é compatível

Possível causa raiz

Esse grupo captura todos os problemas genéricos relacionados a recursos do Oracle que não são compatíveis com a conversão. Os problemas neste grupo não se enquadram em nenhum outro grupo de problemas mais específico.

Possível mitigação

Tipo de objeto de esquema incompatível

Possível causa raiz

O Database Migration Service não é compatível com determinados tipos de objetos de esquema do Oracle para conversão de código porque o PostgreSQL não tem equivalentes adequados. Por exemplo, tabelas organizadas por índice (IOTs), índices de pesquisa de texto ou corpos para tipos definidos pelo usuário (UDTs).

Possível mitigação

O Database Migration Service converte objetos não compatíveis no equivalente mais próximo do PostgreSQL. Por exemplo, as IOTs se tornam tabelas regulares com uma restrição de chave primária, e os índices de pesquisa de texto são convertidos em índices de árvore B. Essas conversões podem levar à perda de funcionalidades específicas do tipo de objeto original.

O recurso PL/SQL ainda não é compatível.

Possível causa raiz

Esse grupo captura todos os problemas genéricos relacionados a recursos do PL/SQL que não são compatíveis com a conversão. Os problemas neste grupo não se enquadram em nenhum outro grupo de problemas mais específico.

Possível mitigação

A vinculação em massa ainda não é compatível.

Possível causa raiz

No momento, a conversão de código do Database Migration Service não é compatível com recursos de vinculação em massa do Oracle, como BULK COLLECT, FORALL ou SAVE EXCEPTIONS.

Possível mitigação

Para corrigir o problema, modifique o código que usa recursos de vinculação em massa. Considere as diferenças na arquitetura do PostgreSQL e do Oracle e se o processamento de matrizes é necessário no PostgreSQL para seu caso de uso.

Há várias estratégias para abordar operações de vinculação em massa do Oracle no PostgreSQL. O uso delas depende do seu cenário específico. Por isso, recomendamos que você use a assistência de conversão com tecnologia do Gemini para atender às suas necessidades específicas. Confira outros exemplos de recomendações para ajudar você a começar:

  • Para um BULK COLLECT completo (sem LIMIT), tente usar a função ARRAY_AGG.
  • Para BULK COLLECT com LIMIT, tente usar um CURSOR FOR LOOP para carregar e processar lotes de linhas em matrizes. No entanto, se o seu caso permitir mudanças funcionais, uma alternativa possivelmente mais simples seria usar o CURSOR FOR LOOP para processar uma linha por vez, em vez de carregá-las em matrizes.
  • Para operações FORALL, tente DML baseada em conjuntos com UNNEST se você escolher usar o processamento de matrizes.
  • Para SAVE EXCEPTIONS, talvez seja necessário gravar um manipulador de exceções em um CURSOR FOR LOOP baseado em linhas, já que não há uma cláusula equivalente no PostgreSQL.

Coleções ainda não são compatíveis.

Possível causa raiz

A conversão de código do Database Migration Service tem suporte parcial para coleções do Oracle.

Possível mitigação

Você precisa modificar o código convertido do PostgreSQL de acordo com a necessidade. Ao resolver problemas com coleções, lembre-se de que as matrizes do PostgreSQL nunca são esparsas. Se você atribuir elementos de forma esparsa, as matrizes do PostgreSQL poderão retornar resultados e contagens de cardinalidade diferentes das matrizes do Oracle.

Como o PostgreSQL não é compatível com matrizes indexadas por strings, dependendo da natureza dos dados, talvez as extensões JSON/JSONB ou hstore sejam adequadas.

Funções em pipeline ainda não são compatíveis.

Possível causa raiz

O Database Migration Service não é compatível com funções em pipeline.

Possível mitigação

É possível substituir as funções de pipeline do Oracle por funções de retorno de conjunto do PostgreSQL. Recomendamos que você ajuste o código de uma forma relevante para seu caso de uso. Confira alguns exemplos para ajudar você a começar:

  1. Faça referência ao tipo do PostgreSQL (UDT) convertido do objeto ou tipo de registro de origem do Oracle que define o rowtype da função de pipeline. Em seguida, modifique a cláusula de retorno da função do PostgreSQL para RETURNS SETOF <type name> ou RETURNS TABLE, dependendo do seu caso específico.

  2. Substitua o valor de retorno no código PIPE ROW convertido por RETURN NEXT <row or record variable>.

O tipo de coleta da função de origem em pipeline, usado na cláusula RETURN da função Oracle, não é necessário no PostgreSQL.

Ainda não há suporte para a opção de SQL dinâmico

Possível causa raiz

O Database Migration Service oferece suporte parcial à conversão de SQL dinâmico. As palavras-chave Oracle EXECUTE IMMEDIATE, OPEN FOR e USING/INTO são convertidas corretamente para os equivalentes do PostgreSQL, mas as strings reais de SQL dinâmico, DML ou DDL não são convertidas.

Possível mitigação

Você precisa modificar o código convertido para atender aos seus requisitos. Recomendamos usar a assistência de conversão com tecnologia do Gemini para processar o SQL dinâmico.

A opção CONNECT BY ainda não é compatível.

Possível causa raiz

A maioria dos operadores, funções e pseudocolunas CONNECT BY é compatível com o Database Migration Service e convertida em expressões de tabela comuns (CTEs) recursivas do PostgreSQL. Mas há algumas exceções que podem exigir sua atenção. Por exemplo, a cláusula ORDER SIBLINGS BY é compatível apenas com a ordem crescente.

Possível mitigação

Não é possível replicar a cláusula ORDER SIBLINGS BY para ordem decrescente de maneira simples. Portanto, talvez seja necessário reestruturar o código para trabalhar com ordem crescente.

Revise os problemas relatados com operadores CONNECT BY e ajuste o código quando necessário. Recomendamos que você conheça os recursos de conversão automática com tecnologia do Gemini para acelerar essas correções. Para mais informações, consulte Converter código e esquema do Oracle com a ajuda do Gemini.

Ainda não há suporte para JSON

Possível causa raiz

Há algumas limitações na forma como o Database Migration Service oferece suporte ao JSON para movimentação de dados e conversão de código:

  • JSONB não é compatível com a movimentação de dados.
  • A conversão de código não oferece suporte às funções ou operadores de consulta JSON no Oracle, como JSON_TABLE, JSON_QUERY, JSON_OBJECT[AGG], JSON_ARRAYAGG e JSON_PATCH.
  • Em versões do Oracle anteriores a 21c, é possível armazenar dados JSON em colunas VARCHAR2, CLOB ou BLOB e verificar com a condição IS JSON. O Database Migration Service não é compatível com a conversão dessa condição.
Possível mitigação
  • Para mover dados JSON armazenados em colunas VARCHAR2, CLOB ou BLOB para o PostgreSQL, talvez seja necessário gravar um arquivo de mapeamento de conversão com a diretiva MODIFY_TYPE.

    Exemplo:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

    Para mais informações sobre arquivos de mapeamento de conversões, consulte Arquivos de mapeamento de conversões.

  • Para converter as funções e os operadores JSON do Oracle para o PostgreSQL, use funções do PostgreSQL, como JSONB_ARRAY_ELEMENTS e JSON_AGG. Para mais informações, consulte Funções e operadores JSON na documentação do PostgreSQL.

Problemas com transações e bloqueio

Possível causa raiz

A conversão de código do Database Migration Service não é compatível com instruções LOCK ou SAVEPOINT. O PostgreSQL não é compatível com SAVEPOINT.

Possível mitigação
  • Divida os blocos SAVEPOINT no Oracle para separar blocos de transação no PostgreSQL que usam a instrução ROLLBACK.
  • Para implementar DBMS_LOCK, use a extensão pg_dbms_lock do PostgreSQL. Essa extensão simplifica a migração de bloqueios definidos pelo usuário do Oracle para o PostgreSQL, emulando a funcionalidade do pacote DBMS_LOCK do Oracle.

Ainda não há suporte para XML

Possível causa raiz

O Database Migration Service não é compatível com o Oracle XMLTYPE nem com as funções e operadores XML associados.

Possível mitigação

Embora o Database Migration Service não ofereça suporte direto a XMLTYPE, é possível personalizar as colunas BLOB, CLOB, NVARCHAR2 ou VARCHAR2 para XML na movimentação de dados. O PostgreSQL é compatível com a funcionalidade XML.

Para migrar seus dados XML, siga estas etapas:

  1. Crie um arquivo de mapeamento de conversão com a diretiva MODIFY_TYPE para dados XML. Exemplo:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_XML_DATA:XML

    Para mais informações sobre arquivos de mapeamento de conversões, consulte Arquivos de mapeamento de conversões.

  2. Inicie o job de migração. Esse processo migra todos os dados do Oracle para o PostgreSQL, exceto os dados em colunas do tipo XMLTYPE. Essas colunas são preenchidas com valores NULL em PostgreSQL.
  3. Crie uma tabela externa no PostgreSQL selecionando apenas a coluna XMLTYPE do Oracle. Inclua a coluna de chave primária da tabela de origem.
  4. Mescle os dados XML da tabela externa na tabela original do PostgreSQL.

Para mais informações sobre como o PostgreSQL funciona com XMLTYPE, consulte Funções XML na documentação do PostgreSQL.

PIVOT não é compatível no momento

Possível causa raiz

O Database Migration Service não é compatível com os operadores de transposição PIVOT e UNPIVOT para conversão de código.

Possível mitigação

É possível fazer a transposição de PIVOT no PostgreSQL usando a extensão tablefunc ou reescrevendo a expressão PIVOT de origem para agregações condicionais. Exemplo:

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

É possível criar transposições UNPIVOT, que criam pares de chave-valor de um conjunto de colunas, no PostgreSQL de várias maneiras:

  • Combinar uma junção LATERAL com um conjunto de VALUES. Por exemplo: SELECT ... FROM <table> CROSS JOIN LATERAL (VALUES ('<column1-name>', <column1>), ('<column2-name>', <column2>) AS u(column_name, column_value))
  • Como usar UNNEST com ARRAYs. Por exemplo: SELECT ..., UNNEST(ARRAY['<column1-name>', '<column2-name>']) AS column_name, UNNEST(ARRAY[column1, column2]) AS column_value FROM <table>

A opção de instrução ALTER ainda não é compatível

Possível causa raiz

O Database Migration Service não converte instruções ALTER, que geralmente são executadas em SQL dinâmico.

Possível mitigação

Substitua as instruções ALTER do Oracle pelo comando SET no PostgreSQL. Recomendamos que você conheça os recursos de conversão automática com tecnologia do Gemini para acelerar essas correções. Para mais informações, consulte Converter código e esquema do Oracle com a ajuda do Gemini.

Ainda não há suporte para o recurso SQL

Possível causa raiz

Esse grupo captura todos os problemas genéricos relacionados a recursos do SQL que não são compatíveis com a conversão. Os problemas neste grupo não se enquadram em nenhum outro grupo de problemas mais específico. Exemplos incluem gatilhos de eventos de banco de dados, instruções GRANT, operações INSERT em várias tabelas, DML em visualizações inline (INSERT INTO (SELECT ... FROM ...)) e visualizações laterais.

Possível mitigação

Sintaxe não aceita

Possível causa raiz

Esse grupo captura todos os problemas genéricos relacionados à sintaxe do Oracle SQL ou PL/SQL sem suporte. Os problemas neste grupo não se enquadram em nenhum outro grupo de problemas mais específico.

Possível mitigação

Mude seu código para usar a sintaxe do PostgreSQL funcionalmente equivalente. Recomendamos que você use os recursos de conversão automática do Gemini para ajustar o código. Para mais informações, consulte Converter código e esquema do Oracle com a ajuda do Gemini.

Não há suporte para a sintaxe SQL

Possível causa raiz

Seu código-fonte usa sintaxe ou elementos SQL que não são compatíveis com o Database Migration Service. Por exemplo, o parâmetro NLS_LANG na função TO_DATE do Oracle não é compatível.

Possível mitigação
Sintaxe PL/SQL incompatível.

Possível causa raiz

Seu código-fonte usa sintaxe ou elementos do PL/SQL que não são compatíveis com o Database Migration Service. Por exemplo, instruções INSERT baseadas em registros (como INSERT INTO table VALUES r_variable) e PRAGMA RESTRICT_REFERENCES não são compatíveis.

Possível mitigação

Mude seu código para usar a sintaxe do PostgreSQL funcionalmente equivalente. Recomendamos que você use os recursos de conversão automática do Gemini para ajustar o código. Para mais informações, consulte Converter código e esquema do Oracle com a ajuda do Gemini.

Não há suporte para a sintaxe de data e carimbo de data/hora

Possível causa raiz

O Database Migration Service pode gerar erros ou avisos para sintaxe, operações ou expressões de data ou carimbo de data/hora não compatíveis. Exemplos desses problemas incluem comparações entre tipos de dados incompatíveis ou o uso do modelo de formato TZH:TZM em carimbos de data/hora. Para mais informações sobre objetos e tipos de dados compatíveis, consulte Sobre os espaços de trabalho de conversão.

Possível mitigação

É possível recriar a maioria das expressões de data e carimbo de data/hora usando equivalentes do PostgreSQL. Recomendamos que você conheça os recursos de conversão automática com tecnologia do Gemini para acelerar essas correções. Para mais informações, consulte Converter código e esquema do Oracle com a ajuda do Gemini.

Elementos sem suporte da sintaxe de tratamento de exceções da Oracle

Possível causa raiz

A conversão de código do Database Migration Service não é compatível com os seguintes elementos de sintaxe de exceção PL/SQL do Oracle:

  • O uso de RAISE_APPLICATION_ERROR com códigos de erro variáveis em vez de códigos literais -20nnn.
  • O uso de SQLERRM com um argumento de código de erro, já que essa sintaxe não é compatível com o PostgreSQL.
Possível mitigação

Você precisa resolver esses problemas manualmente no código convertido. Recomendamos que você conheça os recursos de conversão automática com tecnologia do Gemini para acelerar essas correções. Para mais informações, consulte Converter código e esquema do Oracle com a ajuda do Gemini.

Problemas com conversões e tipos de dados

Possível causa raiz

O Database Migration Service pode agrupar problemas de conversão com base no contexto. Por exemplo, problemas de conversão que ocorrem em expressões de comparação de tipos. O grupo CW_OP0500 captura todos os problemas genéricos de conversão de tipo de dados que não se enquadram em outros grupos de problemas.

Possível mitigação

Na maioria dos casos, o Database Migration Service emite uma mensagem ERROR_UNIMPLEMENTED ou ERROR_TYPE no código PostgreSQL convertido. Resolva esse erro com base no seu conhecimento dos tipos de dados envolvidos.

Problemas com a máscara de formato de data

Possível causa raiz

Você pode encontrar avisos ou problemas ao converter expressões de data ou carimbo de data/hora em ou de strings com base em um modelo de formato. O Database Migration Service usa um modelo padrão (atualmente DD-MON-RR) quando as conversões no código-fonte do Oracle excluem um modelo de formato de data ou carimbo de data/hora explícito.

Isso pode causar problemas no código convertido se o modelo de formato emitido para a transmissão implícita entrar em conflito com um modelo de formato explícito na mesma expressão. Esse problema também pode ocorrer se os dados forem afetados pelas diferenças entre o formato RR do Oracle e o formato YY do PostgreSQL.

Possível mitigação

Revise e valide as expressões convertidas do PostgreSQL no espaço de trabalho de conversão.

Problemas com a máscara de formato numérico

Possível causa raiz

O Database Migration Service não é compatível com todos os modelos de formato da Oracle. Por exemplo, 'L' ou 'X' não são compatíveis. Você pode encontrar problemas ou avisos com código que converte strings em números com base em modelos de formato do Oracle.

Possível mitigação

Para modelos de formato Oracle que não têm equivalente no PostgreSQL, talvez seja necessário refatorar suas expressões ou modelos de formato. Recomendamos que você conheça os recursos de conversão automática com tecnologia do Gemini para acelerar essas correções. Para mais informações, consulte Converter código e esquema do Oracle com a ajuda do Gemini.

Problemas de conversão de tipos de dados

Possível causa raiz

Você pode encontrar erros devido a conversões de tipo de dados incompatíveis ou imprecisas. O Database Migration Service geralmente emite ERROR_UNIMPLEMENTED. Isso geralmente acontece devido a metadados ausentes ou incompletos. O Database Migration Service pode não ter informações suficientes para converter um tipo, por exemplo, em argumentos de função ou parâmetros de procedimento.

Possível mitigação

Ajuste o código do PostgreSQL para garantir conversões corretas de tipos de dados. Para fazer essas correções, você precisa conhecer os atributos, variáveis e colunas referenciados.

Problemas de comparação

Possível causa raiz

O Database Migration Service pode não ter metadados ou informações suficientes sobre tipos de dados ao converter expressões de comparação de dados. Por exemplo, isso pode acontecer quando um tipo definido pelo usuário (UDT) é comparado com NULL.

Possível mitigação

Revise as expressões convertidas do PostgreSQL e resolva os problemas. Recomendamos que você conheça os recursos de conversão automática com tecnologia do Gemini para acelerar essas correções. Para mais informações, consulte Converter código e esquema do Oracle com a ajuda do Gemini.

Os problemas nessa categoria representam casos em que o código-fonte do Oracle é convertido corretamente para o equivalente mais próximo do PostgreSQL, mas o código resultante pode ter pequenas diferenças semânticas ou funcionais que exigem sua revisão. Isso acontece devido às diferenças na forma como o Oracle e o PostgreSQL processam tipos de dados, formatos ou objetos.

À primeira vista, essa categoria pode parecer se sobrepor a problemas na categoria Tipos de dados e conversão (CW_05), mas elas representam problemas diferentes. CW_05 contém problemas conhecidos em que o Database Migration Service não consegue converter o código do Oracle para o equivalente em PostgreSQL.

Revise a máscara do formato de data

Possível causa raiz

A maioria dos modelos de formato de data e carimbo de data/hora do Oracle tem equivalentes adequados no PostgreSQL. Portanto, o código convertido não tem diferenças semânticas ou funcionais. Alguns modelos não têm uma correspondência exata, e o comportamento deles varia. Um exemplo é o formato Oracle RR, que é convertido para o formato PostgreSQL YY.

Possível mitigação

Revise e valide as expressões com conversões de modelo de formato para garantir que o código convertido se comporte como esperado.

Revise a máscara de formato numérico

Possível causa raiz

A maioria dos modelos de formato numérico de origem tem um equivalente no PostgreSQL, e o código convertido não tem diferenças semânticas ou funcionais. No entanto, alguns modelos de formato podem não ter uma correspondência exata ou se comportar de maneira ligeiramente diferente.

Possível mitigação

Revise e valide as expressões com conversões de modelo de formato para garantir que o código convertido funcione como esperado.

Revisar o código de exceção

Possível causa raiz

Quando você usa RAISE_APPLICATION_ERROR com um código de erro no intervalo de -20000 a -20999, o Database Migration Service o converte em PostgreSQL RAISE EXCEPTION com um SQLSTATE no intervalo de CW0000 a CW999. A conversão retém os três últimos dígitos do código de erro de origem e adiciona o prefixo CW.

Possível mitigação

Analise esse comportamento para determinar se ele é adequado às suas necessidades. Essa análise só é necessária se os códigos de erro de origem forem relevantes para seu aplicativo, equipes de suporte ou documentação. Se o valor do código de erro não for significativo, ignore esse aviso.

Revise a mensagem de exceção

Possível causa raiz

A função SQLERRM existe no Oracle PL/SQL e no PostgreSQL, mas pode retornar um texto de erro diferente em cada mecanismo. Por exemplo, a divisão por zero no Oracle retorna o texto de erro ORA-01476: divisor is equal to zero, mas ERROR: division by zero no PostgreSQL.

Possível mitigação

Se o aplicativo, a infraestrutura de suporte ou a documentação dependerem do texto de erro, revise a conversão. Caso contrário, ignore essa diferença.

Revisar a emulação de função integrada da Oracle

Possível causa raiz

A conversão de código e esquema do Database Migration Service tem como objetivo fornecer o comportamento da função do Oracle com equivalentes do PostgreSQL, mas os resultados nem sempre são satisfatórios para seu cenário. Por isso, os espaços de trabalho de conversão sempre mostram um aviso com conversões de função que podem precisar da sua análise.

Possível mitigação

Recomendamos que você analise os objetos em que os espaços de trabalho de conversão emitem avisos no grupo de problemas CW_OP0605.

Revise o tipo de dados da coluna de chave externa

Possível causa raiz

O Database Migration Service identificou especificações de tipo de dados incompatíveis entre objetos pai e filho (por exemplo, quando uma coluna pai é NUMBER(4) e a coluna filho é NUMBER(10)).

Possível mitigação

Na maioria das vezes, pequenas incompatibilidades de tipo de dados não causam problemas na funcionalidade do banco de dados. No entanto, recomendamos que você revise o modelo de dados convertido para verificar se há inconsistências.

Análise funcional recomendada
Possível causa raiz

Esse grupo captura todos os problemas genéricos relacionados a possíveis diferenças funcionais no código do Oracle e do PostgreSQL. Os problemas neste grupo não se enquadram em nenhum outro grupo de problemas mais específico.

Possível mitigação

Revisar a emulação de função integrada da Oracle

Possível causa raiz

Muitas funções integradas do Oracle não têm um equivalente direto no PostgreSQL. Para ajudar a reduzir esse problema em migrações, o Database Migration Service converte seu código usando diferentes expressões SQL para produzir um comportamento funcional equivalente no PostgreSQL.

Em alguns casos, as expressões convertidas podem ser complexas. O Database Migration Service emite avisos no grupo CW_OP0702 para destacar possíveis problemas e informar que uma função foi emulada com uma expressão.

Possível mitigação

Revise o código convertido para garantir que as funções convertidas se comportem conforme o esperado no ambiente do PostgreSQL.

É necessária a refatoração de transações autônomas

Possível causa raiz

O PostgreSQL não é compatível com transações autônomas.

Possível mitigação

É possível realizar transações autônomas no PostgreSQL usando a extensão dblink, pg_background ou PL/Proxy. As chamadas de banco de dados feitas com qualquer uma dessas extensões são executadas em uma sessão diferente e, portanto, geram uma transação autônoma.

É necessário fazer a refatoração dos links do banco de dados

Possível causa raiz

O Database Migration Service não é compatível com links de banco de dados do Oracle. Objetos que usam links precisam de refatoração.

Possível mitigação

Dependendo do destino do link do banco de dados, é possível implementar funcionalidades equivalentes no PostgreSQL com extensões de banco de dados, como dblink, postgres_fdw, oracle_fdw ou PL/Proxy.

É necessária uma refatoração de fila avançada

Possível causa raiz

Os pacotes do Oracle Advanced Queuing (DBMS_AQ, DBMS_AQADM) não têm equivalentes no PostgreSQL e exigem refatoração.

Possível mitigação

Considere as seguintes opções:

  • Refatore a funcionalidade de enfileiramento do banco de dados para a camada de aplicativo.
  • Use tabelas, alertas e gatilhos do PostgreSQL para implementar um comportamento equivalente.
  • Consulte seu representante da equipe de soluções técnicas para receber mais ajuda.

É necessário refatorar o e-mail do banco de dados

Possível causa raiz

O AlloyDB para PostgreSQL não permite o envio de e-mails diretamente do banco de dados. Extensões que ativam essa funcionalidade também não são compatíveis. Por isso, o Database Migration Service não converte usos do pacote UTL_SMTP.

Possível mitigação

Refatore o código de e-mail do banco de dados e mova a responsabilidade de enviar e-mails para a camada de aplicativo. Você ainda pode usar o banco de dados para capturar as condições em que o envio de e-mail é necessário.

Um exemplo de implementação seria gravar os detalhes do e-mail em uma tabela dedicada. Essa tabela também pode funcionar como uma fila de e-mails que você pesquisa com uma função do Cloud Run functions e processa o SMTP real.

É necessário fazer a refatoração de jobs e programação

Possível causa raiz

Os pacotes do Oracle DBMS_JOB e DBMS_SCHEDULER não são convertidos pelo Database Migration Service. É preciso refatorar o código que faz referência a esses pacotes.

Possível mitigação

Para jobs simples sem dependências, é possível criar manualmente jobs programados no banco de dados PostgreSQL de destino com a extensão pg_cron.

Para programações mais complicadas que o pg_cron não aceita, talvez seja necessário usar um programador de terceiros ou no nível do aplicativo.

A refatoração de E/S de arquivo é necessária

Possível causa raiz

O Database Migration Service não é compatível com o pacote UTL_FILE do Oracle. É necessário refatorar o código que faz referência a esses pacotes.

A extensão Orafce inclui a emulação UTL_FILE, mas pode não funcionar em um ambiente PostgreSQL gerenciado pelo Google devido a recursos restritos de E/S de arquivo.

Possível mitigação
  • Refatore o código para remover dependências de UTL_FILE.
  • O AlloyDB para PostgreSQL tem algumas restrições nos recursos de E/S de arquivo. Por isso, não é possível implementar esse comportamento diretamente no banco de dados de destino.

    Uma alternativa possível é instalar o PostgreSQL com a extensão orafce em uma VM do Compute Engine na sua VPC. Em seguida, use a extensão PL/Proxy no banco de dados de destino para chamar a versão UTL_FILE compatível com PostgreSQL que é executada no banco de dados na VM do Compute Engine.

Sinônimos

Possível causa raiz

O PostgreSQL não é compatível com sinônimos. Para objetos de código, o Database Migration Service substitui automaticamente as referências de sinônimos pelo esquema de origem e o nome do objeto. Se você usar sinônimos fora de objetos de código, por exemplo, em esquemas somente leitura para usuários de aplicativos de banco de dados, será necessário convertê-los manualmente.

Possível mitigação

Para usar sinônimos fora de objetos de código, use o parâmetro SEARCH_PATH do PostgreSQL ou refatore seu código para usar visualizações em objetos de consulta.

Tabelas temporárias globais

Possível causa raiz

Este grupo de problemas é um aviso de que o Database Migration Service detectou uma tabela temporária global no seu código-fonte do Oracle. Para migrar tabelas temporárias globais, é necessário ter a extensão pgtt do PostgreSQL instalada e criada no banco de dados de destino.

Possível mitigação

Recomendamos que você verifique se a extensão pgtt do PostgreSQL está instalada e criada no banco de dados de destino.

Confira as sugestões do Gemini

Possível causa raiz:

Esse grupo de problemas captura todos os erros e avisos genéricos relacionados à conversão de código aprimorada pelo Gemini.

Possível mitigação: os problemas encontrados aqui nem sempre indicam problemas reais, mas recomendamos que você revise todas as conversões otimizadas pelo Gemini para garantir que elas atendam às suas expectativas.

Revisar o código aprimorado por IA

Possível causa raiz: esse código DDL foi convertido com recursos aprimorados pelo Gemini e pode precisar da sua revisão para garantir a precisão.

Possível mitigação: recomendamos que você revise com cuidado o código convertido com aumentos de IA para garantir que o resultado final corresponda à funcionalidade do seu esquema de origem.

Citações

Possível causa raiz: as sugestões aprimoradas com o Gemini podem incluir conteúdo citado de várias fontes. Algumas citações podem estar sujeitas a restrições de licença. Recomendamos que você revise o código convertido para citações.

Problemas na conversão de metadados

Possível causa raiz:

Esse grupo captura todos os problemas de conversão que não se enquadram em nenhum outro grupo de problemas mais específico.

Possível mitigação

Recomendamos que você revise o código convertido com base no seu conhecimento do modelo de dados de origem e ajuste o código conforme necessário.

Problemas na conversão de metadados

Possível causa raiz:

Esse grupo captura todos os problemas de rastreamento de metadados que não se enquadram em nenhum outro grupo de problemas mais específico.

Possível mitigação:

Exemplos de problemas nesse grupo geralmente estão relacionados a erros ou avisos de compilação que podem causar problemas com tipos de dados no PostgreSQL convertido. Recomendamos que você revise o código convertido com base no seu conhecimento do modelo de dados de origem e ajuste as referências com falha.

Entre em contato com sua equipe de suporte

Possível causa raiz

Em casos extremos especiais, você pode encontrar um erro interno com um objeto de origem do Oracle válido. Se isso acontecer, entre em contato com a equipe de suporte para receber mais ajuda.

Problemas gerais de conversão

Possível causa raiz

Esse grupo contém todos os problemas que não se enquadram em nenhuma outra categoria ou grupo mais específico.

Possível mitigação

Recomendamos que você revise o código convertido com base no seu conhecimento do modelo de dados e do código de origem e faça os ajustes necessários.