Migrar um banco de dados Oracle on-premises para o Amazon RDS para Oracle usando o Oracle Data Pump Import direto em um link de banco de dados - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Migrar um banco de dados Oracle on-premises para o Amazon RDS para Oracle usando o Oracle Data Pump Import direto em um link de banco de dados

Criado por Rizwan Wangde (AWS)

Ambiente: produção

Origem: banco de dados Oracle on-premises

Destino: Amazon RDS para Oracle

Tipo R: redefinir a plataforma

Workload: Oracle

Tecnologias: migração; bancos de dados

Serviços da AWS: AWS DMS; AWS Direct Connect; Amazon RDS

Vários padrões abrangem a migração de bancos de dados Oracle on-premises para o Amazon RDS para Oracle usando o Oracle Data Pump, um utilitário nativo da Oracle que é a forma preferida de migrar grandes workloads Oracle. Esses padrões geralmente envolvem a exportação de esquemas ou tabelas de aplicativos em arquivos de despejo, a transferência dos arquivos de despejo para um diretório de banco de dados no Amazon RDS para Oracle e, em seguida, a importação dos esquemas e dados do aplicativo dos arquivos de despejo.

Ao usar essa abordagem, a migração pode levar mais tempo, dependendo do tamanho dos dados e do tempo necessário para transferir os arquivos de despejo para a instância do Amazon RDS. Além disso, os arquivos de despejo residem no volume Amazon Elastic Block Store (Amazon EBS) da instância do Amazon RDS, que deve ser grande o suficiente para o banco de dados e os arquivos de despejo. Quando os arquivos de despejo são excluídos após a importação, o espaço vazio não pode ser recuperado, então você continua pagando pelo espaço não utilizado.

Esse padrão atenua esses problemas executando uma importação direta na instância do Amazon RDS usando a API do Oracle Data Pump (DBMS_DATAPUMP) em um link de banco de dados. O padrão inicia um pipeline simultâneo de exportação e importação entre os bancos de dados de origem e de destino. Este padrão não exige o dimensionamento de um volume do EBS para os arquivos de despejo porque nenhum arquivo de despejo é criado ou armazenado no volume. Essa abordagem economiza o custo mensal do espaço em disco não utilizado.

Pré-requisitos

  • Uma conta ativa da Amazon Web Services (AWS).

  • Uma nuvem privada virtual (VPC) configurada com sub-redes privadas em pelo menos duas zonas de disponibilidade, para fornecer a infraestrutura de rede para a instância do Amazon RDS.

  • Um banco de dados Oracle em um datacenter no on-premise.

  • Uma instância Oracle do Amazon RDS existente em uma única zona de disponibilidade. Usar uma única zona de disponibilidade melhora o desempenho de gravação durante a migração. Uma implantação Multi-AZ pode ser habilitada de 24 a 48 horas antes da substituição.

  • AWS Direct Connect (recomendado para bancos de dados de grande porte).

  • Regras de conectividade de rede e firewall no on-premises configuradas para permitir uma conexão de entrada da instância do Amazon RDS com o banco de dados Oracle on-premises.

Limitações

  • O limite de tamanho do banco de dados no Amazon RDS para Oracle é de 64 TiB (em dezembro de 2022).

Versões do produto

  • Banco de dados de origem: Banco de dados Oracle versão 10g Release 1 e posterior.

  • Banco de dados de destino: para obter uma lista de versionamentos e edições compatíveis no Amazon RDS, consulte Amazon RDS para Oracle na documentação da AWS.

Pilha de tecnologia de origem

  • Banco de dados Oracle autogerenciado on-premises ou na nuvem

Pilha de tecnologias de destino

  • Amazon RDS para Oracle

Arquitetura de destino

O diagrama a seguir mostra a arquitetura para migrar de um banco de dados Oracle on-premises para o Amazon RDS para Oracle em um ambiente single-AZ. As direções das setas mostram o fluxo de dados na arquitetura. O diagrama não mostra qual componente está iniciando a conexão.

""
  1. A instância do Amazon RDS para Oracle se conecta ao banco de dados Oracle de origem on-premises para realizar uma migração de carga completa pelo link do banco de dados.

  2. O AWS DMS se conecta ao banco de dados Oracle de origem on-premises para realizar a replicação contínua usando a captura de dados de alteração (CDC).

  3. As alterações do CDC são aplicadas ao banco de dados do Amazon RDS para Oracle.

Serviços da AWS

  • O AWS Database Migration Service (AWS DMS) ajuda você a migrar armazenamentos de dados para a Nuvem AWS ou entre combinações de configurações na nuvem e on-premises. Esse padrão usa CDC e a configuração Replicar somente alterações de dados.

  • O AWS Direct Connect vincula a rede interna a um local do Direct Connect por meio de um cabo de fibra ótica Ethernet padrão. Com essa conexão, você pode criar interfaces virtuais diretamente para serviços públicos da AWS, ignorando provedores de serviço da internet no caminho da sua rede.

  • O Amazon Relational Database Service (Amazon RDS) para Oracle ajuda você a configurar, operar e escalar um banco de dados relacional Oracle na Nuvem AWS.

Outras ferramentas

Embora o AWS Direct Connect use conexões de rede privadas dedicadas entre a rede local e a AWS, considere as seguintes opções para segurança adicional e criptografia de dados para dados em trânsito:

TarefaDescriçãoHabilidades necessárias

Configurar a conectividade de rede entre o banco de dados de destino e o banco de dados de origem.

Configure a rede e o firewall on-premises para permitir a conexão de entrada da instância de destino do Amazon RDS com o banco de dados Oracle de origem no local.

Administrador de rede, engenheiro de segurança

Criar um usuário do banco de dados com os privilégios apropriados.

Criar um usuário de banco de dados no banco de dados Oracle de origem on-premises com privilégios para migrar dados entre a origem e o destino usando o Oracle Data Pump.

GRANT CONNECT to <migration_user>; GRANT DATAPUMP_EXP_FULL_DATABASE to <migration_user>; GRANT SELECT ANY TABLE to <migration_user>;
DBA

Preparar o banco de dados de origem on-premises para a migração do AWS DMS CDC.

(Opcional) Preparar o banco de dados Oracle de origem on-premises para a migração do AWS DMS CDC após a conclusão do Oracle Data Pump Full Load:

  1. Configurar os privilégios adicionais necessários para gerenciar o FLASHBACK durante a migração do Oracle Data Pump.

    GRANT FLASHBACK ANY TABLE to <migration_user>; GRANT FLASHBACK ARCHIVE ADMINISTER to <migration_user>;
  2. Para configurar os privilégios de conta de usuário necessários em uma fonte Oracle autogerenciada para o AWS DMS, consulte a AWS DMS documentation.

  3. Para preparar um banco de dados de origem autogerenciado da Oracle para CDC usando o AWS DMS, consulte a AWS DMS documentation.

DBA

Instalar e configure o SQL Developer.

Instale e configure o SQL Developer para conectar e executar consultas SQL nos bancos de dados de origem e destino.

DBA, Engenheiro de migração

Gerar um script para criar os espaços de tabela.

Use o exemplo de consulta SQL a seguir para gerar o script no banco de dados de origem.

SELECT 'CREATE TABLESPACE ' tablespace_name ' DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE UNLIMITED;' from dba_tablespaces where tablespace_name not in ('SYSTEM', 'SYSAUX','TEMP','UNDOTBS1') order by 1;

O script será aplicado no banco de dados de destino.

DBA

Gerar um script para criar usuários, perfis, funções e privilégios.

Para gerar um script para criar usuários, perfis, funções e privilégios do banco de dados, use os scripts do documento do Oracle Support Como extrair DDL para o usuário, incluindo privilégios e perfis, usando dbms_metadata.get_ddl (Doc ID 2739952.1) (é necessária uma conta Oracle).

O script será aplicado no banco de dados de destino.

DBA
TarefaDescriçãoHabilidades necessárias

Criar um link de banco de dados com o banco de dados de origem e verificar a conectividade.

Para criar um link de banco de dados para o banco de dados de origem on-premises, você pode usar o comando de exemplo a seguir:

CREATE DATABASE LINK link2src CONNECT TO <migration_user_account> IDENTIFIED BY <password> USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<dns or ip address of remote db>) (PORT=<listener port>))(CONNECT_DATA=(SID=<remote SID>)))';

Para verificar a conectividade, execute o comando SQL a seguir:

select * from dual@link2src;

A conectividade será bem-sucedida se a resposta for X.

DBA

Executar os scripts para preparar a instância de destino.

Executar os scripts gerados anteriormente para preparar a instância de destino do Amazon RDS para Oracle:

  1. Tablespaces

  2. Perfis

  3. Funções

Isso ajuda a garantir que a migração do Oracle Data Pump possa criar os esquemas e respectivos objetos.

DBA, Engenheiro de migração
TarefaDescriçãoHabilidades necessárias

Migrar os esquemas necessários.

Para migrar os esquemas necessários do banco de dados on-premises de origem para a instância de destino do Amazon RDS, use o código na seção Informações adicionais:

  • Para migrar um único esquema, execute o Código 1 na seção Informações adicionais.

  • Para migrar um único esquema, execute o Código 2 na seção Informações adicionais.

Para ajustar o desempenho da migração, você pode ajustar o número de processos paralelos executando o comando a seguir.

DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4);
DBA

Coletar estatísticas do esquema para melhorar o desempenho.

O comando Coletar estatísticas do esquema retorna as estatísticas do otimizador de consultas Oracle coletadas para objetos de banco de dados. Ao usar essas informações, o otimizador pode selecionar o melhor plano de execução para qualquer consulta nesses objetos.

EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => '<schema_name>');
DBA
TarefaDescriçãoHabilidades necessárias

Capturar o SCN no banco de dados Oracle on-premises de origem.

Capturar o número de alteração do sistema (SCN) no banco de dados Oracle on-premises de origem. Você usará o SCN para importação de carga total e como ponto de partida para a replicação do CDC.

Para gerar o SCN atual do banco de dados de origem, use a instrução SQL a seguir.

SELECT current_scn FROM V$DATABASE;
DBA

Executar a migração de carga total dos esquemas.

Para migrar os esquemas necessários (FULL LOAD) do banco de dados on-premises de origem para a instância de destino do Amazon RDS, faça o seguinte:

  • Para migrar um único esquema, execute o Código 3 na seção Informações adicionais.

  • Para migrar múltiplos esquemas, execute o Código 4 na seção Informações adicionais.

No código, substitua <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE> pelo SCN que você capturou do banco de dados de origem.

DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>);

Para ajustar o desempenho da migração, você pode ajustar o número de processos paralelos.

DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4);
DBA

Desative os triggers nos esquemas migrados.

Antes de iniciar a tarefa exclusiva do AWS DMS CDC, desative o TRIGGERS nos esquemas migrados.

DBA

Coletar estatísticas do esquema para melhorar o desempenho.

O comando Coletar estatísticas do esquema retorna as estatísticas do otimizador de consultas Oracle coletadas para objetos de banco de dados. Ao usar essas informações, o otimizador pode selecionar o melhor plano de execução para qualquer consulta nesses objetos.

EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => '<schema_name>');
DBA

Usar o AWS DMS para realizar uma replicação contínua da origem para o destino.

Usar o AWS DMS para realizar uma replicação contínua do banco de dados Oracle de origem para a instância de destino do Amazon RDS para Oracle.

Para obter mais informações, consulte Criar tarefas para replicação contínua usando AWS DMS e a publicação no blog Como trabalhar com o suporte nativo ao CDC no AWS DMS.

DBA, Engenheiro de migração
TarefaDescriçãoHabilidades necessárias

Ativar o multi-AZ na instância 48 horas antes da substituição.

Se for uma instância de produção, recomendamos habilitar a implantação Multi-AZ na instância do Amazon RDS para oferecer os benefícios de alta disponibilidade (HA) e recuperação de desastres (DR).

DBA, Engenheiro de migração

Interromper a tarefa exclusiva do AWS DMS CDC (se o CDC estiver ativado).

  1. Garanta que a latência de origem e a latência de destino nas CloudWatch métricas da Amazon da tarefa do AWS DMS mostrem 0 segundos.

  2. Interromper a tarefa exclusiva do AWS DMS CDC.

DBA

Ative os triggers.

Ative os TRIGGERS que você desativou antes da criação da tarefa do CDC.

DBA

AWS

Documentação da Oracle

Código 1: somente migração de carga total, esquema de aplicativo único

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Código 2: somente migração de carga total, esquemas de múltiplos aplicativos

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name  => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Código 3: migração de carga total antes da tarefa somente do CDC, único esquema de aplicativo

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Código 4: migração de carga total antes da tarefa somente do CDC, múltiplos esquemas de aplicativos

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN (operation => 'IMPORT', job_mode  => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE (handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Cenário em que uma abordagem de migração mista pode funcionar melhor

Em raros cenários em que o banco de dados de origem contém tabelas com milhões de linhas e colunas LOBSEGMENT de tamanho muito grande, esse padrão retardará a migração. O Oracle migra LobSegments pelo link de rede, um por vez. Ele extrai uma única linha (junto com os dados da coluna LOB) da tabela de origem e insere a linha na tabela de destino, repetindo o processo até que todas as linhas sejam migradas. O Oracle Data Pump pelo link do banco de dados não oferece suporte ao carregamento em massa ou mecanismos de carregamento de caminho direto para LOBSEGMENTS.

Nesta situação, recomendamos o seguinte:

  • Ignorar as tabelas identificadas durante a migração do Oracle Data Pump adicionando o seguinte filtro de metadados.

    dbms_datapump.metadata_filter(handle =>h1, name=>'NAME_EXPR', value => 'NOT IN (''TABLE_1'',''TABLE_2'')');
  • Usar uma tarefa do AWS DMS (migração de carga total, com replicação de CDC, se necessário) para migrar as tabelas identificadas. O AWS DMS extrairá várias linhas do banco de dados Oracle de origem e as inserirá em um lote na instância de destino do Amazon RDS, o que melhora o desempenho.