Migrar o Oracle para o Banco de Dados do Azure para PostgreSQL

APLICA-SE A:Banco de Dados do Azure para PostgreSQL – Servidor individual Banco de Dados do Azure para PostgreSQL – Servidor flexível

Este guia ajuda a migrar seu esquema do Oracle para o Banco de Dados do Azure para PostgreSQL.

Para obter diretrizes de migração detalhadas e abrangentes, confira os Recursos do guia de migração.

Pré-requisitos

Para migrar seu esquema do Oracle para o Banco de Dados do Azure para PostgreSQL, você precisa:

  • Verificar se o ambiente de origem tem suporte.
  • Baixar a versão mais recente do ora2pg.
  • Ter a versão mais recente do módulo DBD.

Visão geral

O PostgreSQL é um dos bancos de dados de software livre mais avançados do mundo. Este artigo descreve como usar a ferramenta ora2pg gratuita para migrar um banco de dados Oracle para PostgreSQL. Você pode usar o ora2pg para migrar um banco de dados Oracle ou MySQL para um esquema compatível com PostgreSQL.

A ferramenta ora2pg conecta seu banco de dados Oracle, faz sua verificação automaticamente e extrai sua estrutura ou seus dados. Em seguida, o ora2pg gera scripts SQL que você pode carregar em seu banco de dados PostgreSQL. Você pode usar ora2pg para tarefas como: engenharia reversa de um banco de dados Oracle, migração de um grande banco de dados corporativo ou simplesmente para replicar alguns dados Oracle em um banco de dados PostgreSQL. A ferramenta é fácil de usar e não requer nenhum conhecimento de banco de dados Oracle, além da capacidade de fornecer os parâmetros necessários para se conectar ao banco de dados.

Observação

Para saber mais sobre como usar a versão mais recente do ora2pg, confira a documentação do ora2pg.

Arquitetura de migração típica do ora2pg

Captura de tela da arquitetura de migração do ora2pg.

Depois de provisionar a VM e o Banco de Dados do Azure para PostgreSQL, você precisará definir duas configurações para habilitar a conectividade entre elas: Permitir o acesso aos serviços do Azure e Impor a conexão SSL:

  • Folha Conexão de Segurança e Permitir acesso aos serviços do Azure>ATIVADO

  • Folha Conexão de Segurança>Configurações de SSL>Impor Conexão SSL>DESABILITADO

Recomendações

  • Para melhorar o desempenho das operações de avaliação ou de exportação no servidor Oracle, colete estatísticas:

    BEGIN
    
       DBMS_STATS.GATHER_SCHEMA_STATS
       DBMS_STATS.GATHER_DATABASE_STATS
       DBMS_STATS.GATHER_DICTIONARY_STATS
       END;
    
  • Exporte dados usando o comando COPY em vez de INSERT.

  • Evite exportar tabelas com suas FKs (chaves estrangeiras), restrições e índices. Esses elementos retardam o processo de importação de dados para o PostgreSQL.

  • Crie exibições materializadas usando a cláusula sem dados. Em seguida, atualize as exibições mais tarde.

  • Se possível, use índices exclusivos em exibições materializadas. Esses índices podem acelerar a atualização quando você usa a sintaxe REFRESH MATERIALIZED VIEW CONCURRENTLY.

Pré-migração

Depois de verificar se o seu ambiente de origem tem suporte e se você atente a todos os pré-requisitos, você está pronto para iniciar o estágio de pré-migração. Para começar:

  1. Descobrir: inventariar os bancos de dados que você precisa migrar.
  2. Avaliar: avalie esses bancos de dados para verificar se há possíveis problemas de migração ou bloqueadores.
  3. Converter: resolver todos os itens descobertos.

Para migrações heterogêneas, como Oracle para Banco de Dados do Azure para PostgreSQL, esse estágio também envolve tornar os esquemas do banco de dados de origem compatíveis com o ambiente de destino.

Descobrir

A meta da fase de descoberta é identificar as fontes de dados existentes e os detalhes sobre os recursos que estão sendo usados. Essa fase ajuda você a entender e planejar melhor a migração. O processo envolve a verificação da rede para identificar todas as instâncias do Oracle da sua organização junto com a versão e os recursos em uso.

Scripts de pré-avaliação da Microsoft para Oracle são executados no banco de dados Oracle. Os scripts de pré-avaliação consultam os metadados do Oracle. Os scripts fornecem:

  • Um inventário de banco de dados, incluindo contagens de objetos por esquema, tipo e status.
  • Uma estimativa aproximada dos dados brutos em cada esquema, com base nas estatísticas.
  • O tamanho das tabelas em cada esquema.
  • O número de linhas de código por pacote, função, procedimento e assim por diante.

Baixe os scripts relacionados a partir do GitHub.

Avaliar

Depois de inventariar os bancos de dados Oracle, você terá uma ideia do tamanho do banco e dos possíveis desafios. A próxima etapa é executar a avaliação.

Estimar o custo de uma migração do Oracle para o PostgreSQL não é fácil. Para avaliar o custo de migração, o ora2pg verifica todos os objetos de banco de dados, funções e procedimentos armazenados para objetos e código PL/SQL que ele não pode converter automaticamente.

A ferramenta ora2pg tem um modo de análise de conteúdo que inspeciona o banco de dados Oracle para gerar um relatório de texto. O relatório descreve o que o banco de dados Oracle contém e o que não pode ser exportado.

Para ativar o modo de análise e relatório, use o tipo exportado, SHOW_REPORT conforme mostrado no seguinte comando:

ora2pg -t SHOW_REPORT

A ferramenta ora2pg pode converter o código SQL e PL/SQL da sintaxe do Oracle para PostgreSQL. Assim, depois que o banco de dados é analisado, o ora2pg pode estimar as dificuldades do código e o tempo necessário para migrar um banco de dados completo.

Para estimar o custo de migração em dias humanos, o ora2pg permite que você use uma diretiva de configuração chamada ESTIMATE_COST. Você também pode habilitar essa diretiva em um prompt de comando:

ora2pg -t SHOW_REPORT --estimate_cost

A unidade de migração padrão representa cerca de cinco minutos para um especialista em PostgreSQL. Se essa migração for a primeira, você poderá aumentar a unidade de migração padrão usando a diretiva de configuração COST_UNIT_VALUE ou a opção de linha de comando --cost_unit_value.

A última linha do relatório mostra o código de migração estimado total em dias humanos. A estimativa segue o número de unidades de migração estimadas para cada objeto.

No seguinte exemplo de código, você verá algumas variações de avaliação:

  • Avaliação de tabelas
  • Avaliação de colunas
  • Avaliação de esquema que usa uma unidade de custo padrão de cinco minutos
  • Avaliação de esquema que usa uma unidade de custo de dez minutos
ora2pg -t SHOW_TABLE -c c:\ora2pg\ora2pg_hr.conf > c:\ts303\hr_migration\reports\tables.txt 
ora2pg -t SHOW_COLUMN -c c:\ora2pg\ora2pg_hr.conf > c:\ts303\hr_migration\reports\columns.txt
ora2pg -t SHOW_REPORT -c c:\ora2pg\ora2pg_hr.conf --dump_as_html --estimate_cost > c:\ts303\hr_migration\reports\report.html
ora2pg -t SHOW_REPORT -c c:\ora2pg\ora2pg_hr.conf –-cost_unit_value 10 --dump_as_html --estimate_cost > c:\ts303\hr_migration\reports\report2.html

Veja a saída do nível de migração de avaliação de esquema B-5:

  • Níveis de migração:

    • A – migração que pode ser executada automaticamente

    • B – migração com reescrita de código e um custo de dias humanos de até cinco dias

    • C – migração com reescrita de código e um custo de dias humanos acima de cinco dias

  • Níveis técnicos:

    • 1 = Trivial: nenhuma função armazenada e nenhum gatilho

    • 2 = Fácil: sem presença de função armazenada, mas de gatilhos; sem regravação manual

    • 3 = Simples: funções e/ou gatilhos armazenados; sem regravação manual

    • 4 = Manual: sem presença de função armazenada, mas de gatilhos ou exibições com regravação de código

    • 5 = Difícil: funções armazenadas e/ou gatilhos com reescrita de código

A avaliação consiste em:

  • Uma letra (A ou B) para especificar se a migração precisa de regravação manual.

  • Um número de 1 a 5 para indicar a dificuldade técnica.

Outra opção, -human_days_limit, especifica o limite de dias humanos. Neste cenário, defina o nível de migração como C para indicar que a migração precisa de uma grande quantidade de trabalho, gerenciamento de projeto completo e suporte de migração. O padrão é de 10 dias humanos. Você pode usar a diretiva de configuração HUMAN_DAYS_LIMIT para alterar esse valor padrão permanentemente.

Essa avaliação de esquema foi desenvolvida para ajudar os usuários a decidir qual banco de dados deve ser migrado primeiro e quais equipes mobilizar.

Converter

Em migrações de tempo de inatividade mínimo, a origem da migração é alterada. Ela tem um descompasso em relação ao destino em termos de dados e esquema após a migração única. Durante a fase de Sincronização de dados, verifique se todas as alterações na origem são capturadas e aplicadas ao destino quase em tempo real. Depois de verificar se todas as alterações são aplicadas ao destino, você pode migrar do ambiente de origem para o ambiente de destino.

Nesta etapa da migração, o código Oracle e os scripts DDL são convertidos ou traduzidos para PostgreSQL. A ferramenta ora2pg exporta os objetos Oracle em um formato PostgreSQL automaticamente. Alguns dos objetos gerados não podem ser compilados no banco de dados PostgreSQL sem alterações manuais.

Para entender quais elementos precisam de intervenção manual, primeiro compile os arquivos gerados pelo ora2pg no banco de dados PostgreSQL. Verifique o log e faça as alterações necessárias até que a estrutura do esquema seja compatível com a sintaxe do PostgreSQL.

Criar um modelo de migração

Recomendamos o uso do modelo de migração que o ora2pg fornece. Quando você usa as opções --project_base e --init_project, o ora2pg cria um modelo de projeto com uma árvore de trabalho, um arquivo de configuração e um script para exportar todos os objetos do banco de dados Oracle. Para saber mais, confira a documentação do ora2pg.

Use o seguinte comando:

ora2pg --project_base /app/migration/ --init_project test_project

Veja a saída de exemplo:

ora2pg --project_base /app/migration/ --init_project test_project
        Creating project test_project.
        /app/migration/test_project/
                schema/
                        dblinks/
                        directories/
                        functions/
                        grants/
                        mviews/
                        packages/
                        partitions/
                        procedures/
                        sequences/
                        synonyms/
                        tables/
                        tablespaces/
                        triggers/
                        types/
                        views/
                sources/
                        functions/
                        mviews/
                        packages/
                        partitions/
                        procedures/
                        triggers/
                        types/
                        views/
                data/
                config/
                reports/

        Generating generic configuration file
        Creating script export_schema.sh to automate all exports.
        Creating script import_all.sh to automate all imports.

O diretório sources/ contém o código Oracle. O diretório schema/ contém o código portado para PostgreSQL. E o diretório reports/ contém os relatórios HTML e a avaliação de custo de migração.

Depois que a estrutura do projeto é criada, um arquivo de configuração genérico é gerado. Definir a conexão de banco de dados Oracle e os parâmetros de configuração relevantes no arquivo de configuração. Para saber mais sobre o arquivo de configuração, confira a documentação do ora2pg.

Exportar objetos Oracle

Em seguida, exporte os objetos Oracle como objetos PostgreSQL executando o arquivo export_schema.sh.

cd /app/migration/mig_project
./export_schema.sh

Execute o seguinte comando manualmente.

SET namespace="/app/migration/mig_project"

ora2pg -p -t DBLINK -o dblink.sql -b %namespace%/schema/dblinks -c %namespace%/config/ora2pg.conf
ora2pg -p -t DIRECTORY -o directory.sql -b %namespace%/schema/directories -c %namespace%/config/ora2pg.conf
ora2pg -p -t FUNCTION -o functions2.sql -b %namespace%/schema/functions -c %namespace%/config/ora2pg.conf 
ora2pg -p -t GRANT -o grants.sql -b %namespace%/schema/grants -c %namespace%/config/ora2pg.conf 
ora2pg -p -t MVIEW -o mview.sql -b %namespace%/schema/mviews -c %namespace%/config/ora2pg.conf
ora2pg -p -t PACKAGE -o packages.sql -b %namespace%/schema/packages -c %namespace%/config/ora2pg.conf
ora2pg -p -t PARTITION -o partitions.sql -b %namespace%/schema/partitions -c %namespace%/config/ora2pg.conf
ora2pg -p -t PROCEDURE -o procs.sql -b %namespace%/schema/procedures -c %namespace%/config/ora2pg.conf
ora2pg -p -t SEQUENCE -o sequences.sql -b %namespace%/schema/sequences -c %namespace%/config/ora2pg.conf
ora2pg -p -t SYNONYM -o synonym.sql -b %namespace%/schema/synonyms -c %namespace%/config/ora2pg.conf
ora2pg -p -t TABLE -o table.sql -b %namespace%/schema/tables -c %namespace%/config/ora2pg.conf 
ora2pg -p -t TABLESPACE -o tablespaces.sql -b %namespace%/schema/tablespaces -c %namespace%/config/ora2pg.conf
ora2pg -p -t TRIGGER -o triggers.sql -b %namespace%/schema/triggers -c %namespace%/config/ora2pg.conf 
ora2pg -p -t TYPE -o types.sql -b %namespace%/schema/types -c %namespace%/config/ora2pg.conf 
ora2pg -p -t VIEW -o views.sql -b %namespace%/schema/views -c %namespace%/config/ora2pg.conf

Para extrair os dados, use o seguinte comando.

ora2pg -t COPY -o data.sql -b %namespace%/data -c %namespace/config/ora2pg.conf

Compilar arquivos

Por fim, compile todos os arquivos no servidor do Banco de Dados do Azure para PostgreSQL. Você pode optar por carregar os arquivos DDL gerados manualmente ou usar o segundo script import_all.sh, para importar esses arquivos interativamente.

psql -f %namespace%\schema\sequences\sequence.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -L %namespace%\ schema\sequences\create_sequences.log

psql -f %namespace%\schema\tables\table.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -L %namespace%\schema\tables\create_table.log

Veja o comando de importação de dados:

psql -f %namespace%\data\table1.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -l %namespace%\data\table1.log

psql -f %namespace%\data\table2.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -l %namespace%\data\table2.log

Enquanto os arquivos estão sendo compilados, verifique os logs e corrija qualquer sintaxe que o ora2pg não tenha conseguido converter.

Para saber mais, confira Soluções alternativas de migração do Oracle para o Banco de Dados do Azure para PostgreSQL.

Migrar

Depois de atender os pré-requisitos necessários e concluir as etapas de pré-migração, você pode iniciar o esquema e a migração de dados.

Migrar esquema e dados

Depois de fazer as correções necessárias, uma compilação estável do banco de dados estará pronta para ser implantada. Execute os comandos de importação psql, apontando para os arquivos que contêm o código modificado. Esta tarefa compila os objetos do banco de dados no Banco de Dados PostgreSQL e importa os dados.

Nesta etapa, você pode implementar um nível de paralelismo na importação dos dados.

Sincronizar dados e migrar

Nas migrações online (mínimo de tempo de inatividade), a origem de migração continua a mudar. Ela tem um descompasso em relação ao destino em termos de dados e esquema após a migração única.

Durante a fase de Sincronização de dados, verifique se todas as alterações na origem são capturadas e aplicadas ao destino quase em tempo real. Depois de verificar se todas as alterações foram aplicadas, você pode migrar do ambiente de origem para o de destino.

Para fazer uma migração online, entre em contato com o suporte de AskAzureDBforPostgreSQL@service.microsoft.com.

Em uma migração delta/incremental que usa ora2pg, para cada tabela, use uma consulta que filtra (corta) por data, hora ou outro parâmetro. Em seguida, conclua a migração usando uma segunda consulta que migre os dados restantes.

Na tabela de dados de origem, migre todos os dados históricos primeiro. Veja um exemplo:

select * from table1 where filter_data < 01/01/2019

Você pode consultar as alterações desde a migração inicial executando o seguinte comando:

select * from table1 where filter_data >= 01/01/2019

Nesse caso, recomendamos que você aprimore a validação verificando a paridade dos dados em ambos os lados, de origem e de destino.

Pós-migração

Após o estágio de Migração, conclua as tarefas de pós-migração para garantir que tudo esteja funcionando da maneira mais estável e eficiente possível.

Corrigir aplicativos

Depois que os dados são migrados para o ambiente de destino, todos os aplicativos que antes consumiam a origem, precisam começar a consumir o destino. Às vezes, a instalação requer alterações nos aplicativos.

Teste

Depois que os dados forem migrados para o destino, execute testes em relação aos bancos de dado para verificar se os aplicativos funcionam bem com o destino. Garanta que a origem e o destino sejam migrados corretamente executando os scripts de validação de dados manuais nos bancos de dados de origem Oracle e de destino PostgreSQL.

Idealmente, se os bancos de dados de origem e de destino tiverem um caminho de rede, o ora2pg deverá ser usado na validação de dados. Você pode executar a ação TEST para garantir que todos os objetos do banco de dados Oracle tenham sido criados no PostgreSQL.

Execute este comando:

ora2pg -t TEST -c config/ora2pg.conf > migration_diff.txt

Otimizar

A fase de pós-migração é crucial para reconciliar quaisquer problemas de precisão de dados e verificar a integridade. Nessa fase, você também resolve problemas de desempenho com a carga de trabalho.

Ativos de migração

Para saber mais sobre esse cenário de migração, confira os seguintes recursos. Eles dão suporte ao envolvimento do projeto de migração no mundo real.

Recurso Descrição
Manual de migração do Oracle para o Azure para PostgreSQL Este documento ajuda arquitetos, consultores, administradores de banco de dados e funções relacionadas a migrar rapidamente cargas de trabalho do Oracle para o Banco de Dados do Azure para PostgreSQL usando o ora2pg.
Soluções alternativas de migração do Oracle para o Azure para PostgreSQL Este documento ajuda arquitetos, consultores, administradores de banco de dados e funções relacionadas a corrigir ou solucionar problemas rapidamente durante a migração de cargas de trabalho do Oracle para o Banco de Dados do Azure para PostgreSQL.
Etapas para instalar o ora2pg no Windows ou Linux Este documento fornece um guia de instalação rápida para migrar o esquema e os dados do Oracle para o Banco de Dados do Azure para PostgreSQL usando o ora2pg no Windows ou no Linux. Para saber mais, confira a documentação do ora2pg.

A equipe de engenharia de dados do SQL desenvolveu esses recursos. O objetivo principal desta equipe é desbloquear e acelerar a modernização complexa de projetos de migração de plataforma de dados para a plataforma de dados do Microsoft Azure.

Mais suporte

Para obter ajuda na migração além do escopo das ferramentas ora2pg, entre em contato com @Pergunte ao BD do Azure para PostgreSQL.

Próximas etapas

Para obter uma matriz de serviços e ferramentas de migração de banco de dados e de data e tarefas especiais, confira Serviços e ferramentas para a migração de dados.

Documentação: