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 a planear a correção de erros e avisos de conversão. Cada categoria representa o tipo de trabalho que pode ter de realizar para corrigir os problemas (revisão, refatoração, ajuste dos tipos de dados). Os grupos oferecem uma agregação adicional, uma vez que diferenciam entre casos específicos a um nível inferior:

Ecrã de vista geral do espaço de trabalho de conversões que mostra grupos e categorias de problemas de conversão.
Figura 1. Ecrã de vista geral do espaço de trabalho de conversões com grupos e categorias de problemas de conversão.
Ecrã de vista geral do espaço de trabalho de conversões que mostra grupos e categorias de problemas de conversão.

A tabela seguinte apresenta todos os grupos de problemas de conversão que pode encontrar durante a conversão do esquema:

ID do grupo de problemas Descrição

Código de origem inválido

Potencial causa principal

Os erros neste grupo ocorrem frequentemente quando o serviço de migração de bases de dados encontra 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;).

Mitigação possível

Corrija os objetos inválidos na base de dados Oracle de origem. Em seguida, atualize a captura instantânea do esquema de origem no serviço de migração de bases de dados e tente novamente o processo de conversão do esquema. Em alternativa, pode excluir o objeto da migração.

Objetos referenciados em falta

Potencial causa principal

O serviço de migração de bases de dados usa metadados de objetos na árvore de origem para melhorar a qualidade da conversão de código de objetos dependentes. Se o seu código fizer referência a objetos que não estão incluídos no esquema de origem, pode ter problemas de conversão porque o Serviço de migração de bases de dados não consegue determinar a estrutura ou os tipos de dados das colunas, dos atributos ou dos objetos referenciados em falta.

Os possíveis erros neste grupo incluem tipos de dados incorretos para tipos definidos pelo utilizador (UDTs) ou tipos de dados VARCHAR predefinidos para colunas, parâmetros ou variáveis.

Mitigação possível

Certifique-se de que todos os objetos referenciados são adicionados à árvore de origem do serviço de migração de base de dados ou ajuste manualmente o código PostgreSQL com base nos seus conhecimentos do modelo de dados de origem para as dependências em falta.

Tabelas sem chave principal

Potencial causa principal

O serviço de migração de base de dados requer que todas as tabelas tenham uma chave primária. Para tabelas sem chaves primárias, o serviço de migração de bases de dados adiciona uma coluna NUMERIC denominada rowid à tabela PostgreSQL de destino. Esta coluna é preenchida com os valores numéricos correspondentes da pseudocoluna ROWID de origem do Oracle. Para garantir que as declarações INSERT não falham após a migração, o serviço de migração de bases de dados cria uma sequência e usa-a para incrementar automaticamente a coluna rowid.

Mitigação possível

Pode manter ou remover a coluna rowid após a migração.

Funcionalidade integrada da Oracle não suportada

Potencial causa principal

Pode estar a usar uma funcionalidade Oracle integrada que não é suportada.

Mitigação possível

Encontre funcionalidades semelhantes no PostgreSQL e modifique o código convertido em conformidade. Em alguns casos, a funcionalidade em falta pode ser fornecida pela extensão Orafce, disponível para migrações do Cloud SQL para PostgreSQL e do AlloyDB para PostgreSQL.

O idioma SQLCODE ainda não é suportado

Potencial causa principal

A função SQLCODE do Oracle não é suportada para a conversão. SQLCODE devolve um INTEGER, enquanto que o equivalente mais próximo no PostgreSQL é a função SQLSTATE que devolve valores TEXT.

Mitigação possível

Se o seu código fonte não depender da função SQLCODE para devolver um número inteiro (por exemplo, a função SQLCODE só é registada numa coluna VARCHAR2 ou com uma mensagem DBMS_OUTPUT), pode usar a função SQLSTATE com segurança no código PostgreSQL.

Se o seu código-fonte depender da função SQLCODE para devolver um número inteiro (por exemplo, se a usar com as variáveis NUMBER ou INTEGER, ou guardar os valores devolvidos pela função SQLCODE como parâmetros ou colunas), tem de refatorar o código convertido.

A função SQL da Oracle ainda não é suportada

Potencial causa principal

Algumas funções incorporadas do Oracle não são suportadas pelo serviço de migração de bases de dados para conversão.

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

Mitigação possível

Inspeccione que função do Oracle gerou o erro.

  • Se a função existir com o mesmo comportamento no PostgreSQL, pode ignorar a mensagem de erro, uma vez 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 forma diferente ou simplesmente não existir no PostgreSQL, pode tentar corrigir o código convertido:

    • Crie uma função definida pelo utilizador (UDF) com o mesmo nome na base de dados de destino.
    • Substitua a chamada de função na origem por uma expressão equivalente.
    • Use a assistência de conversão melhorada pelo Gemini. Para mais informações, consulte o artigo Converta código e esquemas do SQL Server com a ajuda do Gemini.

    • Algumas funções ou funcionalidades da base de dados Oracle podem ser replicadas com extensões, como a Orafce. Para mais informações sobre as extensões suportadas na base de dados de destino, consulte Extensões de base de dados suportadas.

Os pacotes incorporados da Oracle não são totalmente suportados

Potencial causa principal

O Serviço de migração de bases de dados suporta determinados pacotes incorporados do Oracle, mas muitos não têm suporte de conversão total, por exemplo, DBMS_STATS, DBMS_UTILITY ou DBMS_SQL.

Mitigação possível

Se usar pacotes não suportados, pode ter de:

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

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

  • Algumas funções ou funcionalidades da base de dados Oracle podem ser replicadas com extensões, como a Orafce. Para mais informações sobre as extensões suportadas na base de dados de destino, consulte Extensões de base de dados suportadas.

O tipo de dados Oracle ainda não é suportado para conversão

Potencial causa principal

Alguns tipos de dados da Oracle não são atualmente suportados para conversão ou movimento de dados.

Mitigação possível

Na maioria dos casos, o PostgreSQL tem um tipo de dados equivalente. Pode usar ficheiros de mapeamento de conversões para personalizar a lógica de conversão e transformar o tipo de dados Oracle não suportado no tipo de dados PostgreSQL necessário.

Para mais informações sobre o suporte de tipos de dados, consulte o artigo Espaços de trabalho de conversão: vista geral e objetos suportados.

Funcionalidade de origem ainda não suportada

Potencial causa principal

Este grupo capta todos os problemas genéricos relacionados com funcionalidades do Oracle que não são suportadas para conversão. Os problemas neste grupo não se enquadram noutros grupos de problemas mais específicos.

Mitigação possível

O tipo de objeto do esquema não é suportado

Potencial causa principal

O serviço de migração de bases de dados não suporta determinados tipos de objetos de esquemas do Oracle para a conversão de código porque o PostgreSQL não tem equivalentes adequados. Os exemplos incluem tabelas organizadas por índice (IOTs), índices de pesquisa de texto ou corpos para tipos definidos pelo utilizador (UDTs).

Mitigação possível

O serviço de migração de bases de dados converte objetos não suportados no equivalente do PostgreSQL mais próximo. Por exemplo, as tabelas externas tornam-se tabelas normais com uma restrição de chave primária, os índices de pesquisa de texto são convertidos em índices de árvore B. Tenha em atenção que estas conversões podem levar à perda de funcionalidades específicas do tipo de objeto original.

Funcionalidade PL/SQL ainda não suportada

Potencial causa principal

Este grupo capta todos os problemas genéricos relacionados com funcionalidades de PL/SQL que não são suportadas para conversão. Os problemas neste grupo não se enquadram noutros grupos de problemas mais específicos.

Mitigação possível

A associação em massa ainda não é suportada

Potencial causa principal

Atualmente, a conversão de código do serviço de migração de base de dados não suporta funcionalidades de associação em massa do Oracle, como BULK COLLECT, FORALL ou SAVE EXCEPTIONS.

Mitigação possível

Para corrigir o problema, tem de modificar o código que usa funcionalidades de associação em massa. Pode querer considerar as diferenças na arquitetura do PostgreSQL e do Oracle, e se o processamento de matrizes é necessário no PostgreSQL para o seu exemplo de utilização.

Existem várias estratégias para abordar as operações de associação em massa da Oracle no PostgreSQL. A respetiva utilização depende do seu cenário específico, pelo que recomendamos que use a assistência de conversão com tecnologia Gemini para satisfazer as suas necessidades específicas. Seguem-se outros exemplos de recomendações para ajudar a começar:

  • Para um BULK COLLECT completo (sem LIMIT), pode tentar usar a função ARRAY_AGG.
  • Para BULK COLLECT com LIMIT, pode tentar usar um CURSOR FOR LOOP para carregar e processar lotes de linhas em matrizes. No entanto, se o seu caso permitir alterações funcionais, uma alternativa possivelmente mais simples seria usar o CURSOR FOR LOOP para processar uma linha de cada vez (em vez de as carregar em matrizes).
  • Para operações FORALL, pode experimentar a DML baseada em conjuntos com UNNEST se optar por usar o processamento de matrizes.
  • Para o SAVE EXCEPTIONS, pode ter de escrever um controlador de exceções numa função baseada em linhas CURSOR FOR LOOP, uma vez que não existe uma cláusula equivalente no PostgreSQL.

As coleções ainda não são suportadas

Potencial causa principal

A conversão de código do serviço de migração de base de dados tem suporte parcial para coleções do Oracle.

Mitigação possível

Tem de modificar o código PostgreSQL convertido em conformidade. Quando resolver problemas com coleções, lembre-se de que as matrizes do PostgreSQL nunca são esparsas. Se atribuir elementos de forma esparsa, as matrizes PostgreSQL podem devolver resultados e contagens de cardinalidade diferentes das matrizes Oracle.

Uma vez que o PostgreSQL não suporta matrizes indexadas por strings, consoante a natureza dos dados, pode considerar adequadas as extensões JSON/JSONB ou hstore.

As funções de pipeline ainda não são suportadas

Potencial causa principal

As funções de pipeline não são suportadas pelo serviço de migração de bases de dados.

Mitigação possível

Pode substituir as funções de pipeline do Oracle por funções de devolução de conjuntos do PostgreSQL. Recomendamos que ajuste o código de uma forma relevante para o seu exemplo de utilização. Seguem-se alguns exemplos para ajudar a começar:

  1. Referencie o tipo PostgreSQL (UDT) que é convertido a partir do objeto Oracle de origem ou do tipo de registo que define o tipo de linha da função canalizada. Em seguida, modifique a cláusula de retorno da função PostgreSQL para RETURNS SETOF <type name> ou RETURNS TABLE, consoante o 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 ainda não é suportada

Potencial causa principal

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

Mitigação possível

Tem de modificar o código convertido para corresponder aos seus requisitos. Recomendamos vivamente que use a assistência de conversão com tecnologia Gemini para processar SQL dinâmico.

A opção CONNECT BY ainda não é suportada

Potencial causa principal

A maioria dos CONNECT BYoperadores, funções e pseudocolunas é suportada pelo serviço de migração de bases de dados e convertida em expressões de tabelas comuns (CTEs) recursivas do PostgreSQL. No entanto, existem determinadas exceções que podem exigir a sua atenção. Por exemplo, a cláusula ORDER SIBLINGS BY só é suportada para ordem ascendente.

Mitigação possível

Não é possível replicar a cláusula ORDER SIBLINGS BY para ordem descendente de forma simples, pelo que pode ter de reestruturar o código para funcionar com ordem ascendente.

Reveja os problemas comunicados com os operadores CONNECT BY e ajuste o código, quando necessário. Recomendamos que explore as funcionalidades de conversão automática com tecnologia Gemini para acelerar estas correções. Para mais informações, consulte o artigo Converta código e esquemas do Oracle com a ajuda do Gemini.

JSON ainda não suportado

Potencial causa principal

Existem determinadas limitações na forma como o serviço de migração de bases de dados suporta JSON para a movimentação de dados e a conversão de código:

  • JSONB não é suportado para a movimentação de dados.
  • A conversão de código não suporta as funções nem os operadores de consulta JSON no Oracle (como JSON_TABLE, JSON_QUERY, JSON_OBJECT[AGG], JSON_ARRAYAGG e JSON_PATCH).
  • Nas versões do Oracle anteriores à 21c, pode armazenar dados JSON nas colunas VARCHAR2, CLOB ou BLOB e validá-los com a condição IS JSON. O serviço de migração de bases de dados não suporta a conversão desta condição.
Mitigação possível
  • Para mover dados JSON armazenados nas colunas VARCHAR2, CLOB ou BLOB para o PostgreSQL, pode ter de escrever um ficheiro de mapeamento de conversão com a diretiva MODIFY_TYPE.

    Por exemplo:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

    Para mais informações sobre ficheiros de mapeamento de conversões, consulte o artigo Ficheiros de mapeamento de conversões.

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

Problemas de bloqueio e transações

Potencial causa principal

A conversão de código do serviço de migração de bases de dados não suporta declarações LOCK ou SAVEPOINT. O PostgreSQL não suporta SAVEPOINT.

Mitigação possível
  • Divida os blocos SAVEPOINT no Oracle para separar blocos de transações no PostgreSQL que usam a declaração ROLLBACK.
  • Para implementar DBMS_LOCK, use a extensão PostgreSQL pg_dbms_lock. Esta extensão simplifica a migração de bloqueios definidos pelo utilizador do Oracle para o PostgreSQL através da emulação da funcionalidade do pacote DBMS_LOCK do Oracle.

O XML ainda não é suportado

Potencial causa principal

O serviço de migração de bases de dados não suporta o Oracle XMLTYPE nem as funções e os operadores XML associados.

Mitigação possível

Embora o Database Migration Service não suporte diretamente as colunas XMLTYPE, pode personalizar as colunas BLOB, CLOB, NVARCHAR2 ou VARCHAR2 para XML para a movimentação de dados. O PostgreSQL suporta a funcionalidade XML.

Para migrar os seus dados XML, siga estes passos:

  1. Crie um ficheiro de mapeamento de conversões com a diretiva MODIFY_TYPE para dados XML. Por exemplo:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_XML_DATA:XML

    Para mais informações sobre ficheiros de mapeamento de conversões, consulte o artigo Ficheiros de mapeamento de conversões.

  2. Inicie a tarefa de migração. Este processo migra todos os dados do Oracle para o PostgreSQL, exceto os dados em colunas do tipo XMLTYPE. Estas 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 principal da tabela de origem.
  4. Combine os dados XML da tabela externa na tabela PostgreSQL original.

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

O idioma PIVOT ainda não é suportado

Potencial causa principal

O serviço de migração de bases de dados não suporta os operadores de transposição PIVOT e UNPIVOT para a conversão de código.

Mitigação possível

Pode conseguir a PIVOTtransposição no PostgreSQL usando a extensão tablefunc ou reescrevendo a expressão PIVOT de origem para agregações condicionais. Por exemplo:

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

Pode criar UNPIVOTtransposições, que criam pares de valor-chave a partir de um conjunto de colunas, no PostgreSQL de várias formas:

  • 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))
  • 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 declaração ALTERainda não é suportada

Potencial causa principal

O Database Migration Service não converte declarações ALTER (que são frequentemente executadas em SQL dinâmico).

Mitigação possível

Substitua as declarações ALTER do Oracle pelo comando SET no PostgreSQL. Recomendamos que explore as funcionalidades de conversão automática com tecnologia Gemini para acelerar estas correções. Para mais informações, consulte o artigo Converta código e esquemas do Oracle com a ajuda do Gemini.

Funcionalidade de SQL ainda não suportada

Potencial causa principal

Este grupo capta todos os problemas genéricos relacionados com funcionalidades SQL que não são suportadas para conversão. Os problemas neste grupo não se enquadram noutros grupos de problemas mais específicos. Alguns exemplos incluem: acionadores de eventos de base de dados, declarações GRANT, operações de INSERT em várias tabelas, DML em vistas inline (INSERT INTO (SELECT ... FROM ...)) e vistas laterais.

Mitigação possível

Sintaxe não suportada

Potencial causa principal

Este grupo capta todos os problemas genéricos relacionados com a sintaxe de SQL ou PL/SQL do Oracle não suportada. Os problemas neste grupo não se enquadram noutros grupos de problemas mais específicos.

Mitigação possível

Altere o seu código para usar uma sintaxe do PostgreSQL funcionalmente equivalente. Recomendamos que explore as funcionalidades de conversão automática com tecnologia Gemini para ajustar o código. Para mais informações, consulte o artigo Converta código e esquemas do Oracle com a ajuda do Gemini.

Sintaxe SQL não suportada

Potencial causa principal

O seu código fonte usa sintaxe ou elementos SQL não suportados pelo Database Migration Service. Por exemplo, o parâmetro NLS_LANG na função TO_DATE do Oracle não é suportado.

Mitigação possível
Sintaxe de PL/SQL não suportada

Potencial causa principal

O seu código fonte usa sintaxe ou elementos PL/SQL que não são suportados pelo serviço de migração de base de dados. Por exemplo, as declarações baseadas em registos INSERT (como INSERT INTO table VALUES r_variable) e PRAGMA RESTRICT_REFERENCES não são suportadas.

Mitigação possível

Altere o seu código para usar uma sintaxe do PostgreSQL funcionalmente equivalente. Recomendamos que explore as funcionalidades de conversão automática com tecnologia Gemini para ajustar o código. Para mais informações, consulte o artigo Converta código e esquemas do Oracle com a ajuda do Gemini.

Sintaxe de data e hora não suportada

Potencial causa principal

O serviço de migração de bases de dados pode gerar erros ou avisos para sintaxe de data ou indicação de tempo não suportada, operações ou expressões. Alguns exemplos destes problemas incluem: comparações entre tipos de dados incompatíveis ou a utilização do modelo de formato TZH:TZM em datas/horas. Para mais informações sobre os objetos e os tipos de dados suportados, consulte o artigo Acerca dos espaços de trabalho de conversão.

Mitigação possível

Pode recriar a maioria das expressões de data e indicação de tempo usando os equivalentes do PostgreSQL. Recomendamos que explore as funcionalidades de conversão automática com tecnologia Gemini para acelerar estas correções. Para mais informações, consulte o artigo Converta código e esquemas do Oracle com a ajuda do Gemini.

Elementos não suportados da sintaxe de processamento de exceções da Oracle

Potencial causa principal

A conversão de código do serviço de migração de bases de dados não suporta os seguintes elementos de sintaxe de exceção do Oracle PL/SQL:

  • A utilização de RAISE_APPLICATION_ERROR com códigos de erro variáveis em vez de códigos -20nnn literais.
  • A utilização de SQLERRM com um argumento de código de erro, uma vez que esta sintaxe não é suportada no PostgreSQL.
Mitigação possível

Tem de resolver manualmente estes problemas no código convertido. Recomendamos que explore as funcionalidades de conversão automática com tecnologia Gemini para acelerar estas correções. Para mais informações, consulte o artigo Converta código e esquemas do Oracle com a ajuda do Gemini.

Tipos de dados e problemas de conversão

Potencial causa principal

O serviço de migração de bases de dados 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 capta todos os problemas de conversão de tipo de dados genéricos que não se enquadram noutros grupos de problemas.

Mitigação possível

Na maioria dos casos, o Database Migration Service emite uma mensagem ERROR_UNIMPLEMENTED ou ERROR_TYPE no código PostgreSQL convertido. Resolva este erro com base nos seus conhecimentos sobre os tipos de dados envolvidos.

Problemas de máscara de formato de data

Potencial causa principal

Pode encontrar avisos ou problemas ao converter expressões de data ou indicação de tempo em strings ou vice-versa com base num modelo de formato. O serviço de migração de base de dados usa um modelo predefinido (atualmente DD-MON-RR) quando as conversões no código fonte do Oracle excluem um modelo de formato de data ou hora explícito.

Por vezes, isto 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. Também pode ver este problema se os seus dados forem provavelmente afetados pelas diferenças entre o formato Oracle RR e o formato PostgreSQLYY.

Mitigação possível

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

Problemas de máscara de formato numérico

Potencial causa principal

O Database Migration Service não suporta todos os modelos de formato Oracle. Por exemplo, 'L' ou 'X' não são suportados. Pode encontrar problemas ou avisos com código que converte strings em números com base em modelos de formato Oracle.

Mitigação possível

Para modelos de formato Oracle que não tenham equivalente no PostgreSQL, pode ter de refatorar as suas expressões ou modelos de formato. Recomendamos que explore as funcionalidades de conversão automática com tecnologia Gemini para acelerar estas correções. Para mais informações, consulte o artigo Converta código e esquemas do Oracle com a ajuda do Gemini.

Problemas de conversão de tipos de dados

Potencial causa principal

Pode encontrar erros devido à conversão de tipos de dados não suportados ou imprecisos. Normalmente, o Database Migration Service emite ERROR_UNIMPLEMENTED. Normalmente, isto deve-se a metadados em falta ou incompletos. O serviço de migração de base de dados pode não ter informações suficientes para converter um tipo, por exemplo, em argumentos de funções ou parâmetros de procedimentos.

Mitigação possível

Ajuste o código do PostgreSQL para garantir conversões de tipos de dados corretas. Estas correções requerem que conheça os atributos, as variáveis e as colunas referenciados.

Problemas de comparação

Potencial causa principal

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, isto pode acontecer quando um tipo definido pelo utilizador (UDT) é comparado com NULL.

Mitigação possível

Reveja as expressões PostgreSQL convertidas e resolva os problemas. Recomendamos que explore as funcionalidades de conversão automática com tecnologia Gemini para acelerar estas correções. Para mais informações, consulte o artigo Converta código e esquemas do Oracle com a ajuda do Gemini.

Os problemas nesta categoria representam casos em que o código fonte da 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 requerem a sua revisão. Isto acontece devido às diferenças na forma como o Oracle e o PostgreSQL processam os tipos de dados, os formatos ou os objetos.

À primeira vista, esta categoria pode parecer sobrepor-se a problemas na categoria Tipos de dados e conversão (CW_05), mas tenha em atenção que representam problemas diferentes. CW_05 contém problemas conhecidos em que o serviço de migração de bases de dados não consegue converter o código Oracle no respetivo equivalente do PostgreSQL.

Reveja a máscara do formato de data

Potencial causa principal

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

Mitigação possível

Reveja e valide as expressões com conversões de modelos de formatos para se certificar de que o código convertido funciona como esperado.

Reveja a máscara de formato numérico

Potencial causa principal

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

Mitigação possível

Reveja e valide as expressões com conversões do modelo de formato para se certificar de que o código convertido funciona como esperado.

Reveja o código de exceção

Potencial causa principal

Quando usa RAISE_APPLICATION_ERROR com um código de erro no intervalo de -20000 a -20999, o serviço de migração de base de dados converte-o em PostgreSQL RAISE EXCEPTION com um SQLSTATE no intervalo de CW0000 a CW999. A conversão retém os últimos 3 dígitos do código de erro de origem e prefixa-o com CW.

Mitigação possível

Reveja este comportamento para determinar se é adequado às suas necessidades. Esta revisão só é necessária se os códigos de erro de origem forem significativos para a sua aplicação, equipas de apoio técnico ou documentação. Se o valor do código de erro não for significativo, pode ignorar este aviso.

Reveja a mensagem de exceção

Potencial causa principal

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

Mitigação possível

Se a sua aplicação, infraestrutura de apoio técnico ou documentação dependerem do texto de erro, reveja a conversão. Caso contrário, pode ignorar esta diferença.

Reveja a emulação de funções integradas da Oracle

Potencial causa principal

O código do serviço de migração de bases de dados e a conversão de esquemas destinam-se a fornecer o comportamento das funções do Oracle com equivalentes do PostgreSQL, mas os resultados podem nem sempre ser satisfatórios para o seu cenário. Como tal, os espaços de trabalho de conversão fornecem sempre um aviso consultivo com conversões de funções que podem exigir a sua revisão.

Mitigação possível

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

Reveja o tipo de dados da coluna de chave externa

Potencial causa principal

O serviço de migração de base de dados identificou especificações de tipo de dados em conflito entre objetos principais e secundários (por exemplo, quando uma coluna principal é NUMBER(4) e a coluna secundária é NUMBER(10)).

Mitigação possível

Na maioria das vezes, as ligeiras falhas de correspondência no tipo de dados não causam problemas na funcionalidade da base de dados. No entanto, recomendamos que reveja o modelo de dados convertido para verificar se existem inconsistências.

Revisão funcional recomendada
Potencial causa principal

Este grupo capta todos os problemas genéricos relacionados com potenciais diferenças funcionais no código Oracle e PostgreSQL. Os problemas neste grupo não se enquadram noutros grupos de problemas mais específicos.

Mitigação possível

Reveja a emulação de funções integradas da Oracle

Potencial causa principal

Muitas funções integradas do Oracle não têm um equivalente direto no PostgreSQL. Para ajudar a mitigar esse problema nas migrações, o serviço de migração de bases de dados converte o seu código através de diferentes expressões SQL para produzir um comportamento funcional equivalente no PostgreSQL.

Em alguns casos, as expressões convertidas podem ser complexas. O serviço de migração de bases de dados emite avisos no grupo CW_OP0702 para realçar possíveis problemas e informar que uma função foi emulada com uma expressão.

Mitigação possível

Reveja o código convertido para se certificar de que as funções convertidas se comportam como esperado no seu ambiente PostgreSQL.

Refatoração das transações autónomas necessária

Potencial causa principal

O PostgreSQL não suporta transações autónomas.

Mitigação possível

Pode alcançar transações autónomas no PostgreSQL através da extensão PL/Proxy.dblinkpg_background As chamadas de base de dados feitas com qualquer uma destas extensões são executadas numa sessão diferente e, por isso, geram uma transação autónoma.

É necessária a refatoração das associações de bases de dados

Potencial causa principal

O serviço de migração de bases de dados não suporta Links de bases de dados Oracle. Os objetos que usam links requerem refatorização.

Mitigação possível

Consoante o destino da ligação à base de dados, pode implementar uma funcionalidade equivalente no PostgreSQL com extensões de base de dados, como: dblink, postgres_fdw, oracle_fdw, ou PL/Proxy.

Refatoração avançada de filas necessária

Potencial causa principal

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

Mitigação possível

Considere as seguintes opções:

  • Refatore a funcionalidade de colocação em fila de espera da base de dados para a camada de aplicação.
  • Use tabelas, alertas e acionadores do PostgreSQL para implementar um comportamento equivalente.
  • Consulte o representante da equipa de soluções técnicas para receber assistência adicional.

É necessária a refatoração do email da base de dados

Potencial causa principal

O AlloyDB para PostgreSQL não suporta o envio de emails diretamente a partir da base de dados. As extensões que ativam esta funcionalidade também não são suportadas. Como tal, o serviço de migração de bases de dados não converte utilizações do pacote UTL_SMTP.

Mitigação possível

Refatore o código de email da base de dados e transfira a responsabilidade pelo envio de emails para o nível da aplicação. Pode continuar a usar a base de dados para captar as condições em que o envio de emails é necessário.

Uma implementação de exemplo pode ser escrever detalhes de email numa tabela dedicada. Esta tabela também pode funcionar como uma fila de emails que consulta com uma função das funções do Cloud Run e processa o SMTP real.

Refatoração de tarefas e agendamento necessária

Potencial causa principal

Os pacotes Oracle DBMS_JOB e DBMS_SCHEDULER não são convertidos pelo Database Migration Service. Tem de refatorar o código que faz referência a estes pacotes.

Mitigação possível

Para tarefas simples sem dependências, pode criar manualmente tarefas agendadas na base de dados PostgreSQL de destino com a extensão pg_cron.

Para agendamentos mais complicados que o pg_cron não suporta, pode ter de usar um agendador ao nível da aplicação ou de terceiros.

Refatoração de E/S de ficheiros necessária

Potencial causa principal

O serviço de migração de bases de dados não suporta o pacote Oracle UTL_FILE. Tem de refatorar o código que faz referência a estes pacotes.

A extensão Orafce inclui a emulação UTL_FILE, mas pode não funcionar num ambiente PostgreSQL gerido pela Google devido às capacidades de E/S de ficheiros restritas.

Mitigação possível

Sinónimos

Potencial causa principal

O PostgreSQL não suporta sinónimos. Para objetos de código, o serviço de migração de bases de dados substitui automaticamente as referências de sinónimos pelos respetivos esquema de origem e nome do objeto. Se usar sinónimos fora dos objetos de código, por exemplo, em esquemas só de leitura para utilizadores de aplicações de base de dados, tem de os converter manualmente.

Mitigação possível

Para a utilização de sinónimos fora dos objetos de código, pode usar o parâmetro PostgreSQL SEARCH_PATH ou refatorar o seu código para usar vistas para objetos de consulta.

Tabelas temporárias globais

Potencial causa principal

Este grupo de problemas é um aviso de que o serviço de migração de bases de dados detetou uma tabela temporária global no seu código fonte Oracle. A migração de tabelas temporárias globais requer que tenha a extensão pgtt do PostgreSQL instalada e criada na base de dados de destino.

Mitigação possível

Recomendamos que verifique se tem a extensão pgtt PostgreSQL instalada e criada na base de dados de destino.

Reveja as sugestões do Gemini

Potencial causa:

Este grupo de problemas capta todos os erros e avisos genéricos relacionados com a conversão de código melhorada pelo Gemini.

Possível mitigação: os problemas encontrados aqui podem nem sempre indicar problemas reais, mas recomendamos vivamente que reveja todas as conversões melhoradas pelo Gemini para se certificar de que correspondem às suas expetativas.

Reveja o código aumentado pela IA

Potencial causa: este código DDL foi convertido com funcionalidades melhoradas pelo Gemini e pode precisar da sua revisão para garantir a precisão.

Possível mitigação Recomendamos que reveja cuidadosamente o código convertido com aumentos de IA para se certificar de que o resultado final corresponde à funcionalidade do seu esquema de origem.

Citações

Potencial causa principal: as sugestões melhoradas pelo Gemini podem incluir conteúdo citado de várias fontes. Determinadas citações podem estar sujeitas a restrições de licença. Recomendamos que reveja o código convertido para citações.

Problemas de conversão de metadados

Potencial causa:

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

Mitigação possível

Recomendamos que reveja o código convertido com base nos seus conhecimentos do modelo de dados de origem e ajuste o código conforme necessário.

Problemas de conversão de metadados

Potencial causa:

Este grupo capta todos os problemas de acompanhamento de metadados que não se enquadram em nenhum outro grupo de problemas mais específico.

Mitigação possível:

Normalmente, os exemplos de problemas neste grupo estão relacionados com erros de compilação ou avisos que podem originar problemas com os tipos de dados no PostgreSQL convertido. Recomendamos que reveja o código convertido com base nos seus conhecimentos do modelo de dados de origem e ajuste as referências com falhas.

Contacte a sua equipa de apoio técnico

Potencial causa principal

Em casos extremos especiais, pode ocorrer um erro interno com um objeto de origem Oracle válido. Se o fizer, contacte a sua equipa de apoio técnico para receber assistência adicional.

Problemas gerais de conversão

Potencial causa principal

Este grupo contém todos os problemas que não se enquadram noutras categorias ou grupos de problemas mais específicos.

Mitigação possível

Recomendamos que reveja o código convertido com base nos seus conhecimentos do modelo de dados e do código de origem e que o ajuste conforme necessário.