Espaços de trabalho de conversão

Os espaços de trabalho de conversão ajudam a converter o esquema e os objetos do banco de dados de origem na sintaxe SQL compatível com o banco de dados de destino. Esta página oferece uma visão geral dos espaços de trabalho de conversão do Database Migration Service:

Independentemente de você usar a conversão automática de esquema ou criar outro arquivo de mapeamento de conversões, há determinados tipos de dados que não são compatíveis com migrações do Oracle. Para mais informações, consulte Limitações conhecidas para tipos de dados.

Conversão automatizada de código e esquema

Quando você cria um espaço de trabalho de conversão, o Database Migration Service realiza automaticamente a conversão inicial do esquema. A conversão automática de esquema oferece suporte a um subconjunto muito específico de objetos de banco de dados Oracle disponíveis.

A conversão de código automatizada oferece suporte aos seguintes objetos de banco de dados Oracle:

Elementos de esquema do Oracle com suporte

  • Restrições
  • Índices (somente índices criados no mesmo esquema da tabela)
  • Visualizações materializadas
  • Tipos de objetos (suporte parcial)
  • Sequências
  • Sinônimos
  • Tabelas
  • Visualizações

Elementos de código do Oracle com suporte

  • Gatilhos (somente no nível da tabela)
  • Pacotes
  • Funções
  • Procedimentos armazenados

Editor de SQL interativo

O editor SQL interativo permite modificar a sintaxe convertida do PostgreSQL diretamente no Database Migration Service. Você pode usá-lo para corrigir problemas de conversão ou ajustar o esquema para atender melhor às suas necessidades. Alguns objetos não podem ser modificados no editor integrado.

Objetos editáveis do Oracle

Depois de converter o código e o esquema do banco de dados de origem, use o editor interativo para modificar o SQL gerado para determinados tipos de objetos. Os seguintes objetos do Oracle são compatíveis com o editor:

  • Acionadores de tabela (necessita de permissão)
  • Visualizações materializadas.
  • Pacotes
  • Funções e procedimentos armazenados
  • Sinônimos
  • Visualizações
  • Restrições
  • Índices
  • Sequências

Além disso, alguns objetos são convertidos, mas não estão disponíveis para edição diretamente no Database Migration Service. Para modificar esses objetos, é necessário realizar as atualizações diretamente no banco de dados de destino depois de aplicar o esquema e o código convertidos.

Objetos que não têm suporte para edição:

  • Tipos de objeto definidos pelo usuário
  • Tabelas
  • Esquemas

Recursos de conversão assistida do Gemini

O Database Migration Service integra o Gemini para Google Cloud aos espaços de trabalho de conversão para ajudar a acelerar e melhorar o processo de conversão em duas áreas:

  • Forneça recursos de explicabilidade do código com o assistente de conversão: um conjunto de instruções dedicadas que podem ajudar você a entender melhor a lógica de conversão, propor correções para problemas de conversão ou otimizar o código convertido.

  • Aplique correções de problemas de conversão com rapidez usando as sugestões de conversão de código do Gemini: um mecanismo em que o modelo do Gemini pode aprender enquanto você corrige problemas de conversão e sugere mudanças em outros objetos com falhas no espaço de trabalho.

Para mais informações sobre a conversão assistida pelo Gemini, consulte as seguintes páginas:

Arquivos de mapeamento de conversão

É possível personalizar a lógica de conversão com um arquivo de mapeamento de conversão. O arquivo de mapeamento de conversão é um arquivo de texto que contém instruções precisas (chamadas de diretivas de conversão) sobre como os objetos do Oracle precisam ser convertidos em objetos do PostgreSQL.

Diretivas de conversão compatíveis

O Database Migration Service oferece suporte às seguintes diretivas de conversão para arquivos de mapeamento de conversão:

EXPORT_SCHEMA

EXPORT_SCHEMA é uma diretiva obrigatória para todos os arquivos de mapeamento de conversões. O Database Migration Service exige essa instrução para garantir que os esquemas de origem sejam convertidos nos esquemas de destino corretos. Verifique se os arquivos de mapeamento de conversão incluem esta linha:

EXPORT_SCHEMA 1

SCHEMA

O Database Migration Service precisa determinar qual esquema contém os objetos que precisam ser modificados com as diretivas de conversão. A diretiva SCHEMA resulta nos seguintes ajustes no fluxo de conversão:

  • O Database Migration Service converte somente esse esquema. Se você precisar converter outros esquemas em um único espaço de trabalho de conversão, faça o upload de vários arquivos com esquemas diferentes.
  • Todas as outras diretivas de personalização fornecidas no arquivo se aplicam apenas a objetos nesse esquema específico.

Use o seguinte formato:

SCHEMA SCHEMA_NAME

Em que SCHEMA_NAME é o nome do esquema no banco de dados de origem.

  • Se você incluir essa diretiva no arquivo de mapeamento de conversões, todas as personalizações serão aplicadas apenas a objetos contidos nesse esquema específico. Se você quiser personalizar objetos em outros esquemas, crie vários arquivos de mapeamento de conversão e faça o upload deles para o espaço de trabalho de conversão.
  • Se você pular essa diretiva, será necessário fornecer nomes de esquema explícitos para objetos modificados por outras diretivas de conversão. Por exemplo, em vez de usar SOURCE_TABLE_NAME para a diretiva REPLACE_TABLES, você precisa usar "SCHEMA_NAME.SOURCE_TABLE_NAME".

DATA_TYPE

É possível usar essa diretiva para mapear explicitamente qualquer tipo de dados aceito entre a sintaxe do Oracle e do PostgreSQL. Essa diretiva espera uma lista de mapeamentos separados por vírgulas. A definição inteira precisa ser fornecida em uma única linha, mas você pode incluir várias diretivas DATA_TYPE no arquivo de configuração. Use o seguinte formato:

DATA_TYPE ORACLE_DATA_TYPE1:PGSQL_DATA_TYPE1
DATA_TYPE ORACLE_DATA_TYPE2:PGSQL_DATA_TYPE2...

Em que ORACLE_DATA_TYPE e PGSQL_DATA_TYPE são tipos de dados aceitos pelas respectivas versões do Oracle e do PostgreSQL usadas na migração. Para informações sobre as versões compatíveis, consulte Visão geral do cenário.

Exemplo:

DATA_TYPE REAL:double precision,SMALLINT:integer

Para mais informações sobre os tipos de dados do Oracle e do PostgreSQL, consulte:

MODIFY_TYPE

A diretiva MODIFY_TYPE permite controlar em qual tipo de dados o Database Migration Service converte uma coluna específica na tabela de origem. Essa diretiva espera uma lista de mapeamentos separados por vírgulas. A definição inteira precisa ser fornecida em uma única linha, mas você inclui várias diretivas MODIFY_TYPE no arquivo de configuração. Use o seguinte formato:

MODIFY_TYPE SOURCE_TABLE_NAME1:COLUMN_NAME:EXPECTED_END_RESULT_DATA_TYPE
MODIFY_TYPE SOURCE_TABLE_NAME2:COLUMN_NAME:EXPECTED_END_RESULT_DATA_TYPE...

Em que:

  • SOURCE_TABLE_NAME é o nome da tabela que contém a coluna em que você quer mudar o tipo de dados.
  • COLUMN_NAME é o nome da coluna para a qual você quer personalizar o mapeamento de conversão.
  • EXPECTED_END_RESULT_DATA_TYPE é o tipo de dados do PostgreSQL que você quer que a coluna convertida use.

Exemplo:

MODIFY_TYPE events:dates_and_times:DATETIME,users:pseudonym:TEXT

PG_INTEGER_TYPE

Por padrão,o Database Migration Service converte os tipos NUMBER(p,s) em tipos DECIMAL(p,s) do PostgreSQL.

É possível modificar esse comportamento com a diretiva PG_INTEGER_TYPE. Defina o valor como 1 e force todos os tipos NUMBER com precisão e escala (NUMBER(p,s)) a serem convertidos em tipos smallint, integer ou bigint do PostgreSQL com base no número de dígitos de precisão.

Inclua a seguinte configuração no arquivo de mapeamento de conversões:

PG_INTEGER_TYPE 1

PG_NUMERIC_TYPE

Defina essa diretiva como 1 se você quiser converter todos os tipos NUMBER com precisão e escala (NUMBER(p,s)) em tipos real ou float do PostgreSQL (com base no número de dígitos de precisão).

Se você definir essa diretiva como 0, os valores de NUMBER(p,s) vão preservar o valor original exato e usar o tipo de dados interno do PostgreSQL.

Inclua a seguinte configuração no arquivo de mapeamento de conversões:

PG_NUMERIC_TYPE 1

DEFAULT_NUMERIC

A conversão padrão para NUMBERs sem precisão muda se você também usa a diretiva PG_INTEGER_TYPE:

  • Se você usar a diretiva PG_INTEGER, os NUMBERs sem precisão serão convertidos em valores DECIMAL.
  • Se você não usar a diretiva PG_INTEGER, NUMBERs sem precisão serão convertidos em valores BIGINT.

É possível modificar esse comportamento e usar a diretiva DEFAULT_NUMERIC para especificar qual tipo de dados deve ser usado para tipos NUMBER sem pontos de precisão especificados. Use o seguinte formato:

DEFAULT_NUMERIC POSTGRESQL_NUMERIC_DATA_TYPE

em que POSTGRESQL_NUMERIC_DATA_TYPE é um dos seguintes: integer, smallint, bigint.

Exemplo:

DEFAULT_NUMERIC integer

REPLACE_COLS

Use a diretiva REPLACE_COLS para renomear colunas no esquema convertido. Essa diretiva espera uma lista de mapeamentos separados por vírgulas. Use o seguinte formato:

REPLACE_COLS SOURCE_TABLE_NAME1(SOURCE1_TABLE1_COLUMN_NAME1:DESTINATION_TABLE1_COLUMN_NAME1,SOURCE_TABLE1_COLUMN_NAME2:DESTINATION_TABLE1_COLUMN_NAME2),SOURCE_TABLE_NAME2(SOURCE_TABLE2_COLUMN_NAME1:DESTINATION_TABLE2_COLUMN_NAME1,SOURCE_TABLE2_COLUMN_NAME2:DESTINATION_TABLE2_COLUMN_NAME2)...

Em que:

  • SOURCE_TABLE_NAME é o nome da tabela que contém a coluna cujo nome você quer mudar.
  • SOURCE_COLUMN_NAME é o nome da coluna na origem que você quer mudar.
  • DESTINATION_COLUMN_NAME é o novo nome da coluna que você quer usar no esquema convertido.

Exemplo:

REPLACE_COLS events(dates_and_times:event_dates),users(pseudonym:nickname)

REPLACE_TABLES

É possível usar a diretiva REPLACE_TABLES para renomear tabelas ou movê-las para um novo esquema. Essa diretiva espera uma lista de mapeamentos separados por espaços. Para mais informações sobre a sintaxe de cada caso de uso, abra as seções a seguir.

Renomear tabelas

Para renomear tabelas no esquema convertido, use o seguinte formato:

REPLACE_TABLES SOURCE_TABLE_NAME1:DESTINATION_TABLE_NAME1 SOURCE_TABLE_NAME2:DESTINATION_TABLE_NAME2

Em que:

  • SOURCE_TABLE_NAME é o nome da tabela de origem que você quer renomear no esquema convertido.
  • DESTINATION_TABLE_NAME é o novo nome da tabela que você quer usar no esquema convertido.

Exemplo:

REPLACE_TABLES "events:login_events" "users:platform_users"

Mover tabelas entre esquemas

É possível usar essa diretiva para mover tabelas entre esquemas adicionando o prefixo do esquema ao novo nome da tabela. Esse mecanismo pode ser usado independentemente de como você usa a diretiva SCHEMA para todo o arquivo de conversão. Exemplo:

REPLACE_TABLES "events:NEW_SCHEMA_NAME.login_events"
    

Alias para personalizar tipos de dados

Quando você usa diretivas de conversão para modificar como o Database Migration Service converte diferentes tipos de dados (por exemplo, com as diretivas DATA_TYPE, MODIFY_TYPE ou PG_NUMERIC_TYPE), é possível usar apelidos em vez dos tipos de dados SQL de origem.

Abra a seção a seguir para conferir a lista de aliases de tipo de dados aceitos pelo Database Migration Service.

Alias de tipos de dados

Alias Conversão para o tipo PostgreSQL
bigint, int8 BIGINT
bool, boolean BOOLEAN
bytea BYTEA
char, character CHAR
character varying, varchar VARCHAR
date DATE
decimal, numeric DECIMAL
double precision, float8 DOUBLE PRECISION
real, float4 REAL
int, integer, int4 INTEGER
int2 SMALLINT
interval INTERVAL
json JSON
smallint SMALLINT
text TEXT
time TIME
timestamp TIMESTAMP
timestamptz TIMESTAMPTZ
timetz TIMETZ
uuid UUID
XML XML

Exemplo de arquivo de mapeamento de conversão

Consulte o arquivo de mapeamento de conversão de exemplo a seguir, que usa todas as diretivas de conversão de esquema com suporte:

EXPORT_SCHEMA 1
SCHEMA root

PG_NUMERIC_TYPE 0
PG_INTEGER_TYPE 1
DEFAULT_NUMERIC integer
DATA_TYPE NUMBER(4\,0):integer
MODIFY_TYPE events:dates_and_times:TIMESTAMP
REPLACE_COLS events(dates_and_times:event_dates),users(pseudonym:nickname)
REPLACE_TABLES events:login_events users:platform_users

Os resultados do uso desse arquivo são os seguintes:

  • EXPORT_SCHEMA 1 é uma diretiva obrigatória.
  • SCHEMA root resulta nos seguintes ajustes no fluxo de conversão:
    • O Database Migration Service só realiza a conversão para entidades no esquema root. Nenhum outro esquema é convertido.
    • Todas as outras diretivas de personalização neste arquivo se aplicam apenas a colunas e tipos de dados definidos no esquema root.
  • PG_INTEGER_TYPE 1 faz com que o Database Migration Service converta todos os tipos de dados numéricos do Oracle encontrados nas tabelas do esquema root em tipos específicos do PostgreSQL em vez de tipos numéricos portáteis ANSI.
  • DEFAULT_NUMERIC faz com que o Database Migration Service converta valores NUMBER que não têm um ponto de precisão especificado no tipo INTEGER do PostgreSQL. Isso se aplica apenas aos valores NUMBER encontrados nas tabelas do esquema root.
  • DATA_TYPE NUMBER(4\,0):integer faz com que o Database Migration Service converta valores específicos de NUMBER(4,0) em INTEGER do PostgreSQL.
  • A diretiva MODIFY_TYPE faz com que o Database Migration Service converta os dados na coluna dates_and_times na tabela de origem events especificamente para o tipo DATETIME do PostgreSQL, independentemente do formato da coluna de origem real.
  • REPLACE_COLS events(dates_and_times:event_dates),users(pseudonym:nickname) faz com que o Database Migration Service renomeie as seguintes colunas no esquema convertido:
    • A coluna dates_and_times na tabela de origem events é renomeada como event_dates na mesma tabela no esquema convertido.
    • A coluna pseudonym na tabela de origem users é renomeada como nickname na mesma tabela no esquema convertido.
    A operação de renomeação é aplicada apenas às tabelas events e users no esquema root.
  • REPLACE_TABLES events:login_events users:platform_users renomeia as seguintes tabelas no esquema convertido:
    • A tabela events é renomeada como login_events.
    • A tabela users é renomeada como platform_users.
    A operação de renomeação é aplicada apenas às tabelas events e users no esquema root.

Espaços de trabalho de conversão legadas

Os espaços de trabalho de conversão legados são um tipo mais antigo e limitado de espaços de trabalho de conversão. Os espaços de trabalho de conversão legados não têm suporte para recursos de conversão aprimorados pelo Gemini ou para o editor de SQL interativo. Eles só podem ser usados para converter o esquema de origem com a ferramenta de migração Ora2Pg.

Não recomendamos usar o tipo legado de espaços de trabalho de conversão para suas migrações. Se o seu cenário exigir o uso de espaços de trabalho de conversão legados, consulte Como usar espaços de trabalho de conversão legados.

A seguir