DBAtlas · Atlas de operações de banco de dados

Oracle Data Pump: export / import, migração, refresh de schema e transportable

OracleNível: IntermediárioDuração: 30–90 min (conforme o volume de dados)

Export e import com expdp/impdp no nível de tabela, schema, tablespace ou full, migração entre dois bancos de dados (arquivo de dump + scp + checksum ou NETWORK_LINK) e extração de DDL a partir de um dump (SQLFILE). Inclui a preparação de directory, usuário e parfile, consistência, paralelismo, remap, monitoramento e limpeza de jobs interrompidos. No RAC: conexão via SCAN + serviço, CLUSTER=YES com directory compartilhado ou CLUSTER=NO com disco local; opcionalmente, agendamento do export com script usando wallet e /etc/cron.d. Cenários: refresh de schema de produção para teste (DROP USER … CASCADE ou TABLE_EXISTS_ACTION=REPLACE, preservando senha/profile e privilégios), transportable tablespace (mesma plataforma ou plataforma e endian diferentes, RMAN CONVERT), full transportable (11g/12c → PDB 19c), criptografia e compressão do dump, desempenho em migrações grandes e gerenciamento de um job interrompido com ATTACH/START_JOB/KILL_JOB.

Topologia: 1 banco de dados (instância única, Oracle Restart ou RAC); origem + destino em uma migração

Cenários

  • Export: gerar um arquivo de dump a partir do banco de dados — Uma tabela, um schema, um tablespace ou o banco de dados inteiro é gravado em um arquivo de dump (expdp). O banco de dados permanece aberto e a aplicação continua funcionando. É uma cópia lógica: não substitui um backup RMAN (recuperação point-in-time e recuperação completa exigem RMAN).
  • Import: carregar um arquivo de dump no banco de dados — Um arquivo de dump gerado anteriormente é carregado com impdp; nomes de schema, tablespace e tabela podem ser remapeados. O destino permanece aberto; a aplicação que usa os objetos carregados deve ser parada.
  • Migração: transferir dados do banco de origem para o destino — Export → cópia de arquivos → import, ou diretamente com NETWORK_LINK, sem arquivo de dump. Escolha este cartão se o schema ainda não existir no destino (carga inicial); se o mesmo schema já existir no destino e for substituído pela cópia de produção, escolha o cartão "Refresh de schema". A origem permanece aberta.
  • Extrair somente o DDL de um arquivo de dump (SQLFILE) — Nada é carregado; os comandos CREATE dos objetos são gravados em um arquivo .sql. O banco de dados não é alterado.
  • Refresh de schema de produção para teste — Um schema que já existe em teste/UAT é substituído pela versão atual de produção: backup do schema de destino, encerramento das sessões, DROP USER … CASCADE ou TABLE_EXISTS_ACTION=REPLACE, preservando senha/profile e privilégios. A origem permanece aberta; o schema de destino fica indisponível durante o job.
  • Mover um tablespace copiando datafiles (transportable tablespace) — Tablespaces grandes (centenas de GB ou mais) são movidos copiando datafiles, e não linha a linha; mesma plataforma ou plataforma/endian diferente (RMAN CONVERT). Os character sets devem ser iguais nos dois lados. Na origem, os tablespaces ficam READ ONLY durante o job (interrupção de gravação).
  • Mover o banco de dados inteiro: full transportable (11g/12c → 19c, non-CDB → PDB) — Com FULL=Y TRANSPORTABLE=ALWAYS, os tablespaces de usuário são movidos para uma nova PDB como datafiles e todo o resto (usuários, PL/SQL, privilégios) como metadados; VERSION=12 em uma origem 11.2.0.3+. Na origem, todos os tablespaces de usuário ficam READ ONLY durante o job.
  • Job do Data Pump interrompido / suspenso: monitorar, retomar, encerrar — Um job do expdp/impdp está suspenso (resumable wait), parado ou interrompido; você quer se conectar a ele com ATTACH e retomá-lo, encerrá-lo com KILL_JOB ou limpar uma master table órfã. O banco de dados permanece aberto.

Antes de começar

  • Os comandos rodam no servidor de banco de dados com o usuário oracle; o login profile desse usuário define as variáveis ORACLE_HOME, ORACLE_SID e PATH, e expdp/impdp estão no path. expdp, impdp e sqlplus ficam em $ORACLE_HOME/bin; se não estiver no PATH, você recebe bash: expdp: command not found (. oraenv ou o caminho completo: $ORACLE_HOME/bin/expdp).… No RAC, o ORACLE_SID de cada nó é o nome da instância daquele nó (ex.: …………… no nó 1).…
  • Banco de dados 12.2 ou superior (19c, 21c, 23ai). Os parâmetros LOGTIME, ENCRYPTION_PWD_PROMPT e DISABLE_ARCHIVE_LOGGING usados neste guia surgiram no 12c. A lista de parâmetros é diferente no 10g/11g; arquivos .dmp do Oracle 9i e anteriores só abrem com o imp antigo.… Full transportable: o export é suportado a partir do 11.2.0.3 (com VERSION=12 no 11g) e o import a partir do 12.1; o 11g não tem LOGTIME/METRICS, então nesse caso o guia não os usa.…
  • O listener está em execução e o serviço … está registrado…; no destino, o serviço … está registrado….
  • O listener está em execução no servidor de destino e o serviço … está registrado.
  • Há espaço livre suficiente em …… (origem) e … (destino)…: no export, o equivalente ao tamanho estimado (com COMPRESSION=ALL, geralmente de 3 a 5 vezes menos); no import, os arquivos de dump já devem estar nesse diretório. O diretório não deve ficar no mesmo disco dos datafiles e da FRA.
  • Para não receber ORA-01555 em um export consistente (FLASHBACK_TIME/SCN) longo, o UNDO_RETENTION é maior que a duração do export (ex.: pelo menos 10800 s para um export de 3 horas) e o undo tablespace é grande o suficiente para esse período (autoextend).
  • O import gera muito redo: se o banco estiver em modo ARCHIVELOG, deve haver espaço na FRA (ou no destino de archive). DISABLE_ARCHIVE_LOGGING não tem efeito com FORCE LOGGING ativado (Data Guard).
  • O banco de dados de destino tem um backup RMAN atual e o método de fallback está definido (um import não pode ser desfeito: um import no schema errado ou com TRUNCATE/REPLACE só é revertido a partir de backup ou com Flashback). Em um ambiente crítico, pode-se criar um guaranteed restore point antes do import (exige ARCHIVELOG + FRA).
  • A janela de manutenção está planejada: …na origem, os tablespaces transportados ficam READ ONLY durante o export e a cópia dos datafiles (aplicações que gravam recebem erro, ORA-00372); no destino, os novos objetos não devem ser usados durante o plug-in…as aplicações que usam os objetos de destino devem ser paradas durante o import, ou deve-se confirmar que não serão afetadas…como nenhuma opção de consistência foi selecionada, as gravações da aplicação devem ser interrompidas durante o export….
  • O usuário oracle na origem consegue fazer SSH/SCP para o destino sem senha (por chave), ou os arquivos serão transferidos de outra forma (armazenamento compartilhado, object storage).
  • O servidor de destino alcança a porta do listener da origem (…:…) (firewall liberado).
  • Verificação de licença: …COMPRESSION=ALL (e DATA_ONLY) exige a licença Advanced Compression Option. ……A criptografia do dump (ENCRYPTION, ENCRYPTION_PASSWORD/ENCRYPTION_PWD_PROMPT) exige a licença Advanced Security Option na Enterprise Edition. …Se você não tiver a licença, desative essas opções.

Fases do guia

  • Preparação: ambiente, usuário e directory — Verificar o ambiente e o serviço do listener · Verificar o ambiente e o serviço do listener (origem) · Verificar o ambiente e o serviço do listener (destino) · Verificar o SCAN e as instâncias do serviço · Verificar a release, o character set e o modo de log · Verificar a release, o character set e o modo de log (origem) …
  • 1. Diagnóstico: este é o destino certo? (refresh de schema) — Registrar o estado do schema de destino (destino) · Registrar o estado do schema de origem (origem)
  • 2. Rede de segurança: backup do schema de destino e da definição do usuário — Salvar a definição e os privilégios do usuário de teste (destino) · Fazer backup do schema de destino (destino)
  • 1. Diagnóstico: pré-requisitos do transportable — Verificar a plataforma, o character set e o conjunto de tablespaces na origem (origem) · Verificar a plataforma, o character set e conflitos de nome no destino (destino)
  • 2. Rede de segurança e preparação — Registrar a lista de datafiles e o estado READ ONLY atual (origem) · Preparar o diretório dos datafiles no destino (destino)
  • 3. Execução: READ ONLY, export de metadados e cópia na origem — Colocar os tablespaces em READ ONLY (origem) · Gravar o parfile do export transportable (origem) · Executar o export de metadados (origem) · Copiar os datafiles e o dump para o destino (origem)
  • 4. Execução: plug-in no destino — Verificar os arquivos copiados (destino) · Converter os datafiles para esta plataforma: RMAN CONVERT (destino) · Criar os schemas donos dos objetos (destino) · Criar o parfile do import de plug-in (destino) · Executar o import de plug-in (destino) · Colocar os tablespaces em modo de gravação (destino)
  • 5. Verificação e passos seguintes — Exportar os objetos fora dos tablespaces (origem) · Carregar os objetos fora dos tablespaces (destino) · Compilar e verificar os objetos inválidos (destino) · Voltar os tablespaces para READ WRITE na origem (origem)
  • Export — Analisar objetos grandes, LOBs e partições · Estimar o tamanho (ESTIMATE_ONLY) · Estimar o tamanho (ESTIMATE_ONLY) (origem) · Gravar o parfile do export · Gravar o parfile do export (origem) · Executar o export …
  • Transferência dos arquivos de dump para o destino — Criar o arquivo de checksum · Copiar os arquivos de dump para o destino · Verificar o checksum no destino
  • Database link (NETWORK_LINK) — Criar o database link no destino
  • 3. Execução: esvaziar o schema de destino — Bloquear o usuário e encerrar as sessões (destino) · Remover o schema e recriar o usuário de teste (destino) · Listar os objetos que não serão atualizados no modo REPLACE (destino)
  • Import — Verificar os arquivos de dump · Verificar os arquivos de dump (destino) · Verificar o espaço e os schemas existentes no destino · Verificar o espaço e os schemas existentes no destino (destino) · Gravar o parfile do import · Gravar o parfile do import (destino) …
  • Após o import: compilação e estatísticas — Compilar os objetos inválidos · Compilar os objetos inválidos (destino) · Coletar estatísticas · Coletar estatísticas (destino)
  • 4. Verificação e passos seguintes (refresh de schema) — Desabilitar os jobs do scheduler vindos de produção (destino) · Reaplicar os privilégios que o schema concede a outros (destino) · Verificar objetos, synonyms e links (destino) · Desbloquear o usuário (destino)
  • SQLFILE: extrair DDL de um dump — Verificar os arquivos de dump · Gravar o parfile do SQLFILE · Gerar o arquivo de DDL · Analisar o arquivo de DDL
  • Agendamento: executar o export periodicamente (cron) — Preparar os diretórios de script, log e TNS… (…)… · Criar o wallet e adicionar a credencial · Copiar o wallet para os outros nós · Gravar o sqlnet.ora (somente para este job)… (…)… · Gravar o tnsnames.ora (somente para este job)… (…)… · Gravar o script de export… (…)… …
  • 1. Diagnóstico: em que estado está o job? — Mostrar o estado, as sessões e o motivo de espera do job · Interpretar o resultado e escolher a ação
  • 2. Execução: retomar o job — Corrigir a causa da parada ou da suspensão · Conectar-se ao job e retomá-lo (ATTACH, START_JOB) · Verificar se o job está rodando
  • 2. Execução: encerrar o job (KILL_JOB) — Conectar-se ao job e encerrá-lo com KILL_JOB · Verificar se o job sumiu
  • 2. Execução: limpar a master table órfã — Remover a master table do job órfão
  • Monitoramento — Monitorar o job em execução · Monitorar o job em execução (origem) · Monitorar o job em execução (destino) · Conectar-se ao job: ATTACH e comandos interativos · Conectar-se ao job: ATTACH e comandos interativos (origem) · Conectar-se ao job: ATTACH e comandos interativos (destino)
  • Limpeza e segurança — Listar jobs interrompidos e master tables · Listar jobs interrompidos e master tables (origem) · Listar jobs interrompidos e master tables (destino) · Encerrar o job com KILL_JOB · Encerrar o job com KILL_JOB (origem) · Encerrar o job com KILL_JOB (destino) …
Abrir o plano passo a passo para o seu ambiente →