ORACLE DATA PUMP

Harun Erdinç
Machine Learning Turkiye
7 min readMar 4, 2022

Herkese Merhaba

Bu yazımda ORACLE DATA PUMP teknolojisini örneklerle birlikte açıklamaya çalıştım.

Keyifli okumalar dilerim.

ORACLE DATA PUMP (Expdp-Impdp) Nedir?

  • Oracle Data Pump, Oracle tarafından sağlanan hızlı bir veri taşıma aracıdır.
  • Özellikle test ve geliştirme ortamlarına veri taşırken kullanırız.
  • Data Pump yardımcı programı Expdp ve Impdp araçları ile kullanılır.
  • Data Pump ile uzak veritabanımıza bağlanabilir, verileri dump dosyasına yazmadan direk lokalimizdeki bir veritabanına aktarabiliriz.
  • Veri taşıma işlemi esnasında sıkıştırma ve şifreleme özelliklerini kullanabiliriz.

Expdp ve Impdp Hangi Durumlarda Kullanılabilir?

  • Bir schema altındaki tüm dataları veya bir kısmını farklı bir schema altına taşımak istediğimizde,
  • Oracle versiyonu değiştiğinde dataları taşımak için,
  • Operating system değiştiğinde dataları taşımak için,
  • Logical Backup almak istediğimizde bu araçları kullanabiliriz.

EXPDP (Export Data Pump) Aracı

  • Veritabanımızdaki verilerin tamamını veya bir kısmını dışarı almak için işletim sistemi üzerinde expdp aracını kullanıyoruz.
  • Expdp aracı ile tüm veritabanını, belirli tabloları, schemaların ve tablespace’lerin export’u alınabilir.
  • Oracle 10 g ile gelen bir özelliktir.
  • Mantıksal backup alma olarak düşünebiliriz.
  • Veritabanı arşiv modda olmadan export alınabilir. (Veritabanı archive modda olmadığı için tutarlı bir yedek almış olmayız)

EXPDP (Export Data Pump) Özellikleri

  • Sıkıştırma (compression) özelliği ile export alınabilir.
  • Şifreleme (Encryption) özelliği vardır.
  • Paralellik belirtilerek export alınabilir.
  • Tabloları, Şemaları, Tablespace’leri yeniden adlandırarak export alınabilir.

Export Almadan Önce Yapılması Gereken İşlemler

  • Export işlemini yapacak olan kullanıcının EXP_FULL_DATABASE yetkisine sahip olmalıdır.
  • Kullanıcıya verilen yetkileri Revoke anahtar kelimesi ile geri alınabilir.

SQL> REVOKE EXP_FULL_DATABASE TO VERIDATA

  • Expdp aracı ile export işlemi yapabilmemiz için veritabanımızda Database Directory objesi oluşturmalıyız.
  • Export/import işlemleri yapılırken hangi veritabanı dizin objesini kullanacağımızı belirtmemiz gerekiyor.
  • Database Directory belirtmezsek veritabanı kurulumu yapıldığında Data Pump işlemleri için default olarak oluşturulan “DATA_PUMP_DIR” veritabanı dizin objesini kullanır.
  • Veritabanımızda oluşturulan dizinleri DBA_DIRECTORIES view’ini sorgulayarak öğrenebiliriz.

SQL> select directory_name from DBA_DIRECTORIES;

Database Directory Oluşturma ve Yetkilendirme

  • İlk önce işletim sistemi üzerinde bir klasör oluşturuyoruz.

oracledb /home/oracle> mkdir dump_dir

  • Daha sonra veritabanına bağlanıp veritabanı dizini oluşturuyoruz.

SQL> create directory dump_dir as ‘/home/oracle/dump_dir’;

  • Son olarak export işlemini yapacak olan kullanıcımıza (veridata) bu dizin üzerinde okuma/yazma yetkisi veriyoruz.

SQL> grant read, write on directory dump_dir to veridata;

IMPDP (Import Data Pump) Aracı

  • Expdp aracı ile dışarı dump dosyası olarak yedeklediğimiz verileri, bir veritabanına import etmek için İmpdp aracını kullanırız.
  • Import aracı ile import işlemi yapabilmemiz için veritabanımızda Database Directory objesi oluşturmalıyız.
  • Daha sonra import işlemini gerçekleştirecek kullanıcıya bu dizinde okuma/yazma yetkisi verilmelidir.
  • Import işlemini gerçekleştirecek kullanıcıya IMP_FULL_DATABASE yetkisi verilmelidir.
  • Import işlemini de export işlemi yaptığım veritabanı üzerinde gerçekleştireceğim için yeni bir Database Directory oluşturmam gerekmiyor.

Gerekli açıklamaları yaptıktan sonra EXPDP ve IMPDP araçlarını uygulamalı olarak denemeye geçebiliriz.

FULL EXPORT

  • Veridata kullanıcısı ile aşağıdaki gibi full export alabiliriz.

oracledb /home/oracle> expdp veridata/veridata directory=dump_dir dumpfile=FULL_DB_07.dmp logfile=FULL_DB_07.log FULL=Y

Export alırken kullanılan parametreler:

Directory parametresi: Daha önce oluşturduğumuz database directory objesidir.

Dumpfile parametresi: Verilerin dışarıya alınacağı dump dosyasının adıdır.

LOGFILE Parametresi: Export işleminin aktivite kayıtlarının tutulduğu dosyadır.

  • SYS kullanıcısı ile aşağıdaki gibi Full Export alabiliriz.

oracledb /home/oracle> expdp \”/ as sysdba\” directory=dump_dir dumpfile=FULL_DB_06.dmp LOGFILE=FULL_DB.log FULL=Y

FULL IMPORT

  • SYS kullanıcısı ile import işlemini aşağıdaki gibi gerçekleştirebiliriz.

oracledb /home/oracle> impdp \”/ as sysdba\” DIRECTORY=dump_dir DUMPFILE=FULL_DB_06.dmp LOGFILE=IMP_FULL_DB_08.log table_exists_action=replace exclude=PROC_SYSTEM_GRANT,USER,TABLESPACE,DIRECTORY FULL=Y

Import işleminde kullanılan bazı parametreler:

TABLE_EXISTS_ACTION : Import işlemi gerçekleştirilecek veritabanında mevcut isimle aynı olan bir tablo varsa hata alınmaması için bu parametreyi kullanmalıyız.(SKIP — APPEND — TRUNCATE — REPLACE)

SKIP: İlgili tablo varsa o tabloda hiçbir değişiklik yapmadan devam eder. Bu değer default olarak gelir.

APPEND: Var olan tabloya dokunmadan importtaki verileri de bu tabloya ekler.

TRUNCATE: Tablo içindeki kayıtları siler, export içerisindeki veriyi import ederek devam eder.

REPLACE: Var olan tabloyu drop ederek yeniden tabloyu oluşturur, daha sonra export içerisindeki verileri insert ederek devam eder.

EXCLUDE: Bu parametre export alınırken belli bir Schema’yı, Trigger’ları, Procedure’leri dahil etmemeyi sağlıyor.

TABLESPACE EXPORT

  • USERS tablespace’i TABLESPACES parametresi kullanılarak aşağıdaki gibi export alabiliriz.

expdp \”/ as sysdba\” TABLESPACES=USERS DIRECTORY=dump_dir DUMPFILE=USERS_TS_1.dmp LOGFILE=USERS_TS.log

TABLESPACE IMPORT

  • Aldığımız USERS tablespace’e ait exportun dump dosyasını aşağıdaki gibi import edebiliriz.

oracledb /home/oracle> impdp \”/ as sysdba\” TABLESPACES=USERS DIRECTORY=dump_dir DUMPFILE=USERS_TS_1.dmp LOGFILE=IMP_USERS_TS.log table_exists_action=replace

FARKLI TABLESPACE’DE IMPORT

  • İlk önce VERIDATA şemasını export alıyorum.

oracledb /home/oracle> expdp \”/ as sysdba\” SCHEMAS=VERIDATA DIRECTORY=dump_dir DUMPFILE=VERIDATA.dmp LOGFILE=VERIDATA.log

  • Aşağıdaki sorgu ile VERIDATA şemasının hangi tablespace ait olduğuna bakıyoruz. (USERS TS)

SQL> select owner, table_name, tablespace_name from all_tables where owner=’VERIDATA’;

  • VERIDATA şemasını drop ediyoruz.

SQL> drop user VERIDATA CASCADE;

  • Import işlemini gerçekleştireceğimiz yeni bir tablespace ve o tablespace ait datafile’ı oluşturuyoruz.

SQL> CREATE TABLESPACE TBS1 DATAFILE ‘/u01/app/oracle/oradata/Veridatadb/tbs01.dbf’ SIZE 50M;

  • Son olarak daha önce export aldığımız dump dosyasını kullanarak REMAP_TABLESPACE parametresi ile VERIDATA şemasını yeni tablespace üzerine import ediyoruz.

oracledb /home/oracle> impdp \”/ as sysdba\” SCHEMAS=VERIDATA DIRECTORY=dump_dir DUMPFILE=VERIDATA.dmp LOGFILE=IMP_VERIDATA.log table_exists_action=skip REMAP_TABLESPACE=USERS:TBS1

SCHEMA EXPORT

  • VERIDATA şemasını SCHEMAS parametresini kullanarak aşağıdaki gibi export alıyorum.

oracledb /home/oracle> expdp \”/ as sysdba\” SCHEMAS=VERIDATA DIRECTORY=dump_dir DUMPFILE=VERIDATA_%U.dmp LOGFILE=VERIDATA_01.log

Not: Veritabanındaki schemalara bakmak için aşağıdaki sorguyu çalıştırabiliriz.

SQL>select username as schema_name from sys.dba_users order by username;

SCHEMA IMPORT

  • Export aldığımız VERIDATA şemasını aşağıdaki gibi import edebiliriz.

oracledb /home/oracle> impdp \”/ as sysdba\” SCHEMAS=VERIDATA DIRECTORY=dump_dir DUMPFILE=VERIDATA_01.dmp LOGFILE=IMP_VERIDATA_SC.LOG table_exists_action=skip

FARKLI İSİMLE SCHEMA IMPORT

  • Önce SCOTT şemasını export olarak alıyorum.

oracledb /home/oracle> expdp \”/ as sysdba\” oracledb /home/oracle> expdp \”/ as sysdba\” SCHEMAS=SCOTT DIRECTORY=dump_dir DUMPFILE=EXP_SCOTT.dmp LOGFILE=EXP_SCOTT.log

  • Şimdi de SCOTT şemasını VERIDATA şeması olarak import ediyorum.

oracledb /home/oracle> impdp \”/ as sysdba\” DIRECTORY=dump_dir DUMPFILE=EXP_SCOTT.dmp LOGFILE=IMP_SCOTT.log REMAP_SCHEMA=SCOTT:VERIDATA exclude=USER,TABLE

TABLO EXPORT ALMA

  • SCOTT şemasındaki EMP tablosunu “tables=SCOTT.EMP” parametresini kullanarak aşağıdaki gibi export alabiliriz.

oracledb /home/oracle> expdp \”/ as sysdba\” DIRECTORY=dump_dir DUMPFILE=EXP_EMP_TBL.dmp LOGFILE=EXP_EMP_TBL.log tables=SCOTT.EMP

TABLO IMPORT

  • Export aldığımız EMP tablosunu aşağıdaki gibi import edebiliriz.

oracledb /home/oracle> impdp \”/ as sysdba\” tables= SCOTT.EMP DIRECTORY=dump_dir DUMPFILE=EXP_EMP_TBL.dmp LOGFILE=IMP_EMP_TBL.log table_exists_action=replace

PARALEL KULLANIMI

  • Paralel parametresini kullanarak Data Pump export/import işlemlerini daha hızlı gerçekleştirebiliriz.
  • Paralellik sayısını genellikle CPU sayısına göre belirleriz.
  • Yani server üzerinde kaç tane CPU varsa en fazla o kadar sayı verebiliriz.
  • Burada önemli olan nokta Data Pump teknolojisinden en iyi şekilde performans sağlamak için belirtilen paralel sayısı kadar dump dosya belirtilmesi gerekir.
  • PARALLEL parametresini kullanarak aşağıdaki gibi export alabiliriz.

oracledb /home/oracle> expdp \”/ as sysdba\” tables=SCOTT.EMP DIRECTORY=dump_dir DUMPFILE= EMP_PARALEL.dmp LOGFILE= EMP_PARALEL.log PARALLEL=2

COMPRESSION OLARAK EXPORT ALMA

  • Büyük hacimli verilerimizin exportunu alırken sıkıştırma özelliğini kullanarak disk de yer kazanma açısından avantaj sağlayabiliriz.
  • Export sırasında oluşan dump file’ı compres edilmiş olarak oluşmasını sağlar.
  • 10g ile export alındığında COMPRESSION parametresi, METADATA_ONLY ve NONE değerlerini alabilmekteydi. Yani sadece metadata verilerinin exportu alınırken sıkıştırma yapılabiliyordu.
  • Oracle 11g ile birlikte COMPRESSION parametresi ALL, DATA_ONLY, METADATA_ONLY, NONE değerleri ile birlikte kullanabiliyoruz.
  • ALL ve DATA_ONLY değerleri ile kullanıldığında “Oracle Advanced Compression” lisansına sahip olmamız gerekiyor.

Compression Seçenekleri;

ALL: Tüm verileri ve metadata verilerini sıkıştırarak alır.

DATA_ONLY: Sadece datayı compres eder.

METADATA_ONLY: Sadece metadatayı compress eder.

NONE: Hiçbir şeyi compress etmez. Default değeri NONE’dur.

  • Sıkıştırma parametresini aşağıdaki gibi kullanabiliriz.

oracledb /home/oracle> expdp \”/ as sysdba\” tables=SCOTT.EMP DIRECTORY=dump_dir DUMPFILE= EMP_COMP.dmp LOGFILE= EMP_COMP.log compression=all

FARKLI BİR SÜRÜME EXPORT ALMA

  • Version parametresi export edilecek olan datanın veritabanı sürümünü ifade eder.
  • Daha yüksek bir sürümden, daha düşük bir versiyondaki sürüme ait export alabilmek için version parametresini kullanamayız.
  • Çünkü Oracle üst sürümden alt sürümlere expdp-impdp özelliğini destekler.
  • Yani sürümü 11.2’den bir exportu sürümü 10.2 olan bir veritabanına import edebiliriz.
  • Ya da örneğin Oracle 10.1 veritabanında version parametresi 11.1 verilerek alınan bir exportu sürümü 10.2 olan bir veritabanına import edemeyiz.
  • Üst sürüme geçerken hangi sürümde import işlemini yapacaksak o sürümü version parametresinde belirtmemiz gerekiyor. Aksi taktirde hata alırız.
  • VERSION parametresini kullanarak aşağıdaki gibi export alabiliriz.

oracledb /home/oracle> expdp \”/ as sysdba\” directory=dump_dir dumpfile=FULL_DB_06.dmp LOGFILE=FULL_DB.log FULL=Y VERSION= 18.0.0.0

Oracle Data Pump konusunu böylelikle bitirmiş olduk.

Yazımı incelediğiniz için teşekkürler.

Bir sonraki yazılarımda görüşmek üzere.

LinkedIn hesabımdan bana ulaşabilirsiniz. HARUN ERDİNÇ

--

--