Merhaba,

Bu yazımda sizlere Oracle Veritabanlarında çok sık kullandığımız data pump teknolojisini anlatacağım. Bu teknoloji RMAN ile yapamadığımız Tablo ve şema bazlı yedeklemeyi çok iyi sağladığı için DBA ler tarafından çok sık olarak kullanılmaktadır.

data pump

Data pump teknolojisini bir veritabanından farklı bir veritabanına veri taşırken kullanmaktayız. Data pump aynı zamanda şema ve tablo bazlı yedekleme içinde güzel bir teknolojidir. Oracle veritabanının yedekleme aracı RMAN (Recovery Manager) olmasına rağmen bazı konularda RMAN yetersiz kalabiliyor bu durumlarda ise yardımımıza data pump yetişmektedir. 2 farklı veritabanı arasında tablo yada şema taşınmak istenildiği zaman bunu RMAN ile gerçekleştiremeyiz ancak data pump ile gerçekleştirebiliyoruz.

Data pump ile sadece tablo ve şema değil full database ve tablespace de taşınabilir. Data pump teknolojisi ile beraber ilgili verileri bir veritabanından export alıp diğer veritabanına import edebiliyoruz bunun için Oracle bize export için expdp ve import için ise impdp tool unu sunmaktadır.

Data pump 2

Şimdi bu 2 komutun kullanımını ve örneklerini aşağıda anlatacağım.

Expdp: Bu komut ile belirtilen tablo(ları), şema(ları) ve tablespace(ler) in export u alınabilmektedir. Alınan bu export dosyaları aynı zamanda yedeklilik sağladığı için Backup&Recovery çözümlerinde çok sık kullanılmaktadır. Bir user ın bu komutla ilgili dataların export unu alabilmesi için EXP_FULL_DATABASE yetkisinin olması gerekmektedir.

İmpdp: Bu komut ile export u alınmış tablo(ları), şema(ları) ve tablespace(ler) in target database e  import u sağlanabilmektedir. . Bir user ın bu komutla ilgili export dosyalarını import unu yapabilmesi için IMP_FULL_DATABASE yetkisinin olması gerekmektedir.

Bu iki komutu işletim sistemi üzerinde çalıştırıp ilgili işlemleri gerçekleştirebiliyoruz. Export u alınan veriler belirtilen path de .dmp ile tutulmaktadır. Data pump için işletim sistemi üzerinde bir directory oluşturmadığınız takdirde default olarak alınan export dosyaları DATA_PUMP_DIR directory si altında bulunan path e atılır. Bunun yerine biz işletim sistemi üzerinde datapump için ayrı bir directory i aşağıdaki gibi oluşturabiliriz.

create directory DATAPUMP as '/backup';

Export u alacak user ın ilgili directory üzerinde read/write hakkı olması gerekmektedir bu yetkiyi aşağıdaki gibi veriyoruz.

grant read, write on directory DATAPUMP to username;

Şema ve tablo bazlı export ve import aşağıdaki komut ile yapılır. Örneğin Production veritabanında kullanılan HR şeması yada bu şema altında bulunan personel tablosu test veritabanında test yada development yapmak için ihtiyaç duyulmaktadır. İlgili şema ve tabloları aşağıdaki komutlar ile sağlayabiliriz. Önce HR şemasının sonra personel tablosunun taşınmasını göstereceğim.

HR şeması linux işletim sisteminde veritabanı profile ı set edildikten sonra aşağıdaki komut çalıştırılarak export u alınır.

bash-4.1$ expdp \"/ as sysdba\" SCHEMAS=HR DIRECTORY=DATAPUMP DUMPFILE=HR.dmp LOGFILE=HR.log

Yukardaki komutu analiz ettiğimizde sysdba kullanıcısı ile expdp komutunu çalıştırıyoruz. Şema bazlı export alacağımız için SCHEMAS parametresine alınacak şemanın adı yazılır. Export verileri inin oluşturacağı fiziksel dump dosyası HR.dmp ismiyle DUMPFILE parametresinde belirtilmektedir. Bu fiziksel dump dosyasının işletim sistemi üzerinde tutulacağı path in mantıksal karşılığı ise DIRECTORY parametresiyle belirtilmiştir. Başlatılan export işleminde oluşan dosya yada dosyalar bu directory in bulunduğu path e gidecektir. Bu işlem sırasında üretilen loglar ise LOGFILE parametresiyle belirtilen log dosyasına yazılacaktır. Oluşan bu export dosyasını test sunucusuna scp komutuyla aşağıdaki gibi gönderebiliriz.

bash-4.1$ scp /backup/HR.dmp oracle@test_sunucu_IP:/Backup

Test sunucusuna gönderilen bu export dosyası aşağıdaki gibi ilgili test veritabanına import edilir.

bash-4.1$ impdp \"/ as sysdba\" SCHEMAS=HR DIRECTORY=DATAPUMP DUMPFILE=HR.dmp LOGFILE=HR.log table_exists_action=replace

Yukardaki impdp komutunu incelediğimiz zaman yine expdp da olduğu gibi sysdba kullanısı ile bu işlem gerçekleştiriliyor. Diğer parametreler yukarda expdp da aynı olduğu için tekrar anlatmıyorum bunun dışında kalan table_exists_action  parametresi ile aktarılan veriler target database de var ise ne yapılması gerektiğini belirtilir. Ben replace diyerek eğer aynı tabloları görürsen değiştir diyorum.

Data pump teknolojisiyle alınan exportlar compress edilebiliyor ve güvenlik içinde şifrelenebiliyor.  Yukardaki örneği aşağıdaki gibi compress ve encryption parametrelerini ekleyerek alınan export un sıkıştırılmasını ve şifrelenmesini sağlıyoruz. Bu iki parametreyi ayrı ayrıda kullanabilirsiniz ben tekrarı olmaması açısından aynı örnekte kullanıyorum.

bash-4.1$ expdp \"/ as sysdba\" SCHEMAS=HR DIRECTORY=DATAPUMP DUMPFILE=HR.dmp LOGFILE=HR.log compression=all encryption=all

Öte yandan bir anda birden fazla şemanın export u da alınabilmektedir bunun için sadece SCHEMAS parametresinde şemaları virgülle SCHEMAS=HR,YENİ_ŞEMA_ADI şeklinde ayırmak yeterli.

Şema export ve import u yukardaki gibi oluyor. Aşağıdaki örnekte ise HR şemasına ait personel tablosunun export u ve import u bulunmaktadır.

expdp \"/ as sysdba\" tables=HR.personel DIRECTORY=DATAPUMP DUMPFILE=personel.dmp LOGFILE=personel.log

Export u alınan personel tablosunun dump dosyası aşağıdaki gibi test sunucusuna gönderilir.

scp /backup/personel.dmp oracle@test_sunucu_IP:/Backup

Test sunucusunda ilgili export dump dosyası aşağıdaki gibi import edilir.

impdp \"/ as sysdba\" tables=HR.personel DIRECTORY=DATAPUMP DUMPFILE=personel.dmp LOGFILE=personel.log

Şema export u için geçerli olan birden fazla şemayı aynı anda export import edebilme olayı tablolar içinde geçerlidir. Şema gibi birden fazla tabloyu export etmek istiyorsanız TABLES parametresinde tablo adları arasına virgül koyarak çok sayıda tablo için bu işlemi gerçekleştirebilirsiniz.

Öte yandan tüm database inde export u alınabilmektedir. Bu ise RMAN in aldığı full backup ile aynı işlevi görebilmektedir. Genel anlamda full backup için data pump değil RMAN tercih edilir. Data pump tablo ve şema taşımada yada yedeklemede çok etkilidir. Yinede bir veritabanının full export u aşağıdaki gibi alınır.

expdp \"/ as sysdba\" DIRECTORY=DATAPUMP DUMPFILE=FULL_EXPORT.dmp LOGFILE=FULL_EXPORT.log FULL=Y

Export alınmadan direk Network üzerinden de import işlemi yapılabilir. Yani Production ve test veritabanı arasında oluşturulan bir database link i ( dblink ) sayesinde export alınmadan direk ilgili datalar test veritabanına import edilebilir. Bunun için Test veritabanından production veritabanına bir dblink olması gerekmektedir. İlgili dblink yoksa eğer aşağıdaki komut ile oluşturabilirsiniz.

CREATE PUBLIC DATABASE LINK ARA_BAGLANTI
CONNECT TO username
IDENTIFIED BY password
USING 'PRODUCTION_IP:PORT/SID';

Yukardaki HR şemasını aşağıdaki gibi export almadan direk test veritabanına import edebiliriz.

impdp \"/ as sysdba\" SCHEMAS=HR DIRECTORY=DATAPUMP LOGFILE=HR.log table_exists_action=replace NETWORK_LINK=ARA_BAGLANTI

Database link kullanarak direk import işlemi bir çok zaman işimize çok yaramaktadır özellikle atılacak tablo yada şema boyutu çok büyük olduğu zaman production a ekstra bir maliyet vermeden bu işlemi network üzerinden taşıyarak halledebiliriz.

Öte yandan export yada import işlemine cpu sayısına bağlı olarak paralellik katarak işlemin tamamlanmasını hızlandırabiliriz. Bunun için data pump teknolojisi bize paralel parametresiyle bu işlemi hızlandırabilmemize olanak tanıyor. Paralelliği aşağıdaki gibi verebiliriz bu paralellik sayısını fiziksel sunucunun cpu sayısından fazla yapmamak gerekiyor.

expdp \"/ as sysdba\" tables=HR.personel DIRECTORY=DATAPUMP DUMPFILE=personel.dmp LOGFILE=personel.log PARALLEL=8

Export import işlemi sırasında dikkat edilmesi gereken şeylerden biriside taşınacak verilerin aynı tablespace de olup olmadığıdır. Taşınacak tablo yada şemaların tablespace leri hedef database de yok ise ya aynı isimde oluşturulur yada eğer hedef veritabanında farklı bir tablespace e atılmak isteniyorsa kaynak tablespace ile hedef tablespace import sırasında remap edilir. Bunu aşağıdaki remap_tablespace parametresiyle aşağıdaki gibi sağlayabiliriz. Aşağıdaki örnekte kaynak veritabanında HR şeması DATA01 tablespace inde tutulurken test veritabanında bu tablespace bulunmadığı için var olan DATA tablespace inde tutulacaktır. Bunuda aşağıdaki gibi sağlayabiliriz bunu yapmazsak  işlem hata verip durur.

impdp \"/ as sysdba\" SCHEMAS=HR DIRECTORY=DATAPUMP LOGFILE=HR.log table_exists_action=replace NETWORK_LINK=ARA_BAGLANTI REMAP_TABLESPACE=DATA01:DATA

Uzun sürecek olan bir export yada import işlemini log dosyasından takip edebiliriz. Bunun için linux tail komutunu kullanarak log dosyasının son 20 satırına arada bir bakarak işlemi takip edebiliriz. Bu komutu aşağıdaki gibi kullanabilirsiniz.

bash-4.1$ tail -20f /backup/HR.log

Yada ilgili export yada import işlemini veritabanından dba_datapump_jobs view inden aşağıdaki gibi sorgulayabilirsiniz.

bash-4.1$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat May 25 19:33:45 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

SQL> select * from dba_datapump_jobs;

OWNER_NAME                     JOB_NAME
------------------------------ ------------------------------
OPERATION                      JOB_MODE
------------------------------ ------------------------------
STATE                              DEGREE ATTACHED_SESSIONS DATAPUMP_SESSIONS
------------------------------ ---------- ----------------- -----------------
SYS                            SYS_EXPORT_SCHEMA_01
IMPORT                         SCHEMA
EXECUTING                               1                 0                 2

Böylece bu yazımın sonuna gelmiş bulunmaktayım bir sonraki yazıda görüşmek dileğiyle şimdilik esen kalın.

Mehmet Salih Deveci

Oracle Veritabanı Yöneticisi

//

//

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s