Fim do suporte do RDS Custom para Oracle
nota
Aviso de fim do suporte: em 31 de março de 2027, a AWS encerrará o suporte para o Amazon RDS Custom para Oracle. Depois de 31 de março de 2027, você não poderá mais acessar o console nem os recursos do RDS Custom para Oracle. Para obter mais informações, consulte Fim do suporte do RDS Custom para Oracle.
Visão geral
Após uma análise cuidadosa, a AWS tomou a decisão de descontinuar o serviço Amazon RDS Custom para Oracle. O serviço será descontinuado a partir de 31 de março de 2027. Essa orientação prescritiva fornece estratégias de migração detalhadas para ajudar você a migrar do RDS Custom para Oracle para bancos de dados Oracle autogerenciados no Amazon Elastic Compute Cloud (Amazon EC2).
Cronogramas principais
-
De 31 de março de 2026 a 31 de março de 2027: recomendamos que você migre do RDS Custom para Oracle para executar o Oracle no EC2. Durante esse período, você pode continuar usando o RDS Custom para Oracle com os recursos e o suporte existentes.
-
Após 31 de março de 2027: você não poderá mais usar o serviço RDS Custom para Oracle.
Público-alvo
Essa orientação se destina a:
-
Administradores de banco de dados responsáveis pelas migrações de bancos de dados Oracle
-
Arquitetos de nuvem que planejam estratégias de migração
-
Engenheiros de DevOps que gerenciam a infraestrutura de banco de dados
-
Gerentes de TI que supervisionam o processo de migração
Pré-requisitos
Antes de começar, verifique se você tem:
-
Uma instância ativa do Amazon RDS Custom para Oracle que executa o Oracle 19c Enterprise Edition
-
Permissões apropriadas do AWS Identity and Access Management (IAM) para criar e gerenciar instâncias do EC2
-
Compreensão da sua arquitetura de banco de dados (não CDB ou CDB multilocatário com PDBs)
-
Planejamento de conectividade de rede entre as instâncias de origem e de destino
-
Estratégia de backup e recuperação para sua migração
Opções de migração
Como parte do processo de migração, você pode escolher uma das duas opções de migração com base nos requisitos comerciais e no caso de uso:
Opção 1: duplicação ativa do RMAN (migração online/offline)
Mais adequado para
-
Workloads que podem permitir o tempo de inatividade planejado durante a substituição final
-
Requisitos de migração mais simples com menos peças móveis
-
Bancos de dados para os quais você deseja uma migração simples e única
-
Cenários em que você não precisa de sincronização contínua antes da substituição
Características principais
-
Tempo de inatividade: tempo de inatividade mínimo durante a substituição final (o banco de dados permanece online durante a duplicação, breve tempo de inatividade para a substituição final)
-
Complexidade: menor complexidade com a duplicação direta do banco de dados
-
Duração: o tempo de migração depende do tamanho do banco de dados e da largura de banda da rede
-
Fallback: requer a manutenção do banco de dados de origem até que a validação seja concluída
-
Capacidade online: o banco de dados de origem permanece online e acessível durante o processo de duplicação
Abordagem de migração: a duplicação ativa do RMAN cria uma cópia exata do banco de dados de origem no destino copiando os arquivos do banco de dados de origem ativo e em execução pela rede. O banco de dados de origem permanece online e acessível aos aplicativos durante o processo de duplicação. Para bancos de dados multilocatário, o RMAN duplica automaticamente todo o CDB, incluindoCDB$ROOT, PDB$SEED e todos os bancos de dados conectáveis em uma única operação. Somente uma breve janela de substituição é necessária para redirecionar os aplicativos para a nova instância do EC2.
Opção 2: Oracle Data Guard (migração online)
Mais adequado para
-
Workloads de produção que exigem o tempo de inatividade mínimo
-
Bancos de dados essenciais que devem permanecer disponíveis
-
Cenários em que você precisa de sincronização contínua antes da substituição
-
Migrações que exigem capacidade de fallback integrada
Características principais
-
Tempo de inatividade: tempo de inatividade quase zero (segundos a minutos para a transição)
-
Complexidade: maior complexidade com a configuração do Data Guard
-
Duração: tempo de configuração inicial mais sincronização contínua até a transição
-
Fallback: capacidade de fallback integrada, mantendo a origem em espera
Abordagem de migração: o Oracle Data Guard mantém um banco de dados em espera sincronizado, enviando e aplicando continuamente logs redo do banco de dados principal. Quando estiver tudo pronto para concluir a migração, você executa uma transição que promove o modo de espera do EC2 para o banco de dados principal com o tempo de inatividade mínimo. Para bancos de dados multilocatário, o Data Guard protege automaticamente todo o CDB, incluindo todos os PDBs.
Matriz de decisão
Use a matriz a seguir para ajudar a escolher a opção de migração apropriada:
|
Aspecto |
Duplicação ativa do RMAN |
Oracle Data Guard |
|---|---|---|
|
Disponibilidade do banco de dados de origem |
Online durante a duplicação | Online durante todo o processo |
|
Tempo de inatividade aceitável |
De minutos a horas (substituição final) | De segundos a minutos (transição) |
|
Complexidade da migração |
Menor | Mais alto |
|
Sincronização contínua |
Não | Sim |
|
Capacidade de fallback |
Manual (mantenha a origem) | Integrado (automático) |
|
Teste antes da substituição |
Limitado | Teste completo possível |
|
Requisito de largura de banda da rede |
Alto durante a duplicação | Moderado (contínuo) |
|
Melhor para |
A maioria das migrações, dev/teste, substituição planejada | Produção, missão crítica, tempo de inatividade quase zero |
Considerações sobre a arquitetura
As duas opções de migração oferecem suporte a duas arquiteturas de banco de dados Oracle:
Não CDB
Bancos de dados Oracle tradicionais de instância única sem a arquitetura multilocatário. Esses bancos de dados:
-
Têm uma única instância de banco de dados
-
Não usam bancos de dados conectáveis (PDBs)
-
São mais simples de gerenciar e migrar
-
Normalmente chamados de ORCL no RDS Custom para Oracle
Multilocatário (CDB com PDBs)
Bancos de dados de contêiner (CDB) que hospedam vários bancos de dados conectáveis (PDBs), introduzidos no Oracle 12c. Esses bancos de dados:
-
Têm um banco de dados de contêiner (CDB) com
CDB$ROOTePDB$SEED -
Hospedam um ou mais bancos de dados conectáveis (PDBs)
-
Fornecem consolidação de banco de dados e isolamento de recursos
-
Normalmente chamados de RDSCDB no RDS Custom para Oracle
-
Usam o Oracle Managed Files (OMF) com subdiretórios baseados em GUID para arquivos de dados do PDB
Observação importante para migrações multilocatário: o banco de dados de destino será renomeado para ORCL durante o processo de migração (origem: RDSCDB → destino: ORCL). Isso simplifica a configuração de destino e se alinha às convenções de nomenclatura padrão.
Principais diferenças na abordagem de migração
|
Aspecto |
Não CDB |
Multilocatário (CDB com PDBs) |
|---|---|---|
|
Escopo da migração |
Banco de dados único | CDB inteiro com todos os PDBs |
|
Estado de pós-migração |
Banco de dados aberto com READ WRITE | CDB aberto com READ WRITE; PDBs no estado MOUNTED |
|
Gerenciamento de PDB |
N/D | É necessário abrir PDBs e configurar a abertura automática |
|
Limpeza |
Banco de dados único | CDB$ROOT (em cascata para PDBs); lidar com usuários comuns de C## |
|
Conexões de aplicativo |
Serviço de banco de dados | Serviços de PDB (não CDB) |
|
Arquivo de parâmetro |
Parâmetros padrão | Requer enable_pluggable_database=TRUE |
|
Complexidade |
Menor | Maior devido a vários contêineres |
Pré-requisitos comuns para as duas opções de migração
Antes de começar qualquer opção de migração, conclua estas etapas pré-requisitos:
-
Iniciar e configurar a instância do EC2
Inicie uma instância do EC2 com as seguintes considerações:
-
Tipo de instância: escolha um tipo de instância do EC2 que satisfaça os requisitos de recursos do seu workload. Usar a mesma classe da instância do RDS Custom é um bom ponto de partida. Considere os requisitos de memória, CPU e largura de banda da rede.
-
Sistema operacional: Oracle Linux ou Red Hat Enterprise Linux (correspondente ou compatível com sua versão de sistema operacional do RDS Custom)
-
Software Oracle: instale o software Oracle Database (mesma versão principal, versão secundária, atualização de versão e, de preferência, os mesmos patches únicos do RDS Custom). Verifique se o software Oracle está instalado em /u01/app/oracle/ ou no local de sua preferência.
-
Armazenamento: configure os volumes do Amazon EBS com tamanho e IOPS adequados para satisfazer seus requisitos de workload. Use volumes gp3 para desempenho econômico ou io2 Block Express para workloads de alto desempenho.
-
-
Configurar a arquitetura de armazenamento
-
Armazenamento do sistema de arquivos (recomendado para a maioria dos cenários)
-
Usar diretórios padrão do sistema de arquivos para arquivos de dados Oracle
-
Mais simples de gerenciar e adequado para a maioria dos workloads
-
Essa orientação usa exemplos de armazenamento do sistema de arquivos
-
-
Oracle Automatic Storage Management (ASM)
-
Se o workload exigir o ASM, instale e configure o ASM autônomo na instância do EC2
-
Ajuste todos os parâmetros de caminho no arquivo init conforme necessário para usar grupos de discos do ASM (por exemplo, +DATA, +FRA)
-
O processo de migração é semelhante para o ASM, com ajustes de caminho
-
-
-
Configurar o mecanismo de transferência de arquivos
Crie um mecanismo para transferir arquivos entre as instâncias do RDS Custom e do EC2. Você tem várias opções:
-
Opção A: Amazon S3 (recomendado para a maioria dos cenários)
-
Criar um bucket do Amazon S3 ou usar um existente
-
Instalar e configurar a CLI da AWS nas duas instâncias
-
Para obter instruções, consulte Introdução à AWS CLI.
-
-
Opção B: SCP/SFTP direto
-
Se as portas SSH estiverem abertas entre as instâncias, você poderá transferir arquivos diretamente
-
Adequado para arquivos pequenos, como arquivos de parâmetro e arquivos de senha
-
-
Opção C: Amazon EFS
-
Se você já tem o Amazon EFS montado nas duas instâncias, pode usá-lo como um sistema de arquivos compartilhado
-
Adequado para ambientes com infraestrutura do EFS existente
Essa orientação usa o Amazon S3 para dar exemplos, mas você pode adaptar os comandos para o método escolhido.
-
-
-
Configurar a conectividade de rede
Garanta a conectividade de rede entre as instâncias do RDS Custom e do EC2:
-
Mesma VPC: os grupos de segurança devem permitir tráfego bidirecional na porta do receptor Oracle (padrão 1521 ou sua porta personalizada)
-
VPCs diferentes (mesma conta): configure o emparelhamento de VPC, tabelas de rotas e grupos de segurança
-
Contas diferentes: configure o emparelhamento de VPC entre contas ou use o AWS Transit Gateway
-
Verifique a conectividade: use ping e telnet para testar a conectividade na porta do banco de dados
-
-
Criar uma estrutura de diretórios no EC2
A estrutura do diretório depende da arquitetura do banco de dados:
exemplo Para não CDB:
# Non-CDB directories mkdir -p /u01/app/oracle/oradata/ORCL/controlfile/ mkdir -p /u01/app/oracle/oradata/ORCL/datafile mkdir -p /u01/app/oracle/oradata/ORCL/onlinelog mkdir -p /u01/app/oracle/oradata/ORCL/arch mkdir -p /u01/app/oracle/admin/ORCL/adump mkdir -p /u01/app/oracle/backup # Set ownership chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chown -R oracle:oinstall /u01/app/oracle/backupexemplo Para multilocatário (CDB com PDBs)
# CDB directories mkdir -p /u01/app/oracle/oradata/ORCL/controlfile/ mkdir -p /u01/app/oracle/oradata/ORCL/cdb/datafile mkdir -p /u01/app/oracle/oradata/ORCL/pdbseed/datafile mkdir -p /u01/app/oracle/oradata/ORCL/onlinelog mkdir -p /u01/app/oracle/oradata/ORCL/arch mkdir -p /u01/app/oracle/admin/ORCL/adump mkdir -p /u01/app/oracle/backup # PDB directories (RDS Custom uses OMF with GUID-based paths) # Create a generic pdb directory - migration will create subdirectories as needed mkdir -p /u01/app/oracle/oradata/ORCL/pdb/datafile # Set ownership chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chown -R oracle:oinstall /u01/app/oracle/backupnota
O RDS Custom para Oracle usa o Oracle Managed Files (OMF) para arquivos de dados do PDB com subdiretórios baseados em GUID (por exemplo,
/rdsdbdata/db/pdb/RDSCDB_A/). O processo de migração criará automaticamente a estrutura de subdiretórios necessária no destino. Você só precisa criar os diretórios pai.{GUID}/datafile/Estratégia de armazenamento: use um volume do EBS separado para /u01/app/oracle/backup para desanexá-lo e removê-lo facilmente após a conclusão da migração, diminuindo os custos de armazenamento.
-
Verificar a configuração do banco de dados de origem
Antes de iniciar a migração, verifique a configuração do banco de dados de origem:
-
Faça login no host do banco de dados do RDS Custom como usuário rdsdb e defina o ambiente:
exemplo
# For non-CDB export ORACLE_HOME=/rdsdbbin/oracle.19.custom.r1.EE.1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH # For multitenant CDB export ORACLE_HOME=/rdsdbbin/oracle.19.custom.r1.EE-CDB.1 export ORACLE_SID=RDSCDB export PATH=$ORACLE_HOME/bin:$PATH -
Conecte-se ao banco de dados e verifique a arquitetura:
exemplo
sqlplus / as sysdba SQL> SELECT name, cdb, open_mode, log_mode FROM v$database;exemplo Para não CDB, saída esperada
NAME CDB OPEN_MODE LOG_MODE --------- --- -------------------- ------------ ORCL NO READ WRITE ARCHIVELOGexemplo Para multilocatário (CDB), saída esperada:
NAME CDB OPEN_MODE LOG_MODE --------- --- -------------------- ------------ RDSCDB YES READ WRITE ARCHIVELOG -
Se você tiver um CDB multilocatário, liste todos os PDBs e os status de cada um:
exemplo
SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;Saída esperada (exemplo com 1 PDB chamado ORCLDB):
exemplo
CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO -
Verifique o tamanho total do banco de dados:
exemplo Para não CDB:
SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM dba_data_files;exemplo Para multilocatário:
-- Total CDB size (all containers) SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; -- Size per PDB SQL> SELECT p.name AS pdb_name, ROUND(SUM(d.bytes)/1024/1024/1024, 2) AS size_gb FROM v$pdbs p JOIN cdb_data_files d ON p.con_id = d.con_id GROUP BY p.name, p.con_id ORDER BY p.con_id;
Opção 1: migração física usando a duplicação ativa do RMAN
Tópicos
Esta seção fornece etapas detalhadas para migrar seu banco de dados Oracle do RDS Custom para Oracle para o EC2 usando a duplicação ativa do RMAN. Esse método é duplicado de um banco de dados ativo e em execução, mantendo a origem online e acessível durante o processo de migração.
Quando usar a duplicação ativa do RMAN
Escolha a duplicação ativa do RMAN quando:
-
Você quiser manter o banco de dados de origem online e acessível durante a migração
-
Você puder pagar uma breve janela de substituição para o redirecionamento final do aplicativo
-
Você quiser um processo de migração simples com menos partes móveis
-
O tamanho do banco de dados e a largura de banda da rede permitirem um tempo de duplicação razoável
-
Não for necessário sincronizar continuamente antes da substituição
-
Você estiver migrando bancos de dados de produção, desenvolvimento ou teste
Visão geral da duplicação ativa do RMAN
A duplicação ativa do RMAN não requer um backup nem a desativação do banco de dados de origem. Ela duplica o banco de dados de origem ativo e em execução para o destino copiando os arquivos do banco de dados pela rede enquanto a origem permanece online e acessível aos aplicativos.
Principais vantagens:
-
A origem permanece online: os aplicativos podem continuar acessando o banco de dados de origem durante a duplicação
-
Sem necessidade de backup: elimina a necessidade de armazenamento de backup intermediário
-
Transferência direta de rede: os arquivos do banco de dados são copiados diretamente da origem para o destino
-
Consistência automática: o RMAN garante que o banco de dados duplicado seja consistente
-
Operação única: para multilocatário, duplica o CDB inteiro, incluindo todos os PDBs em uma operação
O processo de duplicação cria uma cópia exata do banco de dados de origem no destino, incluindo todos os arquivos de dados, arquivos de controle e logs redo. O banco de dados de origem continua atendendo às solicitações de aplicativo durante todo o processo de duplicação. Somente uma breve janela de substituição é necessária no final para redirecionar os aplicativos da origem para o destino.
Cronograma típico
-
Fase de duplicação (a origem permanece online): 30 minutos a várias horas, dependendo do tamanho do banco de dados
-
Fase de validação (a origem permanece online): de horas a dias, conforme necessário
-
Fase de substituição (breve tempo de inatividade): minutos para redirecionar os aplicativos para o EC2
Fluxo de trabalho de migração para duplicação ativa do RMAN
Etapas da instância de banco de dados do RDS Custom (origem):
-
Pausar a automação do Amazon RDS Custom
-
Verificar a arquitetura do banco de dados (não CDB ou CDB com PDBs)
-
Criar um arquivo de senha e um arquivo de parâmetro a partir do banco de dados de origem
-
Copiar o arquivo de senha e o arquivo de parâmetro para a instância do EC2 de destino
-
Verificar se o banco de dados de origem está sendo executado no modo de log de arquivamento
-
Configurar tnsnames.ora no servidor de banco de dados do RDS Custom
Etapas da instância de banco de dados do EC2 (destino):
-
Editar o arquivo de parâmetro para o EC2 (específico da arquitetura)
-
Configurar tnsnames.ora no EC2
-
Configurar o ambiente para a instância do EC2
-
Configurar o Oracle Listener no EC2
-
Iniciar o banco de dados no EC2 no estado NOMOUNT
Etapas de duplicação do RMAN:
-
Executar a duplicação ativa do RMAN
-
Abrir o banco de dados (e PDBs para multilocatário)
-
Configurar a abertura automática do PDB (somente multilocatário)
-
Remover usuários e objetos específicos do RDS Custom
-
Criar SPFILE e configurar a inicialização automática
-
Retomar a automação do Amazon RDS Custom na origem (se a mantiver ativa)
Etapa 1: pausar a automação do Amazon RDS Custom
Pause o modo de automação em sua instância do RDS Custom antes de prosseguir com as etapas de migração para garantir que a automação não interfira na atividade do RMAN. O parâmetro --resume-full-automation-mode-minute (240 minutos = 4 horas neste exemplo) deve ser ajustado com base no tamanho do banco de dados e no tempo de duplicação esperado.
Importante: pausar a automação não afeta a disponibilidade do banco de dados. O banco de dados permanece online e acessível aos aplicativos durante o processo de duplicação.
exemplo
aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode all-paused \ --resume-full-automation-mode-minute 240 \ --region us-east-1 --query 'DBInstances[0].AutomationMode'
Valide o status da automação:
exemplo
aws ds describe-db-instances \ --db-instance-identifier my-custom-instance \ --region us-east-1 \ --query 'DBInstances[0].AutomationMode'
Saída esperada: "all-paused"
Etapa 2: criar arquivos de senha e parâmetro
Crie um arquivo de senha usando orapwd. Recupere a senha SYS do AWS Secrets Manager (armazenada durante a criação da instância do RDS Custom).
exemplo
# Non-CDB $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwORCL password=<SYS_PASSWORD>entries=10 # Multitenant $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwRDSCDB password=<SYS_PASSWORD>entries=10
Crie um arquivo de parâmetro do banco de dados de origem:
exemplo
sqlplus / as sysdba SQL> CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE; -- Non-CDB SQL> CREATE PFILE='/tmp/initRDSCDB.ora' FROM SPFILE; -- Multitenant
O arquivo de parâmetro gerado conterá caminhos e parâmetros específicos do RDS Custom. Para multilocatário, os principais parâmetros incluem:
-
enable_pluggable_database=TRUE(crítico para multilocatário) -
noncdb_compatible=TRUE(para compatibilidade com versões anteriores) -
Caminhos de arquivo de dados para
CDB$ROOT,PDB$SEEDe todos os PDBs -
db_create_file_destedb_create_online_log_dest_1para OMF
Etapa 3: transferir arquivos para o EC2
Escolha seu método preferido de transferência de arquivos. Esta orientação usa o Amazon S3 como exemplos.
Usar o Amazon S3:
Usando o Amazon S3:
exemplo Para não CDB:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /tmp/initORCL.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwORCL s3://<YOUR_BUCKET>/ # On EC2, download files aws s3 cp s3://<YOUR_BUCKET>/initORCL.ora $ORACLE_HOME/dbs/ aws s3 cp s3://<YOUR_BUCKET>/orapwORCL $ORACLE_HOME/dbs/
exemplo Para multilocatário
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /tmp/initRDSCDB.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwRDSCDB s3://<YOUR_BUCKET>/ # On EC2, download and rename files to use ORCL naming aws s3 cp s3://<YOUR_BUCKET>/initRDSCDB.ora $ORACLE_HOME/dbs/initORCL.ora aws s3 cp s3://<YOUR_BUCKET>/orapwRDSCDB $ORACLE_HOME/dbs/orapwORCL
Valide os arquivos no EC2:
exemplo
ls -l $ORACLE_HOME/dbs/initORCL.ora ls -l $ORACLE_HOME/dbs/orapwORCL
Etapa 4: editar arquivo de parâmetro no EC2
O arquivo de parâmetro requer uma edição cuidadosa para garantir a migração bem-sucedida. Essa é uma das etapas mais importantes no processo de migração.
Edite $ORACLE_HOME/dbs/initORCL.ora na instância do EC2 e faça essas alterações essenciais:
-
Atualizar nome do banco de dados: para multilocatário, altere todas as ocorrências de RDSCDB para ORCL
-
Converter caminhos do RDS Custom em caminhos do EC2: substitua /rdsdbdata/ por /u01/app/oracle/
-
Remover parâmetros específicos do RDS Custom
-
dg_broker_config_file1edg_broker_config_file2(se presente, - indica a existência de uma réplica) -
standby_file_management(se presente) -
spfile(criaremos um novo SPFILE mais tarde) -
Qualquer parâmetro
log_archive_destque aponte para destinos em espera (mantenha somentelog_archive_dest_1para arquivamento local)
-
-
Adicionar parâmetros de conversão de nome de arquivo (veja abaixo)
-
Ajustar os parâmetros de memória com base no tamanho da instância do EC2 (opcional, mas recomendado)
Compreensão dos parâmetros de conversão de nome de arquivo:
Os parâmetros DB_FILE_NAME_CONVERT e LOG_FILE_NAME_CONVERT são essenciais para a duplicação do RMAN. Eles dizem ao RMAN como mapear os caminhos do arquivo de origem para os caminhos do arquivo de destino durante o processo de duplicação. Sem esses parâmetros, o RMAN tentará criar arquivos nos mesmos caminhos da origem, o que falhará no EC2.
Considerações importantes:
-
Cada parâmetro aceita pares de cadeias de caracteres: caminho de origem seguido pelo caminho de destino
-
Vários pares podem ser especificados em um único parâmetro
-
Para multilocatário, você deve mapear caminhos para
CDB$ROOT,PDB$SEEDe todos os PDBs -
A ordem dos pares é importante: o RMAN os processa na ordem especificada
-
Os caminhos diferenciam maiúsculas de minúsculas e devem coincidir exatamente
Mapeamentos de caminho:
|
Caminho personalizado do RDS |
Caminho do EC2 |
Descrição |
|---|---|---|
| /rdsdbbin | /u01/app/oracle | Base Oracle |
| /rdsdbdata/db/ORCL_A/datafile/ | /u01/app/oracle/oradata/ORCL/datafile/ | Arquivos de dados |
| /rdsdbdata/db/ORCL_A/controlfile/ | /u01/app/oracle/oradata/ORCL/controlfile/ | Arquivos de controle |
| /rdsdbdata/db/ORCL_A/onlinelog/ | /u01/app/oracle/oradata/ORCL/onlinelog/ | Logs redo online |
| /rdsdbdata/db/ORCL_A/arch/ | /u01/app/oracle/oradata/ORCL/arch/ | Arquivar logs |
| /rdsdbdata/admin/ORCL/adump | /u01/app/oracle/admin/ORCL/adump | Despejo de auditoria |
| /rdsdbdata/log | /u01/app/oracle | Destino de diagnóstico |
|
Caminho personalizado do RDS |
Caminho do EC2 |
Descrição |
|---|---|---|
/rdsdbbin |
/u01/app/oracle |
Base Oracle |
/rdsdbdata/db/cdb/RDSCDB/datafile/ |
/u01/app/oracle/oradata/ORCL/cdb/datafile/ |
Arquivos de dados raiz do CDB |
/rdsdbdata/db/cdb/pdbseed/ |
/u01/app/oracle/oradata/ORCL/pdbseed/datafile/ |
Arquivos de dados PDB$SEED |
/rdsdbdata/db/pdb/RDSCDB_A/ |
/u01/app/oracle/oradata/ORCL/pdb/datafile/ |
Arquivos de dados PDB (OMF com GUID) |
/rdsdbdata/db/cdb/RDSCDB_A/controlfile/ |
/u01/app/oracle/oradata/ORCL/controlfile/ |
Arquivos de controle |
/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/ |
/u01/app/oracle/oradata/ORCL/onlinelog/ |
Logs redo online |
/rdsdbdata/db/cdb/RDSCDB_A/arch/redolog |
/u01/app/oracle/oradata/ORCL/arch/ |
Arquivar logs |
/rdsdbdata/admin/RDSCDB/adump |
/u01/app/oracle/admin/ORCL/adump |
Despejo de auditoria |
/rdsdbdata/log |
/u01/app/oracle |
Destino de diagnóstico |
Adicione parâmetros de conversão:
exemplo Não CDB:
*.DB_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/datafile/','/u01/app/oracle/oradata/ORCL/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
exemplo Multilocatário (deve incluir mapeamentos para a raiz do CDB, PDB$SEED, e todos os caminhos do PDB):
*.DB_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB/datafile/','/u01/app/oracle/oradata/ORCL/cdb/datafile/','/rdsdbdata/db/cdb/pdbseed/','/u01/app/oracle/oradata/ORCL/pdbseed/datafile/','/rdsdbdata/db/pdb/RDSCDB_A/','/u01/app/oracle/oradata/ORCL/pdb/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
Importante: para multilocatário, enable_pluggable_database = TRUE deve estar presente no arquivo de parâmetro. O RDS Custom usa OMF para arquivos de dados PDB com subdiretórios baseados em GUID - o mapeamento de caminhos trata isso automaticamente.
Arquivos de parâmetro de exemplo completos:
exemplo Exemplo de arquivo de parâmetro não CDB (initORCL.ora):
ORCL.__data_transfer_cache_size=0 ORCL.__db_cache_size=6039797760 ORCL.__inmemory_ext_roarea=0 ORCL.__inmemory_ext_rwarea=0 ORCL.__java_pool_size=0 ORCL.__large_pool_size=33554432 ORCL.__oracle_base='/u01/app/oracle' ORCL.__pga_aggregate_target=4966055936 ORCL.__sga_target=7449083904 ORCL.__shared_io_pool_size=134217728 ORCL.__shared_pool_size=1207959552 ORCL.__streams_pool_size=0 ORCL.__unified_pga_pool_size=0 *.archive_lag_target=300 *.audit_file_dest='/u01/app/oracle/admin/ORCL/adump' *.compatible='19.0.0' *.control_files='/u01/app/oracle/oradata/ORCL/controlfile/control-01.ctl' *.db_block_checking='MEDIUM' *.db_create_file_dest='/u01/app/oracle/oradata/ORCL' *.db_name='ORCL' *.db_recovery_file_dest_size=1073741824 *.db_unique_name='ORCL' *.dbfips_140=FALSE *.diagnostic_dest='/u01/app/oracle' *.filesystemio_options='setall' *.heat_map='OFF' *.job_queue_processes=50 *.local_listener='(address=(protocol=tcp)(host=)(port=1521))' *.log_archive_dest_1='location="/u01/app/oracle/oradata/ORCL/arch", valid_for=(ALL_LOGFILES,ALL_ROLES)' *.log_archive_format='-%s-%t-%r.arc' *.max_string_size='STANDARD' *.memory_max_target=12385852416 *.memory_target=12385852416 *.open_cursors=300 *.pga_aggregate_target=0 *.processes=1673 *.recyclebin='OFF' *.sga_target=0 *.undo_tablespace='UNDO_T1' *.use_large_pages='FALSE' *.DB_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/datafile/','/u01/app/oracle/oradata/ORCL/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
exemplo Exemplo de arquivo de parâmetro multilocatário (initORCL.ora):
ORCL.__data_transfer_cache_size=0 ORCL.__db_cache_size=6006243328 ORCL.__inmemory_ext_roarea=0 ORCL.__inmemory_ext_rwarea=0 ORCL.__java_pool_size=0 ORCL.__large_pool_size=33554432 ORCL.__oracle_base='/u01/app/oracle' ORCL.__pga_aggregate_target=4966055936 ORCL.__sga_target=7415529472 ORCL.__shared_io_pool_size=134217728 ORCL.__shared_pool_size=1207959552 ORCL.__streams_pool_size=0 ORCL.__unified_pga_pool_size=0 *.archive_lag_target=300 *.audit_file_dest='/u01/app/oracle/admin/ORCL/adump' *.compatible='19.0.0' *.control_files='/u01/app/oracle/oradata/ORCL/controlfile/control-01.ctl' *.db_block_checking='MEDIUM' *.db_create_file_dest='/u01/app/oracle/oradata/ORCL/pdb/datafile' *.db_create_online_log_dest_1='/u01/app/oracle/oradata/ORCL' *.db_name='ORCL' *.db_recovery_file_dest_size=1073741824 *.db_unique_name='ORCL' *.dbfips_140=FALSE *.diagnostic_dest='/u01/app/oracle' *.enable_pluggable_database=TRUE *.filesystemio_options='setall' *.heat_map='OFF' *.job_queue_processes=50 *.local_listener='(address=(protocol=tcp)(host=)(port=1521))' *.log_archive_dest_1='location="/u01/app/oracle/oradata/ORCL/arch", valid_for=(ALL_LOGFILES,ALL_ROLES)' *.log_archive_format='-%s-%t-%r.arc' *.max_string_size='STANDARD' *.memory_max_target=12361688064 *.memory_target=12361688064 *.noncdb_compatible=TRUE *.open_cursors=300 *.pga_aggregate_target=0 *.processes=1670 *.recyclebin='OFF' *.sga_target=0 *.undo_tablespace='UNDO_T1' *.use_large_pages='FALSE' *.DB_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB/datafile/','/u01/app/oracle/oradata/ORCL/cdb/datafile/','/rdsdbdata/db/cdb/pdbseed/','/u01/app/oracle/oradata/ORCL/pdbseed/datafile/','/rdsdbdata/db/pdb/RDSCDB_A/','/u01/app/oracle/oradata/ORCL/pdb/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
Explicações dos principais parâmetros:
-
enable_pluggable_database=TRUE: obrigatório para CDB multilocatário. Esse parâmetro ativa o recurso de banco de dados conectável. -
noncdb_compatible=TRUE: definido pelo RDS Custom para compatibilidade com versões anteriores. Pode ser mantido ou removido dependendo das suas necessidades. -
db_create_file_dest: especifica o local padrão para o Oracle Managed Files (OMF). Para multilocatário, isso aponta para o diretório de arquivo de dados do PDB. -
db_create_online_log_dest_1: especifica a localização dos logs redo online ao usar o OMF. -
DB_FILE_NAME_CONVERT: essencial para a duplicação do RMAN. Mapeia os caminhos do arquivo de dados de origem para os caminhos de destino. -
LOG_FILE_NAME_CONVERT: mapeia os caminhos de log redo de origem para os caminhos de destino. -
memory_targetememory_max_target: ajuste-os com base na memória da instância do EC2. Os valores mostrados são exemplos. -
processes: número máximo de processos do sistema operacional que podem se conectar ao Oracle. Ajuste com base no workload.
Diretrizes de dimensionamento de memória:
Ao ajustar os parâmetros de memória para a instância do EC2:
|
Memória da instância do EC2 |
memory_target recomendado |
memory_max_target recomendado |
|---|---|---|
| 16 GB | 12 GB (12884901888 bytes) | 14 GB (15032385536 bytes) |
| 32 GB | 24 GB (25769803776 bytes) | 28 GB (30064771072 bytes) |
| 64 GB | 48 GB (51539607552 bytes) | 56 GB (60129542144 bytes) |
| 128 GB | 96 GB (103079215104 bytes) | 112 GB (120259084288 bytes) |
Deixe aproximadamente 20% a 25% da memória do sistema para o sistema operacional e outros processos.
Etapa 5: configurar o TNS e o receptor
Nas duas instâncias, adicione entradas TNS a tnsnames.ora:
exemplo Não CDB:
DB_SOURCE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL))) DB_TARGET = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
exemplo Multilocatário:
DB_SOURCE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = RDSCDB))) DB_TARGET = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
exemplo Configurar o receptor no EC2 ($ORACLE_HOME/network/admin/listener.ora):
LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<EC2_IP>)(PORT = 1521))) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME = ORCL)))
exemplo Iniciar receptor:
lsnrctl start
nota
Para duplicação ativa do RMAN, as entradas TNS se conectam à instância do banco de dados usando SID (não SERVICE_NAME). Para multilocatário, isso se conecta ao CDB, e o RMAN duplica automaticamente todos os PDBs.
Etapa 6: iniciar o banco de dados em NOMOUNT no EC2
exemplo
export ORACLE_SID=ORCL export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH sqlplus / as sysdba SQL> STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/initORCL.ora';
exemplo Verifique os parâmetros:
SQL> SHOW PARAMETER db_name SQL> SHOW PARAMETER control_files SQL> SHOW PARAMETER enable_pluggable_database -- For multitenant
Etapa 7: executar a duplicação ativa do RMAN
A duplicação ativa do RMAN copia o banco de dados da origem ativa e em execução para o destino. O banco de dados de origem permanece online e acessível aos aplicativos durante todo esse processo.
Conecte o RMAN às instâncias de origem e de destino:
exemplo
rman target sys/<password>@DB_SOURCE auxiliary sys/<password>@DB_TARGET
exemplo Saída esperada para não CDB:
Recovery Manager: Release 19.0.0.0.0 - Production connected to target database: ORCL (DBID=4089929259) connected to auxiliary database: ORCL (not mounted)
exemplo Saída esperada para multilocatário:
Recovery Manager: Release 19.0.0.0.0 - Production connected to target database: RDSCDB (DBID=4089929259) connected to auxiliary database: ORCL (not mounted)
exemplo Execute o comando de duplicação ativa:
RMAN> DUPLICATE DATABASE TO 'ORCL' FROM ACTIVE DATABASE NOFILENAMECHECK;
nota
-
A origem permanece online: o banco de dados de origem continua atendendo às solicitações do aplicativo durante a duplicação
-
Para não CDB: isso duplica todo o banco de dados enquanto ele permanece online
-
Para multilocatário: isso duplica todo o CDB, incluindo
CDB$ROOT,PDB$SEEDe todos os PDBs em uma única operação, enquanto a origem permanece online -
NOFILENAMECHECK: permite que o RMAN continue mesmo que os nomes dos arquivos sejam diferentes entre a origem e o destino
-
Duração: depende do tamanho do banco de dados e da largura de banda da rede. Para um banco de dados de 100 GB, espere de 30 a 60 minutos
-
Impacto na rede: alto uso da largura de banda da rede durante a duplicação, mas o banco de dados de origem permanece acessível
O processo de duplicação ativa do RMAN inclui várias fases:
-
Conexão aos bancos de dados de origem e de destino
-
Criação de um
SPFILEda memória no destino -
Restauração do arquivo de controle no destino
-
Montagem do banco de dados de destino
-
Cópia de todos os arquivos de dados da origem para o destino pela rede (a origem permanece online)
-
Recuperação do banco de dados de destino
-
Abertura do banco de dados de destino com
RESETLOGS
Durante a duplicação, o banco de dados de origem:
-
Permanece no modo
READ WRITE -
Continua aceitando conexões
-
Processa transações normalmente
-
Gera logs redo normalmente
-
É totalmente acessível aos aplicativos
exemplo Monitore o andamento em outra sessão:
SQL> SELECT sid, serial#, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete FROM v$session_longops WHERE totalwork > 0 AND sofar <> totalwork;
Monitoramento detalhado e solução de problemas durante a duplicação do RMAN:
Enquanto a duplicação do RMAN está em execução, monitore o andamento usando vários métodos:
-
Monitore a saída do RMAN:
A sessão do RMAN exibirá informações detalhadas sobre o andamento, incluindo:
-
Alocação de canais
-
Andamento da cópia do arquivo de dados
-
Tempo estimado de conclusão
-
Bytes processados
channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00001 name=/rdsdbdata/db/ORCL_A/datafile/system01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/system01.dbf tag=TAG20260303T120000 channel ORA_AUX_DISK_1: datafile copy complete, elapsed time: 00:05:23 channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00003 name=/rdsdbdata/db/ORCL_A/datafile/sysaux01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/sysaux01.dbf tag=TAG20260303T120000exemplo Resultado do exemplo:
channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00001 name=/rdsdbdata/db/ORCL_A/datafile/system01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/system01.dbf tag=TAG20260303T120000 channel ORA_AUX_DISK_1: datafile copy complete, elapsed time: 00:05:23 channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00003 name=/rdsdbdata/db/ORCL_A/datafile/sysaux01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/sysaux01.dbf tag=TAG20260303T120000 -
-
Monitore operações de longa duração:
exemplo Em uma sessão separada do SQL*Plus na instância do EC2 de destino:
SQL> SELECT sid, serial#, opname, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete, time_remaining, elapsed_seconds FROM v$session_longops WHERE totalwork > 0 AND sofar <> totalwork ORDER BY start_time;Essa consulta mostra:
-
opname: nome da operação (por exemplo, “RMAN: restauração completa do arquivo de dados”) -
sofar: blocos processados até agora -
totalwork: total de blocos a serem processados -
pct_complete: porcentagem concluída -
time_remaining: estimativa de segundos restantes -
elapsed_seconds: tempo decorrido até agora
-
-
Monitore os canais do RMAN:
exemplo
SQL> SELECT sid, serial#, context, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete FROM v$session_longops WHERE opname LIKE 'RMAN%' AND totalwork > 0 AND sofar <> totalwork; -
Verifique o log de alertas:
exemplo Na instância do EC2 de destino, monitore o log de alertas em busca de erros ou avisos:
tail -f $ORACLE_BASE/diag/rdbms/orcl/ORCL/trace/alert_ORCL.logProblemas comuns durante a duplicação do RMAN:
-
Tempo limite de rede
RMAN-03009: failure of duplicate command on ORA_AUX_DISK_1 channel ORA-03135: connection lost contactSolução: aumente os valores de tempo limite da rede em
sqlnet.oranas duas instâncias:SQLNET.RECV_TIMEOUT=600 SQLNET.SEND_TIMEOUT=600 -
Espaço insuficiente no destino
RMAN-03009: failure of duplicate command ORA-19504: failed to create file "/u01/app/oracle/oradata/ORCL/datafile/users01.dbf" ORA-27040: file create error, unable to create file Linux-x86_64 Error: 28: No space left on deviceSolução: verifique o espaço disponível e adicione mais capacidade de volume do EBS:
df -h /u01/app/oracle/oradata -
Erros no arquivo de parâmetro
RMAN-05021: this configuration cannot be used RMAN-06004: ORACLE error from auxiliary database: ORA-01261: Parameter db_create_file_dest destination string cannot be translatedSolução: verifique se todos os diretórios no arquivo de parâmetro existem e têm as permissões adequadas.
-
Incompatibilidade do arquivo de senha
RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of duplicate command at 03/03/2026 12:00:00 RMAN-06136: ORACLE error from auxiliary database: ORA-01017: invalid username/password; logon deniedSolução: o arquivo de senha no destino deve corresponder à origem e ter o nome correto (
orapwORCL).
-
Etapa 8: abrir PDBs (somente multilocatário)
Após a conclusão da duplicação do RMAN, o CDB no EC2 é aberto no modo READ WRITE, mas todos os PDBs estão no estado MOUNTED. Esse é o comportamento esperado: você deve abri-los manualmente.
Verifique o status atual do PDB:
SQL> SELECT con_id, name, open_mode FROM v$pdbs;
Saída esperada (exemplo com um PDB chamado ORCLDB):
CON_ID NAME OPEN_MODE ---------- ------------------------------ ---------- 2 PDB$SEED READ ONLY 3 ORCLDB MOUNTED
Abra todos os PDBs:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN; Pluggable database altered.
Verifique se todos os PDBs agora estão abertos no modo READ WRITE:
SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;
Saída esperada:
CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO
Configure a abertura automática na inicialização usando o método de salvamento de estado (recomendado para Oracle 19c):
SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE; Pluggable database altered.
Isso faz com que o Oracle se lembre do estado de abertura atual dos PDBs e o restaure na inicialização do CDB.
Verifique o estado salvo:
SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;
Verifique se os serviços do PDB estão registrados com o receptor:
lsnrctl services
A saída esperada deve mostrar serviços para o CDB e para cada PDB. Se os serviços não estiverem sendo exibidos:
SQL> ALTER SYSTEM REGISTER;
Em seguida, verifique novamente com lsnrctl services.
Etapa 9: remover objetos do RDS Custom
Como agora esse é um banco de dados autogerenciado no EC2, você deve remover usuários e objetos específicos do RDS Custom. O processo de limpeza difere entre arquiteturas não CDB e multilocatário.
Importante
Antes de descartar usuários e espaços de tabela específicos do RDS, verifique se não há objetos de aplicativo nesses esquemas:
SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE owner IN ('RDSADMIN', 'RDS_DATAGUARD') AND object_name NOT LIKE 'RDS%' AND object_name NOT LIKE 'SYS_%' GROUP BY owner, object_type;
Se algum objeto do aplicativo for encontrado, migre-o para os esquemas apropriados do aplicativo antes de continuar.
exemplo Não CDB:
SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';
Saída esperada: no rows selected
Multilocatário:
Em um ambiente multilocatário, o RDS Custom cria usuários comuns em CDB$ROOT que são visíveis em todos os PDBs. Você deve apagar de CDB$ROOT.
-- Connect to CDB$ROOT SQL> SHOW CON_NAME; -- Check for RDS-specific common users (including C## prefixed users) SQL> SELECT username, common, con_id FROM cdb_users WHERE username LIKE '%RDS%' OR username LIKE 'C##RDS%' ORDER BY username; -- Drop non-common users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- If any C## common users exist -- SQL> DROP USER C##RDSADMIN CASCADE ; -- Drop directories and tablespace SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal from CDB$ROOT SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%'; -- Verify removal from each PDB SQL> ALTER SESSION SET CONTAINER =<PDB_NAME>; SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';
Saída esperada para todas as consultas: no rows selected
Etapa 10: configurar a inicialização automática
Create SPFILE:
SQL> CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;
Para multilocatário, garanta que os PDBs estejam abertos:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN;
Editar o /etc/oratab:
ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y
Etapa 11: validação final
exemplo Não CDB:
SQL> SELECT name, open_mode, log_mode FROM v$database; SQL> SELECT SUM(bytes)/1024/1024/1024 AS size_gb FROM dba_data_files; SQL> SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';
exemplo Multilocatário:
SQL> SELECT name, open_mode, log_mode, cdb FROM v$database; SQL> SELECT con_id, name, open_mode FROM v$pdbs; SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; SQL> SELECT con_id, COUNT(*) FROM cdb_objects WHERE status = 'INVALID' GROUP BY con_id;
Test application connectivity: # Non-CDB sqlplus<app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus<app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>
Etapa 12: retornar a automação do RDS Custom
aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode full \ --region us-east-1
Opção 2: migração física usando o Oracle Data Guard
Esta seção fornece etapas detalhadas para migrar seu banco de dados Oracle do RDS Custom para Oracle para o EC2 usando o Oracle Data Guard. Esse método é adequado para migrações que exigem o tempo de inatividade mínimo.
Quando usar o Oracle Data Guard
Escolha o Oracle Data Guard quando:
-
Você precisar de um tempo de inatividade mínimo (segundos a minutos para a transição)
-
Você estiver migrando bancos de dados de produção ou de missão crítica
-
Você precisar de sincronização contínua antes da substituição
-
Você quiser um recurso de fallback integrado
-
Você precisar testar o banco de dados de destino antes de se comprometer com a migração
Visão geral do Oracle Data Guard
O Oracle Data Guard mantém um banco de dados em espera sincronizado enviando e aplicando continuamente logs redo do banco de dados principal. Quando estiver tudo pronto para concluir a migração, você executa uma transição que promove o modo de espera do EC2 para o banco de dados principal com o tempo de inatividade mínimo (de segundos a minutos). Para bancos de dados multilocatário, o Data Guard protege automaticamente todo o CDB, incluindo todos os PDBs. O redo gerado por qualquer PDB é enviado para o modo de espera e aplicado ao PDB correspondente no modo de espera.
Fluxo de trabalho de migração para o Oracle Data Guard
Etapas da instância de banco de dados do RDS Custom (principal):
-
Pausar a automação do Amazon RDS Custom
-
Verificar a arquitetura do banco de dados (não CDB ou CDB com PDBs)
-
Confirmar se o banco de dados principal está sendo executado no modo de log de arquivamento e
FORCE_LOGGINGestá ativado -
Criar um arquivo de senha
-
Executar um backup online do RMAN do banco de dados principal (ou usar a duplicação ativa)
-
Criar um arquivo de parâmetro do banco de dados de origem
-
Copiar os conjuntos de backup, o arquivo de parâmetro e o arquivo de senha para a instância do EC2 de destino
Etapas da instância de banco de dados do EC2 (em espera):
-
Copiar todos os arquivos da origem para a instância do EC2
-
Copiar o arquivo de senha para a instância do EC2
-
Editar o arquivo de parâmetro para o EC2 (específico da arquitetura)
-
Criar o arquivo de parâmetro do servidor a partir do arquivo de parâmetro
-
Restaurar arquivo de controle e banco de dados em espera
Etapas de configuração do Data Guard:
-
Configurar receptores Oracle nas duas instâncias
-
Configurar tnsnames.ora nas duas instâncias
-
Iniciar o agente do Oracle Data Guard nas duas instâncias (opcional, mas recomendado)
-
Ativar a configuração do Oracle Data Guard
-
Configurar fal_server e fal_client na instância em espera do EC2
-
Configurar os arquivos de log redo em espera nas duas instâncias
-
Recuperar a instância em espera
-
Executar a transição manual
-
Abrir o banco de dados (e PDBs para multilocatário)
-
Configurar a abertura automática do PDB (somente multilocatário)
-
Remover usuários e objetos específicos do RDS Custom
-
Criar SPFILE e configurar a inicialização automática
Etapa 1: pausar a automação do Amazon RDS Custom
Pause o modo de automação na instância do RDS Custom. O parâmetro --resume-full-automation-mode-minute deve ser ajustado com base no tamanho do banco de dados e no tempo esperado de configuração do Data Guard.
aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode all-paused \ --resume-full-automation-mode-minute 480 \ --region us-east-1
Valide o status da automação:
aws rds describe-db-instances \ --db-instance-identifier my-custom-instance \ --region us-east-1 \ --query 'DBInstances[0].AutomationMode'
Saída esperada: "all-paused"
Etapa 2: confirmar o modo de log de arquivamento e FORCE_LOGGING
O Oracle Data Guard exige que o banco de dados principal esteja no modo de log de arquivamento com o registro forçado ativado:
sqlplus / as sysdba SQL> SELECT log_mode, force_logging FROM v$database;
Saída esperada:
LOG_MODE FORCE_LOGGING ------------ ------------- ARCHIVELOG YES
Se o registro forçado não estiver ativado, execute:
SQL> ALTER DATABASE FORCE LOGGING;
Etapa 3: criar arquivos de senha e parâmetro
Crie um arquivo de senha usando orapwd. Recupere a senha SYS do AWS Secrets Manager.
# Non-CDB $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwORCL password=<SYS_PASSWORD>entries=10 # Multitenant $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwRDSCDB password=<SYS_PASSWORD>entries=10
Crie um arquivo de parâmetro do banco de dados de origem:
sqlplus / as sysdba SQL> CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE; -- Non-CDB SQL> CREATE PFILE='/tmp/initRDSCDB.ora' FROM SPFILE; -- Multitenant
Etapa 4: executar o backup do RMAN ou usar a duplicação ativa
Você tem duas opções para criar o banco de dados em espera:
Opção A: backup online do RMAN (recomendado para a maioria dos cenários)
Crie um diretório de backup e faça backup do banco de dados:
mkdir -p /rdsdbdata/backup rman target / RMAN> run { backup as compressed backupset filesperset 2 format '/rdsdbdata/backup/db_%U' database; sql 'alter system archive log current'; backup as compressed backupset filesperset 50 format '/rdsdbdata/backup/arch_%U' archivelog all; } RMAN> backup current controlfile for standby format '/rdsdbdata/backup/standby.ctl';
nota
Para multilocatário, a palavra-chave do banco de dados faz backup automático de todo o CDB, incluindo todos os PDBs.
Opção B: duplicação ativa (método alternativo)
Ignore a etapa de backup e use a duplicação ativa do RMAN para criar o modo de espera diretamente na rede. Isso elimina a necessidade de armazenamento de backup e transferência de arquivos. Depois de configurar o TNS e os receptores (veja abaixo), execute:
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER;
Essa orientação se concentra na Opção A (baseada em backup), mas a Opção B é uma alternativa válida.
Etapa 5: transferir arquivos para o EC2
Escolha seu método preferido de transferência de arquivos. Esta orientação usa o Amazon S3 como exemplos.
Usar o Amazon S3:
exemplo Para não CDB:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /rdsdbdata/backup s3://<YOUR_BUCKET>/ --recursive aws s3 cp /tmp/initORCL.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwORCL s3://<YOUR_BUCKET>/ # On EC2, download files aws s3 cp s3://<YOUR_BUCKET>/backup /u01/app/oracle/backup/ --recursive aws s3 cp s3://<YOUR_BUCKET>/initORCL.ora $ORACLE_HOME/dbs/ aws s3 cp s3://<YOUR_BUCKET>/orapwORCL $ORACLE_HOME/dbs/
exemplo Para multilocatário:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /rdsdbdata/backup s3://<YOUR_BUCKET>/ --recursive aws s3 cp /tmp/initRDSCDB.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwRDSCDB s3://<YOUR_BUCKET>/ # On EC2, download and rename files to use ORCL naming aws s3 cp s3://<YOUR_BUCKET>/backup /u01/app/oracle/backup/ --recursive aws s3 cp s3://<YOUR_BUCKET>/initRDSCDB.ora $ORACLE_HOME/dbs/initORCL.ora aws s3 cp s3://<YOUR_BUCKET>/orapwRDSCDB $ORACLE_HOME/dbs/orapwORCL
Etapa 6: editar arquivo de parâmetro no EC2
Edite $ORACLE_HOME/dbs/initORCL.ora na instância do EC2 e faça essas alterações essenciais:
-
Atualizar nome do banco de dados: para multilocatário, altere todas as ocorrências de
RDSCDBparaORCL -
Alterar db_unique_name: de
ORCL_A(ouRDSCDB_A) paraORCL_B -
Converter caminhos do RDS Custom em caminhos do EC2: substitua
/rdsdbdata/por/u01/app/oracle/ -
Remover parâmetros específicos do RDS Custom
-
dg_broker_config_file1edg_broker_config_file2(se estiver presente) -
standby_file_management(se presente) -
spfile(criaremos um novoSPFILEmais tarde) -
Qualquer parâmetro
log_archive_destque aponte para destinos em espera
-
-
Ajustar os parâmetros de memória com base no tamanho da instância do EC2 (opcional, mas recomendado)
Mapeamentos de caminho:
Não CDB:
-
/rdsdbdata/db/ORCL_A/datafile/→/u01/app/oracle/oradata/ORCL/datafile/ -
/rdsdbdata/db/ORCL_A/controlfile/→/u01/app/oracle/oradata/ORCL/controlfile/ -
/rdsdbdata/db/ORCL_A/onlinelog/→/u01/app/oracle/oradata/ORCL/onlinelog/ -
/rdsdbdata/admin/ORCL/adump→/u01/app/oracle/admin/ORCL/adump
Multilocatário:
-
/rdsdbdata/db/cdb/RDSCDB/datafile/→/u01/app/oracle/oradata/ORCL/cdb/datafile/ -
/rdsdbdata/db/cdb/pdbseed/→/u01/app/oracle/oradata/ORCL/pdbseed/datafile/ -
/rdsdbdata/db/pdb/RDSCDB_A/→/u01/app/oracle/oradata/ORCL/pdb/datafile/ -
/rdsdbdata/db/cdb/RDSCDB_A/controlfile/→/u01/app/oracle/oradata/ORCL/controlfile/ -
/rdsdbdata/admin/RDSCDB/adump→/u01/app/oracle/admin/ORCL/adump
Importante: para multilocatário, enable_pluggable_database = TRUE deve estar presente no arquivo de parâmetro.
Etapa 7: criar SPFILE e restaurar o banco de dados em espera
Inicie a instância e crie SPFILE:
sqlplus / as sysdba SQL> STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> CREATE SPFILE='/u01/app/oracle/admin/ORCL/pfile/spfileORCL.ora' FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> SHUTDOWN IMMEDIATE;
Crie um link simbólico:
ln -sfn /u01/app/oracle/admin/ORCL/pfile/spfileORCL.ora $ORACLE_HOME/dbs/spfileORCL.ora
Inicie a instância e restaure:
SQL> STARTUP NOMOUNT; rman target /
Se os arquivos de backup estiverem em um caminho diferente do de origem, catalogue-os primeiro:
RMAN> catalog start with '/u01/app/oracle/backup/';
Restaure o arquivo de controle em espera e monte:
RMAN> restore standby controlfile from '/u01/app/oracle/backup/standby.ctl'; RMAN> alter database mount;
Se os caminhos do arquivo de dados forem diferentes (por exemplo, usando ASM), use SET NEWNAME:
RMAN> run { set newname for database to '+DATA/%b'; restore database; switch datafile all; }
Caso contrário, basta restaurar:
RMAN> restore database;
Recupere o banco de dados até a última sequência disponível:
RMAN> list backup of archivelog all; RMAN> recover database until sequence <LAST_SEQ + 1>;
nota
Para multilocatário, o RMAN restaura e recupera automaticamente todos os PDBs. Você não precisa restaurar cada PDB separadamente.
Etapa 8: configurar o TNS e os receptores
Nas duas instâncias, adicione entradas TNS a tnsnames.ora:
exemplo Não CDB:
ORCL_A = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL))) ORCL_B = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
exemplo Multilocatário:
RDSCDB_A = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = RDSCDB))) ORCL_B = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
Configure receptores nas duas instâncias. No RDS Custom, anexe a listener.ora:
exemplo Para não CDB:
SID_LIST_L_ORCL_DG=(SID_LIST = (SID_DESC = (SID_NAME = ORCL)(GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /rdsdbbin/oracle.19.custom.r1.EE.1))) L_ORCL_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST =<RDS_CUSTOM_IP>)))
exemplo Para multilocatário:
SID_LIST_L_RDSCDB_DG=(SID_LIST = (SID_DESC = (SID_NAME = RDSCDB)(GLOBAL_DBNAME = RDSCDB) (ORACLE_HOME = /rdsdbbin/oracle.19.custom.r1.EE-CDB.1))) L_RDSCDB_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST =<RDS_CUSTOM_IP>)))
Inicie o receptor:
$ORACLE_HOME/bin/lsnrctl start L_ORCL_DG # or L_RDSCDB_DG for multitenant
No EC2, crie $ORACLE_HOME/network/admin/listener.ora:
SID_LIST_L_ORCL_DG=(SID_LIST = (SID_DESC = (SID_NAME = ORCL)(GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1))) L_ORCL_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST =<EC2_IP>)))
Inicie o receptor:
$ORACLE_HOME/bin/lsnrctl start L_ORCL_DG
nota
Você pode usar o receptor existente no RDS Custom, se preferir, mas criar um receptor separado do Data Guard fornece melhor isolamento.
Importante
Se a conectividade tnsping ou listener falhar, verifique as regras iptables no EC2. Muitas instâncias do EC2 Linux têm regras iptables padrão que bloqueiam a porta 1521. Adicione uma regra: sudo iptables -I INPUT 5 -p
tcp --dport 1521 -j ACCEPT
Etapa 9: ativar o agente e a configuração do Data Guard
Nas duas instâncias, ative o agente do Data Guard:
sqlplus / as sysdba SQL> ALTER SYSTEM SET dg_broker_start=true;
No banco de dados principal do RDS Custom, conecte-se ao agente do Data Guard e crie a configuração:
dgmgrl /
exemplo Para não CDB:
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS ORCL_A CONNECT IDENTIFIER IS ORCL_A; DGMGRL> ADD DATABASE ORCL_B AS CONNECT IDENTIFIER IS ORCL_B MAINTAINED AS PHYSICAL;
exemplo Para multilocatário:
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS RDSCDB_A CONNECT IDENTIFIER IS RDSCDB_A; DGMGRL> ADD DATABASE ORCL_B AS CONNECT IDENTIFIER IS ORCL_B MAINTAINED AS PHYSICAL;
Defina identificadores de conexão estáticos e ative:
exemplo Para não CDB:
DGMGRL> edit database orcl_a set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<RDS_CUSTOM_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> edit database orcl_b set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<EC2_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> ENABLE CONFIGURATION;
exemplo Para multilocatário:
DGMGRL> edit database rdscdb_a set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<RDS_CUSTOM_IP>))(CONNECT_DATA=(SID=RDSCDB)(SERVER=DEDICATED)))'; DGMGRL> edit database orcl_b set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<EC2_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> ENABLE CONFIGURATION;
nota
O agente do Data Guard é opcional, mas recomendado para facilitar o gerenciamento. Para migrações simples, você pode configurar o Data Guard manualmente sem o agente.
nota
Quando você ativa o Data Guard para um CDB, ele protege automaticamente todos os PDBs. O redo gerado por qualquer PDB é enviado para o modo de espera e aplicado ao PDB correspondente no modo de espera.
Etapa 10: configurar os logs redo em espera e iniciar a recuperação
Na instância de espera do EC2, adicione arquivos de log redo em espera (n+1 em que n é o número de grupos de log redo online):
ALTER DATABASE ADD STANDBY LOGFILE ('slog1.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog2.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog3.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog4.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog5.rdo') SIZE 128M;
nota
Para multilocatário, os logs redo em espera são criados no nível do CDB e compartilhados por todos os PDBs.
Configure os parâmetros FAL no modo de espera:
exemplo Para não CDB:
SQL> alter system set fal_server = 'ORCL_A'; SQL> alter system set fal_client = 'ORCL_B';
exemplo Para multilocatário:
SQL> alter system set fal_server = 'RDSCDB_A'; SQL> alter system set fal_client = 'ORCL_B';
Inicie a recuperação gerenciada:
SQL> recover managed standby database disconnect from session;
Monitore o atraso de aplicação:
SQL> SELECT name, value FROM v$dataguard_stats WHERE name = 'apply lag';
Monitoramento e gerenciamento detalhados da sincronização do Data Guard:
O monitoramento do Data Guard é fundamental para garantir uma migração bem-sucedida. Confira as técnicas de monitoramento abrangentes:
-
Monitore as estatísticas do Data Guard:
-- Comprehensive Data Guard statistics SQL> SELECT name, value, unit, time_computed, datum_time FROM v$dataguard_stats ORDER BY name;Principais métricas a serem monitoradas:
-
atraso de transporte: diferença de tempo entre o momento em que o redo foi gerado no banco de dados principal e recebido no banco de dados em espera
-
atraso de aplicação: diferença de tempo entre o momento em que o redo foi gerado e aplicado no banco de dados em espera
-
taxa de aplicação: taxa na qual o redo está sendo aplicado (MB/s)
-
redo recebido: total de redos recebidos no banco de dados em espera
-
redo aplicado: total de redos aplicados no banco de dados em espera
-
-
Monitore o envio de logs de arquivos:
No banco de dados principal (RDS Custom):
-- Check archive log generation rate SQL> SELECT TO_CHAR(first_time, 'YYYY-MM-DD HH24') AS hour, COUNT(*) AS log_count, ROUND(SUM(blocks * block_size)/1024/1024/1024, 2) AS size_gb FROM v$archived_log WHERE first_time > SYSDATE - 1 GROUP BY TO_CHAR(first_time, 'YYYY-MM-DD HH24') ORDER BY hour; -- Check archive log destination status SQL> SELECT dest_id, status, error, destination FROM v$archive_dest WHERE status != 'INACTIVE';No banco de dados em espera (EC2):
-- Check archive log apply status SQL> SELECT sequence#, first_time, next_time, applied FROM v$archived_log WHERE applied = 'NO' ORDER BY sequence#; -- Check archive log gap SQL> SELECT thread#, low_sequence#, high_sequence# FROM v$archive_gap; -
Monitore o processo gerenciado de recuperação:
-- Check if managed recovery is running SQL> SELECT process, status, thread#, sequence#, block#, blocks FROM v$managed_standby WHERE process LIKE 'MRP%' OR process LIKE 'RFS%'; -- Check recovery progress SQL> SELECT process, status, sequence#, TO_CHAR(timestamp, 'YYYY-MM-DD HH24:MI:SS') AS timestamp FROM v$managed_standby ORDER BY process; -
Monitore a taxa de aplicação de redos para multilocatário:
Para bancos de dados multilocatário, monitore a taxa de aplicação por PDB:
-- Check redo apply rate per container SQL> SELECT con_id, name, ROUND(SUM(value)/1024/1024, 2) AS redo_applied_mb FROM v$con_sysstat cs, v$containers c WHERE cs.con_id = c.con_id AND cs.name = 'redo size' GROUP BY con_id, name ORDER BY con_id; -
Monitore os logs redo em espera:
-- Check standby redo log status SQL> SELECT group#, thread#, sequence#, bytes/1024/1024 AS size_mb, status FROM v$standby_log ORDER BY group#; -- Check if standby redo logs are being used SQL> SELECT group#, thread#, sequence#, status, archived FROM v$standby_log WHERE status = 'ACTIVE'; -
Estime a conclusão da sincronização:
Calcule o tempo restante com base na taxa de aplicação:
-- Calculate estimated time to catch up SQL> SELECT ROUND((SELECT value FROM v$dataguard_stats WHERE name = 'apply lag')/60, 2) AS lag_minutes, ROUND((SELECT value FROM v$dataguard_stats WHERE name = 'apply rate')/1024, 2) AS apply_rate_mbps, ROUND( (SELECT value FROM v$dataguard_stats WHERE name = 'apply lag') / NULLIF((SELECT value FROM v$dataguard_stats WHERE name = 'apply rate'), 0) / 60, 2 ) AS estimated_catchup_minutes FROM dual;
Problemas comuns de sincronização do Data Guard:
Problema 1: grande atraso na aplicação
Sintomas:
SQL> SELECT name, value FROM v$dataguard_stats WHERE name = 'apply lag'; NAME VALUE -------------------------------- ----- apply lag +00 01:30:00
Causas e soluções:
-
CPU/IO insuficiente em espera: atualize o tipo de instância do EC2 ou aumente o IOPS do EBS
-
Limitação de largura de banda da rede: use redes aprimoradas ou tipos de instância com maior largura de banda
-
Vários PDBs com alta taxa de transação: aumente o paralelismo de aplicação de redo (requer a licença ativa do Data Guard)
-- Increase apply parallelism (requires Active Data Guard) SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE PARALLEL 4 DISCONNECT FROM SESSION;
Problema 2: lacuna no log de arquivamento
Sintomas:
SQL> SELECT * FROM v$archive_gap; THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# ------- ------------- -------------- 1 1234 1240
Solução:
-- FAL (Fetch Archive Log) will automatically fetch missing logs -- Verify FAL parameters are set correctly SQL> SHOW PARAMETER fal_server SQL> SHOW PARAMETER fal_client -- Manually register missing archive logs if needed -- On primary, check if logs still exist SQL> SELECT name FROM v$archived_log WHERE sequence# BETWEEN 1234 AND 1240; -- If logs are missing on primary, you may need to rebuild the standby
Problema 3: falha no transporte de redo
Sintomas:
SQL> SELECT dest_id, status, error FROM v$archive_dest WHERE dest_id = 2; DEST_ID STATUS ERROR ------- --------- ---------------------------------------- 2 ERROR ORA-16191: Primary log shipping client not logged on standby
Solução:
-- Check network connectivity -- Verify TNS configuration -- Check listener status on standby -- Restart log transport SQL> ALTER SYSTEM SET log_archive_dest_state_2 = 'DEFER'; SQL> ALTER SYSTEM SET log_archive_dest_state_2 = 'ENABLE';
Problema 4: a recuperação gerenciada não aplica o redo
Sintomas:
SQL> SELECT process, status FROM v$managed_standby WHERE process = 'MRP0'; PROCESS STATUS --------- ------------ MRP0 WAIT_FOR_LOG
Solução:
# Check if archive logs are arriving ls -ltr /u01/app/oracle/oradata/ORCL/arch/ # Check alert log for errors tail -100 $ORACLE_BASE/diag/rdbms/orcl_b/ORCL/trace/alert_ORCL.log # Restart managed recovery sqlplus / as sysdba SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Para multilocatário, você também pode verificar o status de cada PDB no banco de dados em espera:
SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;
Saída esperada (PDBs em estado MOUNTED no banco de dados em espera):
CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED MOUNTED 3 ORCLDB MOUNTED
nota
Em um banco de dados em espera físico, os PDBs permanecem no estado MOUNTED durante a recuperação gerenciada.
Etapa 11: executar a transição
Quando o banco de dados em espera estiver totalmente sincronizado e pronto, execute a transição. Para multilocatário, a transição mudará todo o CDB (todos os PDBs) do banco de dados principal do RDS Custom para o banco de dados em espera do EC2.
Na instância do banco de dados principal do RDS Custom, conecte-se ao agente do Data Guard e verifique se os dois bancos de dados estão prontos para a transição:
exemplo Para não CDB:
DGMGRL> VALIDATE DATABASE ORCL_A; DGMGRL> VALIDATE DATABASE ORCL_B;
exemplo Para multilocatário:
DGMGRL> VALIDATE DATABASE RDSCDB_A; DGMGRL> VALIDATE DATABASE ORCL_B;
Ambos devem mostrar Ready for Switchover: Yes
Mude do banco de dados principal do RDS Custom para o banco de dados em espera do EC2:
DGMGRL> SWITCHOVER TO ORCL_B;
Verifique se a transição foi bem-sucedida:
DGMGRL> SHOW CONFIGURATION VERBOSE;
A instância do EC2 (ORCL_B) agora é o banco de dados principal, e a instância do RDS Custom é o banco de dados em espera físico.
Etapa 12: abrir PDBs (somente multilocatário)
Após a transição, o CDB no EC2 é aberto no modo READ WRITE, mas todos os PDBs estão no estado MOUNTED. Você deve abri-los manualmente.
Conecte-se ao novo banco de dados principal no EC2:
sqlplus / as sysdba SQL> SELECT name, open_mode, database_role, cdb FROM v$database;
Saída esperada:
NAME OPEN_MODE DATABASE_ROLE CDB --------- -------------------- ---------------- --- ORCL READ WRITE PRIMARY YES
Verifique o status atual do PDB:
SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;
Saída esperada (PDBs no estado MOUNTED - exemplo com um PDB chamado ORCLDB):
CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB MOUNTED
Abra todos os PDBs:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN;
Banco de dados conectável alterado.
Verifique se todos os PDBs agora estão abertos no modo READ WRITE:
SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;
Saída esperada:
CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO
Etapa 13: configurar a abertura automática do PDB na inicialização (somente multilocatário)
Configure os PDBs para abrirem automaticamente quando o CDB começar a usar o método de salvamento do estado (recomendado para o Oracle 19c):
SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE; Pluggable database altered.
Verifique o estado salvo:
SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;
Verifique se os serviços do PDB estão registrados com o receptor:
lsnrctl services
A saída esperada deve mostrar serviços para o CDB e para cada PDB. Se os serviços não estiverem sendo exibidos:
SQL> ALTER SYSTEM REGISTER;
Em seguida, verifique novamente com lsnrctl services.
Etapa 14: remover objetos personalizados do RDS
Como agora esse é um banco de dados autogerenciado no EC2, você deve remover usuários e objetos específicos do RDS Custom. O processo de limpeza difere um pouco entre arquiteturas não CDB e multilocatário.
Importante
Antes de descartar usuários e espaços de tabela específicos do RDS, verifique se não há objetos de aplicativo nesses esquemas:
SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE owner IN ('RDSADMIN', 'RDS_DATAGUARD') AND object_name NOT LIKE 'RDS%' AND object_name NOT LIKE 'SYS_%' GROUP BY owner, object_type;
Se algum objeto do aplicativo for encontrado, migre-o para os esquemas apropriados do aplicativo antes de continuar.
Limpeza de não CDB:
sqlplus / as sysdba -- Drop RDS-specific users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- Drop RDS-specific directories SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; -- Drop the RDSADMIN tablespace SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';
Saída esperada: no rows selected
Limpeza de multilocatário:
Em um ambiente multilocatário, o RDS Custom cria usuários comuns em CDB$ROOT que são visíveis em todos os PDBs. Você deve apagar de CDB$ROOT.
sqlplus / as sysdba -- Verify you are in CDB$ROOT SQL> SHOW CON_NAME; -- Check for RDS-specific common users (including C## prefixed users) SQL> SELECT username, common, con_id FROM cdb_users WHERE username LIKE 'RDS%' OR username LIKE 'C##RDS%' ORDER BY username; -- Drop non-common users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- If any C## common users exist -- Example (adjust based on your findings): -- SQL> DROP USER C##RDS_DATAGUARD CASCADE; -- Drop RDS-specific directories SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; -- Drop the RDSADMIN tablespace SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal from CDB$ROOT SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%'; -- Verify removal from each PDB (example with one PDB named ORCLDB) SQL> ALTER SESSION SET CONTAINER = ORCLDB; SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';
Saída esperada para todas as consultas: nenhuma linha selecionada
Etapa 15: configurar inicialização automática
Verifique se o SPFILE está sendo usado:
sqlplus / as sysdba SQL> SHOW PARAMETER spfile;
Se o caminho spfile estiver correto, nenhuma ação será necessária. Se não estiver, crie um:
SQL> CREATE SPFILE FROM MEMORY;
Reinicie o banco de dados:
SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;
Para multilocatário, abra todos os PDBs (eles devem abrir automaticamente se você tiver salvo o estado anteriormente):
SQL> SELECT con_id, name, open_mode FROM v$pdbs;
Se os PDBs não estiverem abertos, abra-os manualmente:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN;
Editar o /etc/oratab:
vi /etc/oratab
Altere a linha de ORCL de N para Y:
ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y
Etapa 16: validação final
Execute uma validação abrangente no banco de dados migrado.
exemplo Para não CDB:
sqlplus / as sysdba -- Verify database role and status SQL> SELECT name, open_mode, log_mode, database_role FROM v$database; -- Check database size SQL> SELECT SUM(bytes)/1024/1024/1024 AS size_gb FROM dba_data_files; -- Verify all objects are valid SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE status = 'INVALID' GROUP BY owner, object_type; -- Verify data files SQL> SELECT name, status FROM v$datafile; -- Test application connectivity SQL> SELECT username, machine, program FROM v$session WHERE username IS NOT NULL;
exemplo Para multilocatário:
sqlplus / as sysdba -- Verify CDB status SQL> SELECT name, open_mode, log_mode, cdb, database_role FROM v$database; -- Verify all PDBs are open SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs; -- Check total CDB size SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; -- Check size per PDB SQL> SELECT p.name AS pdb_name, ROUND(SUM(d.bytes)/1024/1024/1024, 2) AS size_gb FROM v$pdbs p JOIN cdb_data_files d ON p.con_id = d.con_id GROUP BY p.name,p.con_id ORDER BY p.con_id; -- Verify all objects are valid across all PDBs SQL> SELECT con_id, owner, object_type, COUNT(*) FROM cdb_objects WHERE status = 'INVALID' GROUP BY con_id, owner, object_type; -- Verify PDB services are registered SQL> SELECT name FROM v$services ORDER BY name; Test application connectivity: # Non-CDB sqlplus<app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus<app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>
Teste a conectividade do aplicativo:
# Non-CDB sqlplus<app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus<app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>
Etapa 17: apagar arquivos de backup
Após a validação bem-sucedida, remova os arquivos de backup e desanexe o volume de backup se estiver usando um volume do EBS separado:
rm -rf /u01/app/oracle/backup/*
Se estiver usando um volume do EBS separado para backups:
# Unmount the volume sudo umount /u01/app/oracle/backup # Detach and delete the EBS volume from AWS Console or CLI aws ec2 detach-volume --volume-id<volume-id>aws ec2 delete-volume --volume-id<volume-id>
Etapa 18: retornar a automação do RDS Custom
Se você pretende manter a instância do RDS Custom em execução como alternativa durante um período de validação, retome a automação:
aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode full \ --region us-east-1
Solucionar problemas comuns
Esta seção aborda problemas comuns que você pode encontrar durante a migração tanto para a duplicação do RMAN quanto para as abordagens do Oracle Data Guard, abrangendo arquiteturas não CDB e multilocatário.
ORA-09925: não é possível criar arquivo de trilha de auditoria
Causa: o diretório de auditoria especificado no parâmetro audit_file_dest não existe na instância do EC2 de destino.
Solução:
Verifique se o diretório de auditoria existe e tem as permissões adequadas:
mkdir -p /u01/app/oracle/admin/ORCL/adump chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chmod -R 755 /u01/app/oracle/admin/ORCL
ORA-01261: a string de destino do parâmetro db_create_file_dest não pode ser traduzida
Causa: o diretório especificado no parâmetro db_create_file_dest não existe na instância do EC2 de destino.
Solução:
Para não CDB:
mkdir -p /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chmod -R 755 /u01/app/oracle/oradata/ORCL
Para multilocatário:
mkdir -p /u01/app/oracle/oradata/ORCL/pdb/datafile chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chmod -R 755 /u01/app/oracle/oradata/ORCL
ORA-01804: falha ao inicializar as informações de fuso horário
Esse erro pode ocorrer ao descartar o usuário RDSADMIN se a origem do RDS tiver uma versão de fuso horário maior do que a instalada em seu EC2 $ORACLE_HOME.
Solução:
-
Verifique as versões do fuso horário:
SELECT * FROM v$timezone_file; SELECT PROPERTY_NAME, PROPERTY_VALUE FROM database_properties WHERE PROPERTY_NAME LIKE '%DST%'; -
Como solução alternativa, defina a variável de ambiente do arquivo de fuso horário para corresponder ao que seu $ORACLE_HOME tem disponível:
ls $ORACLE_HOME/oracore/zoneinfo/timezlrg_*.dat export ORA_TZFILE=$ORACLE_HOME/oracore/zoneinfo/timezone_40.datAjuste o número para corresponder à versão disponível em sua instalação.
-
Repita a entrega:
sqlplus / as sysdba SQL> DROP USER RDSADMIN CASCADE;
Problemas de migração entre RUs (diferentes atualizações de versão)
Causa: a instância do EC2 de destino tem uma atualização de versão (RU) Oracle ou patches únicos diferentes do que a instância do RDS Custom de origem, causando erros de compatibilidade durante ou após a migração.
Erros comuns:
-
ORA-00600 Erros internos durante a aplicação de redo (Data Guard)
-
ORA-39700 O banco de dados deve ser aberto com a opção
UPGRADE -
Inconsistências do dicionário após a migração
-
Objetos inválidos em
DBA_REGISTRYouDBA_OBJECTS
Solução:
Prática recomendada - Combine exatamente as versões do RU e os patches únicos:
-
Verifique a versão exata da RU na origem e no destino:
-- On both source and target SQL> SELECT * FROM v$version; SQL> SELECT patch_id, patch_uid, version, action, status, description FROM dba_registry_sqlpatch ORDER BY action_time DESC; -
Verifique o nível do patch de $ORACLE_HOME:
# On both instances $ORACLE_HOME/OPatch/opatch lsinventory -
Se as versões não coincidirem, alinhe-as antes da migração aplicando ou revertendo os patches conforme necessário.
-
Se você precisar continuar com RUs incompatíveis, execute o patch de dados após a migração:
cd $ORACLE_HOME/OPatch ./datapatch -verbose -
Verifique se há objetos inválidos e recompile:
SQL> @?/rdbms/admin/utlrp.sql SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE status = 'INVALID' GROUP BY owner, object_type;
Problemas de conectividade de rede
Causa: grupos de segurança, ACLs de rede ou bloqueio iptables da porta do receptor Oracle.
Solução:
-
Verifique se os grupos de segurança permitem a porta nos dois sentidos
-
Verifique iptables no EC2:
sudo iptables -L INPUT -n -v -
Adicione uma regra, se necessário:
# Insert rule before the REJECT rule (typically position 5) sudo iptables -I INPUT 5 -p tcp --dport 1521 -j ACCEPT # For enhanced security, allow only from specific source IPs sudo iptables -I INPUT 5 -p tcp -s<RDS_Custom_IP>--dport 1521 -j ACCEPT # Save rules permanently sudo service iptables save -
Teste de conectividade:
telnet<EC2_instance_IP>1521 tnsping DB_SOURCE tnsping DB_TARGET
Os PDBs não abrem após a migração (somente multilocatário)
Causa: esse comportamento é esperado. Após a duplicação do RMAN ou a transição do Data Guard, o CDB está aberto, mas os PDBs estão no estado MOUNTED.
Solução:
Abra-os manualmente:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN;
Se um PDB específico não for aberto, verifique se há erros no log de alertas:
tail -100 $ORACLE_BASE/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log
As causas comuns incluem arquivos de dados ausentes ou problemas de mapeamento de caminhos.
Arquivos de dados do PDB não encontrados ou incompatibilidade de caminhos (somente multilocatário)
Causa: a migração não mapeou todos os caminhos de origem de maneira correta, especialmente para arquivos de dados do PDB baseados em OMF.
Solução:
-
Verifique quais arquivos de dados estão faltando:
SQL> SELECT name, status FROM v$datafile WHERE status != 'ONLINE'; -
Se os arquivos foram colocados no diretório errado, renomeie-os no arquivo de controle:
SQL> ALTER DATABASE RENAME FILE '/wrong/path/datafile.dbf' TO '/correct/path/datafile.dbf'; -
Para evitar isso, sempre verifique os caminhos do arquivo de dados de origem com
SELECT con_id, name FROM v$datafile ORDER BY con_id;antes de configurar o arquivo de parâmetro.
Serviços do PDB não registrados no receptor (somente multilocatário)
Causa: o receptor não conhece os serviços do PDB depois de abrir os PDBs.
Solução:
-
Force o registro do serviço:
SQL> ALTER SYSTEM REGISTER; -
Se os serviços ainda não aparecerem, verifique o parâmetro
local_listener:SQL> SHOW PARAMETER local_listener;Ele deve apontar para o endereço correto do receptor. Se necessário, atualize-o:
SQL> ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=<EC2_instance_IP>)(PORT=1521))'; SQL> ALTER SYSTEM REGISTER; -
Verifique com:
lsnrctl services
Os PDBs não abrem automaticamente após a reinicialização do CDB (somente multilocatário)
Causa: o estado de salvamento do PDB não foi configurado.
Solução:
Verifique se o estado de salvamento do PDB foi configurado:
SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;
Se nenhuma linha for retornada, salve o estado:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN; SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE;
O transporte de redo do Data Guard não está funcionando
Causa: problemas de conectividade de rede, configuração incorreta do TNS ou parâmetros FAL não definidos.
Solução:
-
Verifique se o banco de dados em espera está no modo MOUNT:
SQL> SELECT status FROM v$instance; -
Verifique se fal_server e fal_client estão configurados corretamente no banco de dados em espera:
SQL> SHOW PARAMETER fal_server SQL> SHOW PARAMETER fal_client -
Verifique a conectividade de rede:
tnsping ORCL_A # or RDSCDB_A for multitenant -
Verifique se o parâmetro log_archive_dest_2 no banco de dados principal aponta para o banco de dados em espera (se configurado manualmente sem o agente).
O atraso de aplicação do Data Guard está aumentando com vários PDBs (somente multilocatário)
Causa: para CDBs com vários PDBs, a aplicação de redo pode ser mais lenta devido ao volume de alterações em todos os contêineres.
Solução:
-
Verifique a taxa de aplicação:
SQL> SELECT name, value, unit FROM v$dataguard_stats WHERE name IN ('apply rate', 'apply lag'); -
Aumente o paralelismo para a aplicação de redo (requer a licença ativa do Data Guard):
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE PARALLEL 4 DISCONNECT FROM SESSION; -
Verifique se não há restrições de recursos (CPU, E/S) na instância em espera.
O backup do log de arquivamento do RMAN falha com o ORA-19625
Causa: a automação do RDS Custom limpou logs de arquivamento mais antigos do disco, mas o arquivo de controle do RMAN ainda tem registros deles.
Solução:
-
Faça uma verificação cruzada e limpe as entradas de log de arquivamento desatualizadas:
RMAN> CROSSCHECK ARCHIVELOG ALL; RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL; -
Execute novamente apenas o backup do log de arquivamento:
RMAN> RUN { SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; BACKUP AS COMPRESSED BACKUPSET FILESPERSET 50 FORMAT '/rdsdbdata/backup/arch_%U' ARCHIVELOG ALL; }
A queda comum de usuários falha em multilocatário (somente multilocatário)
Causa: usuários comuns (com o prefixo C##) devem ser eliminados com a cláusula CONTAINER=ALL.
Solução:
-- For common users SQL> DROP USER C##RDS_DATAGUARD CASCADE CONTAINER=ALL; -- For non-common users in CDB$ROOT SQL> DROP USER RDSADMIN CASCADE;
Verifique se você está conectado a CDB$ROOT:
SQL> SHOW CON_NAME;
Tarefas pós-migração
Após a migração bem-sucedida, conclua essas tarefas adicionais para garantir que seu banco de dados Oracle autogerenciado no EC2 esteja pronto para produção.
Atualização de strings de conexão da aplicação
Para não CDB:
-
Direcionar seus aplicativos para o novo endpoint da instância do EC2
-
Atualizar as strings de conexão para usar o IP ou o nome do host da instância do EC2
-
Testar minuciosamente todas as funcionalidades do aplicativo
Para multilocatário:
-
Direcionar seus aplicativos para os novos nomes de serviços de PDB da instância do EC2 (por exemplo, ORCLDB ou seus nomes de PDB específicos)
-
Garantir que os aplicativos se conectem ao PDB correto, não ao CDB
-
Atualizar strings de conexão para usar nomes de serviços de PDB
-
Testar todas as funcionalidades do aplicativo para cada PDB
Exemplo de strings de conexão:
# Non-CDB jdbc:oracle:thin:@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) jdbc:oracle:thin:@<EC2_IP>:1521/ORCLDB
Configurar a estratégia de backup
Configure uma estratégia abrangente de backup para seu banco de dados autogerenciado:
Backups do RMAN:
-
Configurar scripts de backup automatizados do RMAN para backups completos, incrementais e de log de arquivamento
-
Configurar políticas de retenção de backup com base em seus objetivos de ponto de recuperação (RPO)
-
Armazenar backups no Amazon S3 para maior durabilidade e economia
-
Testar regularmente os procedimentos de restauração de backup
AWS Backup:
-
Usar o AWS Backup
para instantâneos de volume do EBS -
Configurar programações de backup e políticas de retenção
-
Ativar cópias de backup entre regiões para recuperação de desastres
Para multilocatário:
-
Os backups do RMAN do CDB incluem automaticamente todos os PDBs
-
Também é possível fazer backup de PDBs individuais, se necessário
-
Considere programações de backup específicas do PDB com base nos requisitos dos negócios
Exemplo de script de backup do RMAN:
#!/bin/bash export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH rman target / << EOF run { backup as compressed backupset database plus archivelog; delete noprompt obsolete; } exit; EOF
Configurar o monitoramento
Implemente um monitoramento abrangente para seu banco de dados Oracle hospedado no EC2:
Amazon CloudWatch
-
Configurar métricas do CloudWatch para integridade da instância do EC2, uso de disco e métricas personalizadas do Oracle
-
Criar alarmes do CloudWatch para limites críticos
-
Usar o CloudWatch Logs para monitorar o log de alertas do banco de dados
Oracle Enterprise Manager (OEM):
-
Se disponível, configurar o OEM para monitoramento de banco de dados
-
Configurar o monitoramento e o diagnóstico de desempenho
-
Configurar alertas automatizados para eventos críticos
Ferramentas de terceiros:
-
Considerar ferramentas como Datadog, New Relic ou Prometheus para monitoramento de banco de dados
-
Integrar-se à sua infraestrutura de monitoramento existente
Principais métricas a serem monitoradas:
-
Uso de espaço de tabela
-
Espaço de log do arquivo
-
Objetos inválidos
-
Contagens de sessões
-
Eventos de espera
-
Utilização de CPU e memória
-
Performance de E/S
Para multilocatário:
-
Monitorar métricas no nível do CDB e no nível do PDB
-
Configurar alertas para o uso de recursos e cotas do PDB
-
Acompanhar métricas de desempenho específicas do PDB
Configurar grupos de segurança e ACLs de rede
Revise e reforce a segurança da instância do EC2:
Grupos de segurança:
-
Restringir o acesso às portas do banco de dados somente aos servidores de aplicativos autorizados e aos bastion hosts
-
Remover todas as regras excessivamente permissivas criadas durante a migração
-
Documentar as regras do grupo de segurança e as finalidades
ACLs de rede:
-
Configurar ACLs de rede da VPC para camadas adicionais de segurança
-
Implementar uma estratégia de segurança completa
Acesso a SSH:
-
Limitar o acesso a SSH a intervalos de IP específicos ou usar o AWS Systems Manager Session Manager
-
Desativar a autenticação por senha e usar somente a autenticação baseada em chave
-
Implementar autenticação multifator (MFA) para acesso privilegiado
Criptografia:
-
Habilitar a criptografia em repouso para volumes do EBS
-
Ativar a criptografia em trânsito para conexões de banco de dados usando o Oracle Native Network Encryption ou TLS
-
Alternar chaves de criptografia regularmente
Implementar alta disponibilidade
Se o workload exigir alta disponibilidade, implemente:
Oracle Data Guard:
-
Configurar um novo banco de dados em espera em outra instância do EC2 para recuperação de desastres
-
Para multilocatário, o Data Guard protege todo o CDB, incluindo todos os PDBs
-
O modo de espera pode estar em uma zona de disponibilidade ou região diferente
-
Implementar mecanismos de failover automatizados usando scripts ou ferramentas de terceiros
Implantação Multi-AZ da AWS:
-
Implementar instâncias em espera em Zonas de Disponibilidade diferentes
-
Usar o Amazon Route 53 para failover de DNS
-
Implementar o pool de conexões no nível do aplicativo com suporte a failover
Backup e recuperação:
-
Manter backups regulares com procedimentos de restauração testados
-
Documentar objetivos de tempo de recuperação (RTO) e objetivos de ponto de recuperação (RPO)
-
Realizar exercícios regulares de recuperação de desastres
Realizar testes completos de aplicativos
Antes de desativar a instância do RDS Custom:
Teste funcional:
-
Verificar se todos os recursos do aplicativo funcionam corretamente
-
Testar todas as funcionalidades dependentes do banco de dados
-
Validar a integridade e a consistência dos dados
Testes de desempenho:
-
Comparar as métricas de desempenho com a linha de base do RDS Custom
-
Identificar e resolver regressões de desempenho
-
Otimizar consultas e índices conforme necessário
Testes de carga:
-
Testar o banco de dados com as cargas de pico esperadas
-
Verificar se a utilização dos recursos permanece dentro dos limites aceitáveis
-
Identificar e resolver gargalos
Teste de failover (se HA estiver configurado):
-
Testar cenários de failover
-
Verificar a lógica de reconexão do aplicativo
-
Medir o RTO e o RPO reais
Teste de backup e restauração:
-
Verificar se os procedimentos de backup e restauração funcionam corretamente
-
Testar a recuperação para um ponto no tempo
-
Validar a integridade do backup
Para multilocatário:
-
Testar cada PDB de forma independente
-
Verificar o isolamento do PDB e a alocação de recursos
-
Testar operações específicas do PDB (clonar, desconectar/conectar etc.)
Desativar instância do RDS Custom
Após um período de validação bem-sucedido (normalmente de 1 a 2 semanas):
-
Backup final: faça um backup final da instância do RDS Custom para fins de arquivamento
# Create final snapshot aws rds create-db-snapshot \ --db-instance-identifier my-custom-instance \ --db-snapshot-identifier my-custom-instance-final-snapshot \ --region us-east-1 -
Documente a migração: atualize os runbooks e a documentação com a nova configuração do EC2
-
Exclua a instância do RDS Custom: use o console ou a CLI da AWS para excluir a instância
# Delete RDS Custom instance without final snapshot (if already created above) aws rds delete-db-instance \ --db-instance-identifier my-custom-instance \ --skip-final-snapshot \ --region us-east-1 # Or create a final snapshot before deletion aws rds delete-db-instance \ --db-instance-identifier my-custom-instance \ --final-db-snapshot-identifier my-custom-instance-final-snapshot \ --region us-east-1 -
Apague os recursos: remova instantâneos, grupos de parâmetros e grupos de opções associados, se não forem mais necessários
-
Atualize a documentação: garanta que toda a documentação operacional reflita a nova arquitetura baseada em EC2
Comparação: duplicação ativa do RMAN x Oracle Data Guard
A tabela a seguir resume as principais diferenças entre as duas opções de migração:
|
Aspecto |
Duplicação ativa do RMAN |
Oracle Data Guard |
|---|---|---|
|
Disponibilidade do banco de dados de origem |
Online durante toda a duplicação | Online durante todo o processo |
|
Tempo de inatividade |
Minutos (somente a substituição final) | Segundos em minutos (transição) |
|
Complexidade |
Menor | Mais alto |
|
Duração da migração |
Operação de duplicação única | Configuração inicial + sincronização contínua |
|
Sincronização contínua |
Não | Sim |
|
Capacidade de fallback |
Manual (mantenha a origem funcionando) | Integrado (automático) |
|
Teste antes da substituição |
Limitado (teste após duplicação) | Teste completo possível (o modo de espera pode ser testado) |
|
Largura de banda de rede |
Alto durante a duplicação | Moderado (contínuo) |
|
Impacto do banco de dados de origem |
Mínimo (operações de leitura) | Mínimo (reenvio) |
|
Melhor para |
A maioria das migrações, substituição simples | É necessário um tempo de inatividade de missão crítica quase zero |
|
Suporte não CDB |
Sim | Sim |
|
Suporte multilocatário |
Sim (CDB inteiro) | Sim (CDB inteiro) |
|
Estado do PDB pós-migração |
CDB aberto, PDBs MONTADOS | CDB aberto, PDBs MONTADOS |
|
Requer RMAN |
Sim | Sim (para backup inicial na abordagem baseada em backup) |
|
Requer o Data Guard |
Não | Sim |
|
Nível de habilidade necessário |
Intermediário | Advanced (Avançado) |
|
Processo de substituição |
Redirecionar aplicativos para o EC2 | Comando de transição + redirecionar aplicativos |
Comparação: migração de não CDB x multilocatário
A tabela a seguir resume as principais diferenças entre a migração de bancos de dados não CDB e multilocatário:
|
Aspecto |
Migração de não CDB |
Migração de multilocatário (CDB com PDBs) |
|---|---|---|
|
Tipo de banco de dados |
Instância única de não CDB (por exemplo, ORCL) |
CDB (origem: RDSCDB, destino: ORCL) com CDB$ROOT + PDB$SEED + um ou mais PDBs |
|
Escopo da migração |
Banco de dados único | CDB inteiro (todos os PDBs incluídos automaticamente) |
|
Escopo de duplicação do RMAN |
Duplica um banco de dados único | Duplica o CDB inteiro (todos os contêineres) |
|
Escopo do Data Guard |
Protege um banco de dados único | Protege o CDB inteiro (todos os PDBs incluídos automaticamente) |
|
Arquivo de parâmetro |
Parâmetros de inicialização padrão | Deve incluir enable_pluggable_database = TRUE |
|
Estado do banco de dados pós-migração |
O banco de dados é aberto no modo READ WRITE | O CDB abre no modo READ WRITE; os PDBs permanecem no estado MOUNTED |
|
Abertura do PDB |
N/D | É necessário abrir manualmente todos os PDBs com ALTER PLUGGABLE DATABASE ALL OPEN |
|
Abertura automática do PDB na inicialização |
N/D | É necessário configurar o estado de salvamento do PDB ou o gatilho de inicialização |
|
Validação |
Verificações de banco de dados único | Deve validar o CDB e cada PDB individualmente |
|
Limpeza específica do RDS |
Eliminar usuários/objetos de um banco de dados único | Eliminar usuários comuns de CDB$ROOT (em cascata para PDBs); manipular usuários de C## |
|
Configuração do TNS/receptor |
Serviço único para banco de dados | Serviço do CDB + serviços do PDB individuais registrados dinamicamente |
|
Strings de conexão de aplicativo |
Conectar-se ao banco de dados único | Conectar-se a serviços do PDB individuais (não CDB) |
|
Estratégia de backup |
Backup de banco de dados único | Fazer backup de CDB inteiro (inclui todos os PDBs) ou PDBs individuais |
|
Gerenciamento de recursos |
Gerenciamento de recursos no nível do banco de dados | Gerenciamento de recursos no nível do CDB e do PDB com o Resource Manager |
|
Complexidade |
Menor complexidade | Maior complexidade devido a vários contêineres e caminhos OMF |
Práticas recomendadas e orientações
Esta seção fornece as práticas recomendadas abrangentes para uma migração bem-sucedida do RDS Custom para Oracle para o EC2.
Planejamento pré-migração
-
Faça uma avaliação completa:
Antes de iniciar a migração, faça uma avaliação abrangente do seu ambiente:
-
Inventário de banco de dados: documente todos os bancos de dados, tamanhos, arquiteturas (não CDB x multilocatário) e dependências
-
Dependências de aplicativo: identifique todos os aplicativos que se conectam ao banco de dados e os métodos de conexão
-
Linha de base de desempenho: capture métricas de desempenho (CPU, memória, E/S, rede) para comparação após a migração
-
Requisitos de backup e recuperação: documente o RPO (objetivo de ponto de recuperação) e o RTO (objetivo de tempo de recuperação)
-
Requisitos de conformidade: identifique os requisitos normativos ou de conformidade que possam afetar a migração
-
-
Escolha o tipo certo de instância do EC2:
Selecione um tipo de instância do EC2 com base nas características do workload:
Tipo de workload
Família de instâncias recomendada
Características principais
OLTP geral M6i, M6a, M7i Computação, memória e rede balanceadas Consumo intensivo de memória R6i, R6a, R7i, X2idn Alta relação memória/CPU Uso intenso de computação C6i, C6a, C7i Alto desempenho da CPU Consumo intensivo de E/S I4i, Im4gn Alto armazenamento SSD NVMe local Workloads mistos M5, M5a, M5n Desempenho equilibrado e econômico Diretrizes de dimensionamento de instâncias:
-
Começar com a mesma classe da instância do RDS Custom
-
Monitorar a utilização de recursos durante uma migração de teste
-
Usar o AWS Compute Optimizer para obter recomendações
-
Planejar 20% a 30% de espaço livre para crescimento e picos de carga
-
-
Projete sua arquitetura de armazenamento:
Tipos de volume do EBS:
Tipo de volume
Caso de uso
desempenho
Custo
gp3 Uso geral, a maioria dos workloads Até 16.000 IOPS, 1.000 MB/s Baixo io2 Block Express Missão crítica, alto desempenho Até 256.000 IOPS, 4.000 MB/s Alto Io1 Bancos de dados de alta performance Até 64.000 IOPS, 1.000 MB/s Médio-alto gp2 Finalidade do legado Até 16.000 IOPS Baixo Recomendações de layout de armazenamento:
# Recommended layout for production databases /u01/app/oracle # Oracle software (50-100 GB, gp3) /u01/app/oracle/oradata # Data files (sized for database, gp3 or io2) /u01/app/oracle/arch # Archive logs (separate volume, gp3) /u01/app/oracle/backup # Backups (separate volume, gp3, can be detached post-migration)Benefícios de volumes separados:
-
Alocação de IOPS independente
-
Gerenciamento de capacidade mais fácil
-
Estratégias simplificadas de backup e snapshot
-
Melhor isolamento de desempenho
-
-
Estabeleça um plano de reversão:
Sempre tenha uma estratégia de reversão:
-
Manter a instância do RDS Custom em execução durante o período de validação (recomenda-se de 1 a 2 semanas)
-
Manter backups regulares da origem e do destino
-
Documentar procedimentos de reversão, incluindo alterações de string de conexão
-
Testar o processo de reversão em um ambiente que não seja de produção
-
Definir critérios de reversão (degradação do desempenho, inconsistência de dados, erros de aplicativos)
-
Práticas recomendadas para execução da migração
-
Cronometre sua migração:
Escolha a janela de tempo ideal:
-
Períodos de baixo tráfego: fins de semana, feriados ou horários fora de pico
-
Janelas de manutenção: alinhe-se com a manutenção programada, se possível
-
Evite o final do mês/final do trimestre: esses períodos geralmente têm altos volumes de transações
-
Considere os fusos horários: para aplicativos globais, escolha um horário que minimize o impacto em todas as regiões
-
-
Plano de comunicação:
Estabeleça uma comunicação clara:
-
Notificação às partes interessadas: informe todas as partes interessadas com pelo menos 2 semanas de antecedência
-
Equipes de aplicativos: coordene com as equipes de aplicativos as atualizações da string de conexão
-
Atualizações de status: forneça atualizações regulares durante a migração
-
Caminho de escalação: defina procedimentos claros de escalação de problemas
-
Comunicação pós-migração: confirme a conclusão bem-sucedida e quaisquer ações de acompanhamento
-
-
Pontos de verificação de validação:
Implemente a validação em cada estágio:
Validação pré-migração:
-- Capture object counts SQL> SELECT object_type, COUNT(*) FROM dba_objects GROUP BY object_type ORDER BY object_type; -- Capture tablespace usage SQL> SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024/1024, 2) AS size_gb FROM dba_data_files GROUP BY tablespace_name; -- Capture user counts SQL> SELECT COUNT(*) FROM dba_users; -- For multitenant, capture PDB information SQL> SELECT con_id, name, open_mode FROM v$pdbs;Validação pós-migração:
-- Verify object counts match SQL> SELECT object_type, COUNT(*) FROM dba_objects GROUP BY object_type ORDER BY object_type; -- Verify no invalid objects SQL> SELECT owner, object_type, object_name FROM dba_objects WHERE status = 'INVALID'; -- Verify tablespace usage SQL> SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024/1024, 2) AS size_gb FROM dba_data_files GROUP BY tablespace_name; -- Verify database size matches SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM dba_data_files; -- For multitenant, verify all PDBs are open SQL> SELECT con_id, name, open_mode FROM v$pdbs; -
Validação de desempenho:
Compare as métricas de desempenho antes e depois da migração:
-- Capture AWR snapshots before migration (on RDS Custom) SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT; -- After migration (on EC2), compare metrics SQL> SELECT snap_id, begin_interval_time, end_interval_time FROM dba_hist_snapshot ORDER BY snap_id DESC FETCH FIRST 10 ROWS ONLY; -- Generate AWR report for comparison SQL> @?/rdbms/admin/awrrpt.sqlPrincipais métricas a serem comparadas:
-
Média de sessões ativas
-
Tempo do banco de dados por transação
-
Leituras físicas por segundo
-
Leituras lógicas por segundo
-
Tamanho de redo por segundo
-
Chamadas de usuário por segundo
-
Tempo de análise por execução
-
Otimização pós-migração
-
Após a migração, otimize o desempenho do banco de dados:
-
Ajuste de desempenho do banco de dados:
Colete estatísticas:
-- Gather dictionary statistics SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS; -- Gather fixed object statistics SQL> EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS; -- Gather schema statistics SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCHEMA_NAME', cascade=>TRUE); -- For multitenant, gather statistics for each PDB SQL> ALTER SESSION SET CONTAINER = PDB_NAME; SQL> EXEC DBMS_STATS.GATHER_DATABASE_STATS(cascade=>TRUE);Otimize os parâmetros de memória:
-- Enable Automatic Memory Management (if not already enabled) SQL> ALTER SYSTEM SET MEMORY_TARGET = 24G SCOPE=SPFILE; SQL> ALTER SYSTEM SET MEMORY_MAX_TARGET = 28G SCOPE=SPFILE; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP; -- Or use Automatic Shared Memory Management SQL> ALTER SYSTEM SET SGA_TARGET = 16G SCOPE=SPFILE; SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 8G SCOPE=SPFILE;Configure o cache de resultados:
-- Enable result cache for frequently accessed queries SQL> ALTER SYSTEM SET RESULT_CACHE_MAX_SIZE = 1G; SQL> ALTER SYSTEM SET RESULT_CACHE_MODE = MANUAL; -
Otimização de armazenamento:
Habilite a compactação:
-- For tables with infrequent updates ALTER TABLE large_table MOVE COMPRESS FOR OLTP; -- For archive/historical data ALTER TABLE archive_table MOVE COMPRESS FOR ARCHIVE HIGH; -- Rebuild indexes after compression ALTER INDEX index_name REBUILD ONLINE;Implemente o particionamento:
-- For large tables, consider partitioning -- Example: Range partitioning by date CREATE TABLE sales_partitioned ( sale_id NUMBER, sale_date DATE, amount NUMBER ) PARTITION BY RANGE (sale_date) ( PARTITION sales_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')), PARTITION sales_2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD')), PARTITION sales_2026 VALUES LESS THAN (MAXVALUE) ); -
Implemente monitoramento e alertas:
Métricas personalizadas do CloudWatch:
Crie um script para publicar métricas do Oracle no CloudWatch:
#!/bin/bash # publish_oracle_metrics.sh INSTANCE_ID=$(ec2-metadata --instance-id | cut -d " " -f 2) REGION=$(ec2-metadata --availability-zone | cut -d " " -f 2 | sed 's/[a-z]$//') # Get tablespace usage TABLESPACE_USAGE=$(sqlplus -s / as sysdba << EOF SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF SELECT ROUND(MAX(percent_used), 2) FROM ( SELECT tablespace_name, ROUND((used_space/tablespace_size)*100, 2) AS percent_used FROM dba_tablespace_usage_metrics ); EXIT; EOF ) # Publish to CloudWatch aws cloudwatch put-metric-data \ --region $REGION \ --namespace "Oracle/Database" \ --metric-name "TablespaceUsage" \ --value $TABLESPACE_USAGE \ --unit Percent \ --dimensions InstanceId=$INSTANCE_ID,Database=ORCL # Add more metrics as needed (sessions, wait events, etc.)Defina alarmes do CloudWatch:
# Create alarm for high tablespace usage aws cloudwatch put-metric-alarm \ --alarm-name oracle-high-tablespace-usage \ --alarm-description "Alert when tablespace usage exceeds 85%" \ --metric-name TablespaceUsage \ --namespace Oracle/Database \ --statistic Maximum \ --period 300 \ --evaluation-periods 2 \ --threshold 85 \ --comparison-operator GreaterThanThreshold \ --alarm-actions arn:aws:sns:region:account-id:topic-name -
Fortalecimento da segurança:
Segurança do banco de dados:
-- Enforce password complexity ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90 PASSWORD_GRACE_TIME 7 PASSWORD_REUSE_TIME 365 PASSWORD_REUSE_MAX 5 FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1; -- Enable audit ALTER SYSTEM SET AUDIT_TRAIL = DB, EXTENDED SCOPE=SPFILE; SHUTDOWN IMMEDIATE; STARTUP; -- Audit critical operations AUDIT ALL ON SYS.AUD$ BY ACCESS; AUDIT CREATE USER BY ACCESS; AUDIT DROP USER BY ACCESS; AUDIT ALTER USER BY ACCESS; AUDIT CREATE SESSION BY ACCESS WHENEVER NOT SUCCESSFUL;Segurança de rede:
# Restrict SSH access sudo vi /etc/ssh/sshd_config # Set: PermitRootLogin no # Set: PasswordAuthentication no # Configure firewall sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port port="1521" protocol="tcp" accept' sudo firewall-cmd --reload # Enable Oracle Native Network Encryption # Edit sqlnet.ora SQLNET.ENCRYPTION_SERVER = REQUIRED SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128) SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256, SHA384, SHA512)
-
-
Estratégia de backup e recuperação:
Implemente uma estratégia abrangente de backup:
#!/bin/bash # rman_backup.sh - Daily incremental backup script export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH # Backup to local disk rman target / << EOF RUN { ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/u01/app/oracle/backup/inc_%U'; BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG; DELETE NOPROMPT OBSOLETE; CROSSCHECK BACKUP; DELETE NOPROMPT EXPIRED BACKUP; } EXIT; EOF # Copy backups to S3 aws s3 sync /u01/app/oracle/backup/ s3://my-oracle-backups/$(date +%Y%m%d)/ \ --storage-class STANDARD_IA \ --exclude "*" \ --include "inc_*" \ --include "arch_*" # Clean up local backups older than 7 days find /u01/app/oracle/backup/ -name "inc_*" -mtime +7 -delete find /u01/app/oracle/backup/ -name "arch_*" -mtime +7 -deleteAgende backups com o cron:
# Edit crontab crontab -e # Add backup schedule # Full backup on Sunday at 2 AM 0 2 * * 0 /home/oracle/scripts/rman_full_backup.sh >> /home/oracle/logs/backup_full.log 2>&1 # Incremental backup Monday-Saturday at 2 AM 0 2 * * 1-6 /home/oracle/scripts/rman_incremental_backup.sh >> /home/oracle/logs/backup_inc.log 2>&1 # Archive log backup every 4 hours 0 */4 * * * /home/oracle/scripts/rman_archivelog_backup.sh >> /home/oracle/logs/backup_arch.log 2>&1
Otimização de custos
1. Dimensionamento correto:
Após a migração, monitore e otimize os custos:
-
Usar o AWS Cost Explorer para analisar os custos do EC2 e do EBS
-
Habilitar o AWS Compute Optimizer para recomendações de tipo de instância
-
Analisar as métricas do CloudWatch para identificar recursos subutilizados
-
Considerar as instâncias reservadas ou os Savings Plans para workloads previsíveis
2. Otimização de armazenamento:
-
Implementar políticas de ciclo de vida para backups do S3 (mude para o Glacier após 30 dias)
-
Excluir regularmente snapshots não utilizados do EBS
-
Usar gp3 em vez de gp2 para reduzir custos com o mesmo desempenho
-
Separar e excluir volumes de backup após a conclusão da migração
3. Automação do:
-
Automatizar início/parada de bancos de dados que não são de produção fora do horário comercial
-
Usar o AWS Systems Manager para gerenciamento de patches
-
Implementar o ajuste de escala automático para réplicas de leitura se estiver usando o Data Guard
Conclusão
Essa orientação prescritiva forneceu estratégias detalhadas de migração para mover seus bancos de dados Oracle do Amazon RDS Custom para Oracle para bancos de dados Oracle autogerenciados no Amazon EC2. Com a suspensão do serviço do RDS Custom para Oracle em vigor em 31 de março de 2027, é importante planejar e executar sua migração com bastante antecedência.
Principais conclusões
Opções de migração:
-
Duplicação ativa do RMAN: ideal para a maioria das migrações, mantém o banco de dados de origem online durante a duplicação, requer apenas uma breve janela de substituição para o redirecionamento do aplicativo
-
Oracle Data Guard: ideal para workloads de missão crítica que exigem tempo de inatividade quase zero, fornecendo sincronização contínua e capacidade de transição integrada
Suporte compatível:
-
As duas opções de migração oferecem suporte a arquiteturas de não CDB (instância única tradicional) e multilocatário (CDB com PDBs)
-
Para multilocatário, os dois métodos lidam automaticamente com o CDB inteiro, incluindo todos os PDBs, em uma única operação
-
Os PDBs exigem abertura manual e configuração de abertura automática após a migração
Fatores críticos de sucesso:
-
Configuração de rede e conectividade adequadas entre origem e destino
-
Compatibilidade exata da versão (versão principal, versão secundária, atualização de lançamento e patches únicos)
-
Largura de banda da rede adequada para transferência de dados (RMAN) ou reenvio (Data Guard)
-
Compreensão de que a duplicação ativa do RMAN mantém a origem online - é necessária apenas uma breve substituição
-
Teste e validação completos antes de desativar a origem
-
Tarefas abrangentes pós-migração, incluindo backup, monitoramento e configuração de segurança
Próximas etapas:
-
Avaliar a arquitetura de banco de dados (não CDB ou multilocatário)
-
Escolher a opção de migração apropriada com base em seus requisitos de complexidade e tolerância ao tempo de inatividade
-
Concluir todas as etapas de pré-requisito, incluindo a configuração da instância do EC2 e a configuração da rede
-
Seguir as etapas detalhadas de migração para a opção escolhida
-
Realizar validação e testes completos
-
Concluir tarefas pós-migração para garantir a prontidão para a produção
-
Desativar a instância do RDS Custom após a validação bem-sucedida
Recursos adicionais
Suporte a
Para obter ajuda com sua migração:
-
Entre em contato com o AWS Support por meio do AWS Management Console
-
Consulte o suporte da Oracle para perguntas específicas do banco de dados
Informações do documento
Última atualização: março de 2026
Colaboradores:
-
Sharath Chandra Kampili, arquiteto especialista em soluções de banco de dados, Amazon Web Services
-
Ibrahim Emara, arquiteto especialista em soluções de banco de dados, Amazon Web Services
-
Vetrivel Subramani, arquiteto especialista em soluções de banco de dados, Amazon Web Services