Oracle Data Pump yüksek hızda veri ve metadatayı taşımak için kullanılan server tabanlı bir teknolojidir. Şu an için sadece Oracle Database 10g ve sonrası sürümlerinde çalışmaktadır.
Oracle Data Pump’ın içinde barındırdığı diğer alt araçlara bakacak olursak 3 temel bileşenden söz edebiliriz.
1-Komut satırı istemcileri, expdp ve impdp
2-DBMS_DATAPUMP PL/SQL paketi (DataPump API)
3-DBMS_METADATE PLS/SQL paketi (MetaData API)
Komut satırı istemcileri olan expdp ve impdp, DBMS_DATAPUMP paketinin içinde tanımlanmış olan prosedür ve parametreleri kullanarak export ve import işlemlerini gerçekleştirmemizi sağlar. Yani expdp ve impdp araçları aslında arka planda bu iki PL/SQL paketini kullanmaktadırlar. Bu işlemleri Enterprise Cloud Control Manager’ın sağladığı GUI arayüzü ile de gerçekleştirebiliriz.
Data Pump
Verinin taşınmasında bir diğer yöntem olan RMAN ile backup alınması ve başka bir sistemde restore edilerek sağlanabilir ancak Oracle veritabanı versiyon farklılığında RMAN ile verinin taşınması mümkün değil. Data Pump, “VERSION” parametresi ile taşınan verinin sürüm uyumluluğunu sağlar. “Paralel” parametresi ile taşıma işlemi hızlandırılabilir. Import işlemi sırasında taşınan şema veya tabloların isimleri “REMAP” parametresi ile değiştirilebilir.
Network Mode olarak tanımladığımız yöntem ile remote olarak kaynak veritabanından export işlemi gerçekleştirmeden lokalimizdeki veri tabanına database link kullanarak veriyi taşıyabilriz.Veri taşıma esnasında Compression özelliliği ile metadata veya veri sıkıştırılabilir böylece disk alanını daha verimli kullanabiliriz. Bütün bu işlemleri yapabilmek öncelikle export işlemleri için EXP_FULL_DATABASE, import işlemleri için IMP_FULL_DATABASE yetkilerinin kullanıcıya verilmiş olması gerekiyor. Şimdi üstte anlatığım özellikleri örnek ile açıklayalım.
İlk olarak export işlemi ile alınacak bulk veri için bir lokasyon belirtmemiz gerekiyor. Belirtilmediği taktirde Oracle defualt olarak belirtmiş path de “.dmp” uzantılı olarak veriyi tutar.
Default Data Pump lokasyonunu öğrenmek istersek aşağıdaki sorguyu çalıştırabiliriz.
Ancak ben bu lokasyonu değil ayrı bir klasörde export işlemi ile alınan verileri tutmak istiyorum. Bunun için öncelikle bir kullanıcı oluşturup gerekli yetkileri verip ardından directory path’ini belirteceğim.
Burada dikkat edilmesi gereken nokta directory objesi ile aslında sadece veritabanı sunucusunda fiziksel dosya sistemindeki bir path’e pointer oluşturmuş olduk, klasör gerçekte oluşturulmadı. O yüzden belirtiğimiz path’e dosya sisteminde klasör oluşturmamız gerekiyor.
Gerekli işlemleri tamamladık artık test kullanıcısın şeması altındaki verileri export ile taşıma işlemini gerçekleştirebiliriz.
Test kullanıcı ile expdp komutunu çalıştırıyoruz. Fiziksel dump dosyasının işletim sistemi üzerinde tutulacağı lokasyonun mantıksal karşılığı DIRECTORY parametresiyle belirtilmiştir. Bu işlem sırasında üretilen loglar ise LOGFILE parametresiyle belirtilen log dosyasına yazılacaktır. Schema parametresi ise taşımak istediğimiz şemayı belirtiyor. Aşağıdaki resimde de gördüğümüz gibi işlem başarıyla tamamlandı.
Eğer taşımak istediğimiz bir şema değilde sadece bir tablo veya tüm database ise bunu da parametre olarak belirtebiliriz.
Verini metadatasını taşımak istiyorsak conten parametresini kullanabiliriz.
Tamamen veri tabanını taşımak istiyorsak;
IMPORT
Import işlemi de export işlemine benzer şekilde aynı parametreler ile aktarılacak ortamdaki kullanıcı adı ve şifre ile gerçekleştirilir. Import işlemi yapılırken eğer tablo adını değiştirmek istersek veya farklı bir şema adı altında oluşturulmasını istersek REMAP parametresi kullanılır. Şimdi daha önce export ettiğimiz test şemasını farklı bir isimle import edelim.
Devam eden export ve import işlemlerini dba_datapump_jobs view’ını kullanarak sorgulayabiliriz.
Data Pump ile export/import işlemi başlattığımızda sunucu üzerinde “ora_dmNN_” adında bir master process oluşur. Eğer işlemin yoğunluğu ve “PARALEL” parametresi ile bir exp/imp işlemi gerçekleştiriliyor ise buna bağlı olarak birde “ora_dwNN<SID”> adında worker processler devreye girer. Çalışan processleri sorgularsak;
Bir kullanıcı Data Pump exp/imp işlemi gerçekleştirdiğinde, kendi şeması altında Master Table adlı bir durum tablosu oluşturulur. Bu tablonun adını SYS_IMPORT/EXPORT/_TABLE_NN şeklinde görebiliriz. Oluşturulan bu tablo ile exp/imp edilen veri hakkında detaylı bilgilere ulaşabiliriz.
Master tablo Data Pump işlemi başarılı bir şekilde sonlanıncaya kadar şemada kalır ve otomatik olarak silinir. Eğer hata ile sonlanırsa silinmez kendimiz manuel drop etmemiz gerekir. Export işlemi devam ederken log dosyasını sorguladığımızda Master tabloyu görebiliriz.
Export/Import Komut Satırı
Komut satırını kullanarak uzun sürebilecek Data Pump işlemlerinin izleyebilir, durdurabilir ve yeniden başlatabiliriz.
Arka planda çalışan bir exp/imp işlemini ATTACH parametresi ile ilişkilendirerek bu çalışan job hakkında bilgi alabilir veya durdurup tekrar yeniden başlatabiliriz. İlk olarak dba_datapump_jobs view’ini sorgulayarak çalışan job_name bilgisini almamız gerekir.
Daha sonra ise aşağıdaki gibi komut satırında ATTACH komutunu kullanırız.
Eğer çalışan bir export/işlemini belli bir sebepten dolayı durdurmak istiyorsak export interactive komut satırında stop_job komutuyla işlemimizi durdurabiliriz.