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

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

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 ser encontrados 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 de 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, talvez ocorram 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.

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

Possível mitigação

Verifique se todos os objetos referenciados foram adicionados à base de código do Database Migration Service ou ajuste manualmente o código do 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 de destino do PostgreSQL. Essa coluna é preenchida com os valores numéricos correspondentes da pseudocoluna ROWID de origem do Oracle. 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

É possível manter ou remover a coluna rowid após a migração.

Funcionalidade integrada do 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 sem suporte

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 retornar um número inteiro (por exemplo, SQLCODE só é registrado em uma coluna VARCHAR2 ou com uma mensagem DBMS_OUTPUT), SQLSTATE pode ser usado com segurança no código PostgreSQL.

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

A função SQL do Oracle 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 nem 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, porque o código convertido vai 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 da Oracle, mas muitos não têm suporte completo para conversão, por exemplo, DBMS_STATS, DBMS_UTILITY ou DBMS_SQL.

Possível mitigação

Se você usar 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 replicados facilmente 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 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 conversão ou movimentação de dados.

Possível mitigação

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

Para mais informações sobre o suporte a tipos de dados, consulte Espaços de trabalho de conversão: visão geral e objetos compatíveis.

Conflito de nomes

Possível causa raiz

Esse grupo captura problemas em que vários objetos de banco de dados (como tabelas, visualizações materializadas) são convertidos para usar o mesmo nome no banco de dados de destino. Por exemplo, esse problema pode ocorrer quando você tem objetos de origem com nomes que diferem apenas por letras maiúsculas e minúsculas. Os nomes de objetos do Oracle não diferenciam maiúsculas de minúsculas, mas o PostgreSQL diferencia. Portanto, os nomes de objetos são convertidos para usar a mesma string.

Possível mitigação

Renomeie os objetos conflitantes diretamente no banco de dados de origem ou no esquema convertido no editor do espaço de trabalho de conversão. Também é possível usar um arquivo de mapeamento de conversão com a diretiva RENAME_*.

O recurso de origem 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 desse grupo não se enquadram em nenhum outro grupo mais específico.

Possível mitigação

O tipo de objeto de esquema não é compatível

Possível causa raiz

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

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 da Pesquisa de texto são convertidos em índices de árvore B. Lembre-se de que essas conversões podem levar à perda de funcionalidades específicas do tipo de objeto original.

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

Possível causa raiz

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

Possível mitigação

A vinculação em massa 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 os recursos de vinculação em massa do Oracle, como BULK COLLECT, FORALL ou SAVE EXCEPTIONS.

Possível mitigação

Para corrigir o problema, é preciso modificar 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 as operações de vinculação em massa do Oracle no PostgreSQL. O uso deles depende do seu cenário específico, então recomendamos que você use a assistência de conversão com tecnologia do Gemini para lidar com suas necessidades específicas. Confira alguns exemplos de recomendações para 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 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, é possível tentar a DML baseada em conjunto com UNNEST se você optar por usar o processamento de matrizes.
  • Para SAVE EXCEPTIONS, talvez seja necessário escrever um gerenciador de exceções em um CURSOR FOR LOOP baseado em linha, já que não há uma cláusula equivalente no PostgreSQL.

Coleções 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

É necessário modificar o código PostgreSQL convertido de acordo. 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 string, dependendo da natureza dos dados, talvez você ache as extensões JSON/JSONB ou hstore adequadas.

As funções em pipeline não são compatíveis

Possível causa raiz

As funções em pipeline não são compatíveis com o Database Migration Service.

Possível mitigação

É possível substituir as funções em pipeline do Oracle por funções de retorno de conjunto do PostgreSQL. Recomendamos que você ajuste o código de uma forma que seja relevante para seu caso de uso. Confira alguns exemplos para 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 tipo de linha da função em pipeline. Em seguida, modifique a cláusula de retorno da função do PostgreSQL para ser 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 coleção da função de pipeline de origem, usado na cláusula RETURN da função Oracle, não é necessário no PostgreSQL.

A opção de SQL dinâmico não é compatível.

Possível causa raiz

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

Possível mitigação

É necessário modificar o código convertido para atender aos seus requisitos. Recomendamos que você use a assistência de conversão com tecnologia do Gemini para processar SQL dinâmico.

A opção CONNECT BY 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, na sigla em inglês) recursivas do PostgreSQL. No entanto, 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 que ele funcione com ordem crescente.

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

JSON não é compatível

Possível causa raiz

Há certas 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 é compatível com as funções ou operadores de consulta JSON no Oracle (como JSON_TABLE, JSON_QUERY, JSON_OBJECT[AGG], JSON_ARRAYAGG, JSON_PATCH).
  • Em versões do Oracle anteriores à 21c, é possível armazenar dados JSON em colunas VARCHAR2, CLOB ou BLOB e verificá-los 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ão, consulte Arquivos de mapeamento de conversão.

  • Para converter as funções e os operadores JSON do Oracle em PostgreSQL, use funções do PostgreSQL, como JSONB_ARRAY_ELEMENTS, 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 oferece suporte a 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.

XML não é compatível

Possível causa raiz

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

Possível mitigação

Embora o Database Migration Service não seja compatível diretamente com XMLTYPE, é possível personalizar colunas BLOB, CLOB, NVARCHAR2 ou VARCHAR2 para XML para 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ão, consulte Arquivos de mapeamento de conversão.

  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 no 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 sem suporte

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 realizar a transposição de PIVOT no PostgreSQL usando a extensão tablefunc ou reescrevendo a expressão PIVOT de origem em 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 com base em um conjunto de colunas, no PostgreSQL de várias maneiras:

  • Combinar uma mesclagem 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 não é compatível

Possível causa raiz

O Database Migration Service não ALTER instruções (que geralmente são executadas em SQL dinâmico) para conversão.

Possível mitigação

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

O recurso SQL não é compatível

Possível causa raiz

Esse grupo captura todos os problemas genéricos relacionados a recursos SQL que não são compatíveis com a conversão. Os problemas desse grupo não se enquadram em nenhum outro grupo 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 SQL ou PL/SQL do Oracle não compatível. Os problemas desse grupo não se enquadram em nenhum outro grupo mais específico.

Possível mitigação

Altere o 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

O 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

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

Possível mitigação

Altere o 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ê use os recursos de conversão automática 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 não compatíveis da sintaxe de processamento 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 do erro variáveis em vez de códigos -20nnn literais.
  • O uso de SQLERRM com um argumento de código do erro, já que essa sintaxe não é compatível com o PostgreSQL.
Possível mitigação

É necessário resolver esses problemas manualmente no código convertido. Recomendamos que você use os recursos de conversão automática 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 tipo). 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 sobre os tipos de dados envolvidos.

Problemas com o modelo de formato de data

Possível causa raiz

Talvez você encontre avisos ou problemas ao converter expressões de data ou carimbo de data/hora em strings ou vice-versa 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.

Às vezes, isso pode causar problemas no código convertido se o modelo de formato emitido para a conversã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 o modelo de formato numérico

Possível causa raiz

O Database Migration Service não é compatível com todos os modelos de formato do Oracle. Por exemplo, 'L' ou 'X' não são compatíveis. Você pode encontrar problemas ou avisos com códigos que convertem 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 as expressões ou os modelos de formato. Recomendamos que você use os recursos de conversão automática 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 tipo de dados

Possível causa raiz

Podem ocorrer erros devido à conversão de tipo de dados não compatível ou imprecisa. O Database Migration Service geralmente emite ERROR_UNIMPLEMENTED. Isso geralmente ocorre 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 as conversões corretas de tipo de dados. Para fazer essas correções, você precisa conhecer os atributos, as variáveis e as colunas referenciados.

Problemas de comparação

Possível causa raiz

O Database Migration Service pode não ter metadados ou informações suficientes sobre os 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 do PostgreSQL convertidas e resolva os problemas. Recomendamos que você use os recursos de conversão automática 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 lidam com tipos de dados, formatos ou objetos.

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

Revise o modelo de formato de data

Possível causa raiz

A maioria dos modelos de formato de data e carimbo de data/hora do Oracle tem equivalentes apropriados 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 RR do Oracle, que é convertido para o formato YY do PostgreSQL.

Possível mitigação

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

Revise o modelo de formato numérico

Possível causa raiz

A maioria dos modelos de formato numérico de origem tem um equivalente no PostgreSQL. Portanto, 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 um pouco diferente.

Possível mitigação

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

Revise o código de exceção

Possível causa raiz

Quando você usa RAISE_APPLICATION_ERROR com um código do 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 mantém os últimos três dígitos do código do erro de origem e adiciona o prefixo CW.

Possível mitigação

Analise esse comportamento para determinar se ele é adequado às suas necessidades. Essa revisão só será necessária se os códigos do erro de origem forem significativos para seu aplicativo, equipes de suporte ou documentação. Se o valor do código do 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, dividir 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 do erro, revise a conversão. Caso contrário, ignore essa diferença.

Revise 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 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 fornecem avisos com conversões de função que podem exigir sua revisão.

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 estrangeira

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 desse grupo não se enquadram em nenhum outro grupo mais específico.

Possível mitigação

Revise 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 nas 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ário uma 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ária uma 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 Oracle. Os objetos que usam links exigem refatoração.

Possível mitigação

Dependendo do destino do link do banco de dados, é possível implementar uma funcionalidade equivalente 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 precisam de refatoração.

Possível mitigação

Considere as seguintes opções:

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

É necessária uma refatoração do e-mail do banco de dados

Possível causa raiz

O Cloud SQL 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 os usos do pacote UTL_SMTP.

Possível mitigação

Refatore o código de e-mail do banco de dados e transfira a responsabilidade de enviar e-mails para o nível do aplicativo. Ainda é possível usar o banco de dados para capturar as condições em que o envio de e-mails é necessário.

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

É necessária uma refatoração de jobs e programação

Possível causa raiz

Os pacotes Oracle DBMS_JOB e DBMS_SCHEDULER não são convertidos pelo Database Migration Service. Você precisa 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 não são compatíveis com o pg_cron, talvez seja necessário usar um programador de nível de aplicativo ou de terceiros.

É necessária uma refatoração de E/S de arquivo

Possível causa raiz

O Database Migration Service não é compatível com o pacote UTL_FILE do Oracle. É preciso 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 do PostgreSQL gerenciado pelo Google devido a recursos restritos de E/S de arquivos.

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

    Uma alternativa possível seria instalar o PostgreSQL com a extensão orafce em uma VM do Compute Engine na 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 o 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 pelo 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.

É necessário efetuar a refatoração das tabelas temporárias globais

Possível causa raiz

Esse grupo de problemas é um aviso de que o Database Migration Service detectou uma tabela temporária global no 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 correspondam às suas expectativas.

Confira o código aprimorado por IA

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

Possível mitigação: recomendamos que você analise cuidadosamente o código convertido com as melhorias de IA para garantir que o resultado final corresponda à funcionalidade do esquema de origem.

Citações

Possível causa raiz: as sugestões aprimoradas pelo 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 encontrar 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 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 mais específico.

Possível mitigação:

Exemplos de problemas nesse grupo geralmente estão relacionados a erros de compilação ou avisos que podem levar a problemas com tipos de dados no PostgreSQL convertido. Recomendamos que você analise a base de código convertida 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, pode ocorrer um erro interno com um objeto de origem Oracle válido. Se sim, 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 da base de código de origem e faça os ajustes necessários.