Olá amigos DBAs, tudo bem por aí? Hoje vou falar sobre uma atividade em que apoiei um colega DBA. Ele estava com a tarefa de copiar todas as tabelas de um determinado usuário de um banco de dados para outro. A ideia inicial era usar o expdp e impdp. No entanto, nos deparamos com um problema: não havia espaço suficiente no servidor para armazenar os arquivos de exportação. Foi aí que sugeri uma abordagem diferente: usar o impdp direto via DB Link, eliminando a necessidade de criar dumps no meio do caminho, economizando tanto espaço quanto tempo.
Neste post, vou mostrar como fizemos isso de maneira simples e direta, tanto para importar uma tabela específica quanto um schema completo entre dois bancos de dados.
Reforço que há inúmeras outras abordagens para realizar essa tarefa, no entanto, o objetivo aqui é mostrar unicamente a técnica de DB Link com IMPDP.
Pré-requisitos
- DB Link Criado no Banco de Destino: O DB Link é uma ligação entre os dois bancos de dados. Ele precisa ser criado no banco para onde você quer enviar os dados (o destino).
- Permissões de Leitura: O usuário utilizado no DB Link precisa ter permissão para ler os dados no banco de origem.
Aqui vai um exemplo básico de como criar o DB Link:
CREATE DATABASE LINK DB_IMP_TESTE
CONNECT TO apps_spi
IDENTIFIED BY "Senh#255"
USING '(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=192.168.1.50)
(PORT=1522))
(CONNECT_DATA=
(SERVICE_NAME=DBSERVPROD)))';
Todos os comandos são executados no banco de destino. O impdp vai acessar o banco de origem através do DB Link para copiar os dados.
Importando Apenas Uma Tabela com Data Pump via DB Link
Se o objetivo for transferir apenas uma tabela entre os bancos, o DB Link permite fazer isso de maneira simples, sem a necessidade de criar dumps. Aqui está o comando completo para ser executado no servidor destino, usando a tabela DDL_LOG
:
impdp \"/ as sysdba\" tables=APPSPI.DDL_LOG directory=TMPDIR cluster=N parallel=4 network_link=DB_IMP_TESTE remap_table=APPSPI.DDL_LOG:DDL_LOG_NOVO logfile=impdp_ddl_log.log flashback_time=SYSTIMESTAMP

Explicação dos Parâmetros:
- “/ as sysdba”: Executa a importação como sys.
- tables=APPSPI.DDL_LOG: Indica que a tabela
DDL_LOG
do esquemaAPPSPI
será importada. - directory=TMPDIR: Define onde o Oracle deve procurar os arquivos de importação.
- cluster=N: Diz que a importação não será feita em um ambiente de cluster.
- parallel=4 Permite usar quatro processos ao mesmo tempo para acelerar a importação.
- network_link=DB_IMP_TESTE: DB LINK será usado para acessar um banco de dados remoto.
- remap_table=APPSPI.DDL_LOG: Renomeia a tabela importada de
DDL_LOG
paraDDL_LOG_NOVO
. - logfile=impdp_ddl_log.log: Arquivo de log.
- flashback_time=SYSTIMESTAMP: Garante que os dados sejam importados com base no estado atual do banco de dados.
Essas são as considerações básicas que você precisa ter em mente ao usar o comando de importação. Embora o parâmetro o directory=TMPDIR não seja utilizado diretamente, é necessário informá-lo com um diretório válido configurado no banco de dados.
Esse comando deve ser executado no destino. Ele importa a tabela APPSPI.DDL_LOG
do banco de origem para o banco de destino, criando a tabela DDL_LOG_NOVO
no banco de destino.
Importando Todo o Schema com Data Pump via DB Link
Agora, se a necessidade for importar um schema inteiro, o processo também é simples com o DB Link.
Mudanças no Comando com base no anterior
schemas=APPSPI: Neste comando, em vez de especificar uma única tabela, você está importando todo o schema APPSPI
. Isso significa que todas as tabelas e objetos dentro desse schema serão importados.
remap_schema=APPSPI:APPSPI_NOVO: Aqui, você está renomeando o schema durante a importação. O schema APPSPI
será importado como APPSPI_NOVO
. Essa opção permite que você mantenha o schema original intacto enquanto cria uma nova cópia com um nome diferente.
As outras partes do comando, como directory
, cluster
, parallel
, network_link
, logfile
, e flashback_time
, permanecem as mesmas do comando anterior.
impdp \"/ as sysdba\" schemas=APPSPI directory=TMPDIR cluster=N parallel=4 network_link=DB_IMP_TESTE remap_schema=APPSPI:APPSPI_NOVO logfile=impdp_appspi_schema.log flashback_time=SYSTIMESTAMP

Esse comando também deve ser executado no banco de destino. O schema APPSPI
será importado do banco de origem para o banco de destino e renomeado para APPSPI_NOVO
.
Considerações
Embora o uso de impdp via DB Link traga muitas vantagens, também existem pontos a serem considerados:
Segurança: O uso de DBLinks envolve o compartilhamento de credenciais entre os bancos.
Performance: A importação via DBLink pode ser lenta se a rede entre os bancos não for de alta performance.
Falha de Conexão: O processo depende diretamente da conexão de rede entre os bancos, caso a conexão cair durante a importação, o processo vai falhar.
O uso do impdp
via DB Link é uma excelente alternativa quando não há espaço para armazenar arquivos de dump ou quando se busca uma solução mais rápida. Assim, você pode copiar tabelas, schemas completos ou qualquer outro objeto do banco de dados, de acordo com sua preferência, diretamente de um banco para outro, sem complicações.
Como sempre digo, não sou o dono da verdade e tão pouco um guru. Essa é uma situação real do meu dia a dia. Caso identifiquem algum ponto de melhoria, estou aberto a recebê-los!
🎰🛴#20240926 #DBASobrinho #GuinaNãoTinhaDó #BóBó #CaceteDeAgulha #OracleACE #LongeDoGURU #MeuDiaDia #FDS 🎰🛴