ORACLE DATA PUMP
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Ç