Hurriyet

15 Ağustos 2013 Perşembe

Oracle Veritabanı: Oracle Data Pump (Expdp and Impdp) Oracle Database 11g - Export ve Import İşlemleri

Oracle Data Pump eski "exp" ve "imp" komutlarına göre daha yeni, hızlı ve esnek bir tool olarak kullanılmaktadır. Temel import ve export işlemlerine istinaden PL\SQL komutları da kullanılmaktadır ve external tablolar için destek vermektedir.

Oracle Data Pump işlemlerimize başlamamız için öncesinde belirli yetkileri kullanıcılara vermeliyiz ve bir klasör yaratıp bunu database'e kaydettirmeliyiz.

Berke kullanıcısına read,write yetkilerini tanırız. Ayrıca import ve export'ları alacağımız klasörümüzü yaratırız.

CREATE OR REPLACE DIRECTORY test AS '/u01/app/oracle/ora/datapumpdir/';  
   
 GRANT READ, WRITE ON DIRECTORY test TO berke; 

Database'de tanımlı bütün klasörleri görmek için aşağıdaki şekilde sorgulama yapabiliriz.

select * from all_directories; 

Tablo import/export'u:

expdp berke/berke tables=employees directory=test dumpfile=employees.dmp logfile=expemployees.log  
   
 impdp berke/berke tables=employees directory=test dumpfile=employees.dmp logfile=impemployees.log


"TABLE_EXISTS_ACTION=APPEND"  argümanı var olan tablolara data eklenmesini sağlar. Bundan başka " TABLE_EXISTS_ACTION=TRUNCATE" ve "TABLE_EXISTS_ACTION=REPLACE" parametreleri da vardır. Amaca göre kullanılabilinirler.

Schema import/export'u:

Schemas kısımında import edeceğim şemayı belirtiyorum.


expdp berke/berke schemas=berke directory=test dumpfile=berke.dmp logfile=expdpberke.log  
   
impdp berke/berke schemas=berke directory=test dumpfile=berke.dmp logfile=impdpberke.log  


Database import/export'u:

"Full" argümanı yerine content=metadata_only dersek export'umuzu önemli oranda küçültebiliriz.


 expdp berke/berke full=Y directory=test dumpfile=berkefull.dmp logfile=berkefull.log  
   
 impdp berke/berke full=Y directory=test dumpfile=berkefull.dmp

Include ve Exclude Argümanları:

Export veya import işlemlerinde include ve exclude argümanları belirli objelerin import export edilmesini sağlar.

 expdp berke/berke schemas=berke include=TABLE:"IN ('employees', 'department')" directory=test dumpfile=berke.dmp logfile=expdpberke.log  
   
 expdp berke/berke schemas=berke exclude=TABLE:"= 'salary'" directory=test dumpfile=berke.dmp logfile=expdpberke.log  

Content Argümanı:

Content parametresi ile alacağımız export ve importlarda aldığımız tablo,tablespace veya database`in yapsını çıkartmıs oluruz.

Content=All veya Content=DATA_ONLY veya Content=METADATA_ONLY

expdp tables=employees content=METADATA_ONLY directory=test dumpfile=exp_content.dmp logfile=exp_content.log;


Network Export/Import'ları:

Network_link parametresi network export/import'u olarak kullanılacak kaynağı belirtir.


CONN / AS SYSDBA  
 GRANT CREATE DATABASE LINK TO berke;  
   
 CONN berke/berke  
 CREATE DATABASE LINK berke_link CONNECT TO apps IDENTIFIED BY apps USING 'DEV';

Bunun için ilk önce yukarıdaki gibi bir database link yaratırız. İlk önce "create database link" yetkisini alırız. sonrasında kaynak bilgisayara yönelticek şekilde link yaratırız.

Bu şekilde alacağımız export veya import'larda kaynakta erişeceğimiz bilgileri lokaldeki dizinimize atabiliriz. İşlemlerin yürüyebilmesi için her iki taraftaki kullanıcılarında "exp_full_database" yetkilerine sahip olması gerekir.

Ör: Export


 expdp berke/berke tables=apps.fnd_responsibility network_link=berke_link directory=test dumpfile=apps_fnd.dmp logfile=expdp_apps_fnd.log

Ör: Import
impdp berke/berke tables=APPS.fnd_responsibilty network_link=berke_link directory=test logfile=impdp_apps_fnd.log remap_schema=APPS:BERKE


Datapump'da Query ile Nasıl Data'lar Filter Edilerek Import/Export Yapılır?

Import/ Export ifadelerimize "Query" ifadelerini ekleyerek istediğimiz data'ları seçip alabiliriz.  Bu filtrelemeyide Query argümanına select ifadesini koyarak yapabiliriz.

QUERY=[[schema_adı.]tablo_adı:]koşul 

"Koşul" olarak yazdığımız kısım genelde where ifadesidir ama başka bir kısıtlayacı ifade olabilir.

Query parametresini aşağıdaki parametrelerle kullanamayız. Bunlar:


  • Content=Metadata_only
  • SQLFILE
  • TRANSPORT_TABLESPACES


Örnek olarak:

 impdp hr/hr DIRECTORY=test DUMPFILE=expfull.dmp  
  QUERY=departments:'"WHERE department_id < 120"' NOLOGFILE=Y 

Bu örneğimizde önemli olan kısım, eğer export'umuz full ise sadece bu koşula uygun olan verileri getirir. Eğer export'umuzda bu koşula göre alınsaydı import'da böyle bir koşul vermemize gerek kalmazdı.


Referans:
http://www.oracle-base.com/articles/10g/oracle-data-pump-10g.php
http://www.acehints.com/2012/06/data-pump-expdp-impdp.html

Hiç yorum yok:

Yorum Gönder