Para a exportação e importação de dados no banco de dados Oracle em bancos remotos, historicamente poderia ser utilizado uma conexção via
SQL*NET. Para isso, utilizando o utilitário (exp/imp) era necessário colocar a
string de conexão na frente do usuário e senha.
Conforme apresentado abaixo:
$exp
userid=usuario/senha@banco_remoto ... e demais opções
$imp userid=usuarui/senha@banco_remoto ... e demais
opções
Sabemos que para bancos de dados grandes, este procedimento era um problema porque os limites do sistema operacional
sobre o tamanho do arquivo e a latência
da rede entre os servidores tornava quase impossível
a execução deste procedimento.
Alguns DBAs criativos usavam
utilitários de compactação de arquivos,
via Unix/Linux (compress,
gzip, entre outros), para obter o máximo de capacidade do arquivo
durante a gravação e também diminuir a latência da rede entre os servidores.
Nas versões posteriores a importação
e exportação permite o uso de múltiplos
arquivos de “dump” permitindo contornar
os limites.
Apartir do Oracle 10g, o utilitário “Datapump” permite eliminar
o arquivo de “dump”, realizando a operação diretamente
de um banco de dados Oracle remoto.
Neste artigo irei demonstrar como é possível fazer
a importação de uma tabela acessando o banco de dados remotamente.
Para estes testes, foram criados o usuário SCOTT
com sua senha original TIGER, e na base de dados de origem (LAB1) e destino
(LAB2). E no banco de dados destino (LAB2), foram criadas algumas tabelas com
conteúdos.
Abaixo seguem as informações sobre os testes.
Base de origem: LAB1
Usuário : SCOTT
Senha : TIGER
Não existem tabelas criadas.
Base de destino: LAB2
Usuário : SCOTT
Senha : TIGER
Tabelas e quantidades de linhas:
BONUS -> 0 LINHAS
EMP -> 14 LINHAS
DEPT -> 4 LINHAS
DUMMY -> 1 LINHAS
EMP -> 14 LINHAS
SALGRADE -> 5 LINHAS
O primeiro passo será criar um “database
link”, no banco de dados (LAB1) para acessar o banco de
dados destino (LAB2) remotamente.
Para a criação do “database link”, deve-se usar o comando CREATE DATABASE
LINK e fornecer credenciais de login, o
nome do “database link”, o usuário de conexão, a senha e a string para conexão.
Abaixo segue o exemplo
utilizado.
CREATE
DATABASE LINK TEST
CONNECT TO scott IDENTIFIED BY tiger USING 'LAB2';
CONNECT TO scott IDENTIFIED BY tiger USING 'LAB2';
O comando de importação do “Datapump”, (impdp),
utilizará este “database link” para
acessar diretamente dados remotos. A linha de comando apresentada abaixo aponta para um NETWORK_LINK no banco de destino (LAB2),
abaixo a linha de comando utilizada.
$impdp scott/tiger TABLES=emp,dept DIRECTORY=DATA_PUMP_DIR
NETWORK_LINK=test
Import: Release 11.2.0.1.0 - Production on
Mon Nov 26 15:58:36 2012
Copyright (c) 1982, 2009, Oracle and/or its
affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise
Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application
Clusters, Automatic Storage Management, OLAP,Data Mining and Real Application
Testing options
Starting
"SCOTT"."SYS_IMPORT_TABLE_01": scott/******** TABLES=emp,dept
DIRECTORY=DATA_PUMP_DIR NETWORK_LINK=test
Estimate in progress using BLOCKS method...
Processing object type
TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 128 KB
Processing object type
TABLE_EXPORT/TABLE/TABLE
. . imported
"SCOTT"."DEPT" 4 rows
. . imported
"SCOTT"."EMP" 14 rows
Job "SCOTT"."SYS_IMPORT_TABLE_01"
successfully completed at 15:58:50
Esse
comando irá ler as informações das tabelas (DDL e DML) DEPT e EMP da base de
dados remota (LAB2) e criar as tabelas e importar os dados na base local
(LAB1).
Após a
importação das tabelas, temos:
SQL> select name from v$database;
NAME
---------------------------
LAB1
SQL> select * from cat;
TABLE_NAME TABLE_TYPE
-------------------- ---------------------------------
DEPT TABLE
EMP TABLE
Note que nenhuma operação de exportação foi realizada na base de dados destino (LAB2)
e nenhum arquivo de “dump” foi criado para este
processo.
Mais informações sobre as importações utilizando
um link de rede, consultar
o manual “Oracle Database Utilities, 11g Release 2 (11.2)”.
MSc. Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com