
Oracle Data Pump Sunucu üzerinde çalışan Oracle Database Yedekleme ve yükleme araçlarından biridir, Komutlar olarak temelde Export işlemleri için expdp, Import işlemleri için impdp olarak bilinir , ama detaya girdiğimizde bir çok detay içermektedir. Peki biz yedekleme için daha önce RMAN görmüştük , RMAN ile ilgili yazımıza ilgili linkten ulaşabilirsiniz.
ORACLE BACKUP AND RESTORE RMAN
RMAN backup çok stabil sağlıklı ve hızlı , o halde biz ne zaman data pump a ihtiyaç duyarız;
- Oracle Farklı versiyonlar arasında data taşıması veya geçiş yapmak için.
- İşletim sistemi (Solaris –> X86) OS mimarisi değişimlerinde
- Tek bir tablonun, veya bazı tabloların, yadada bir tablespace alanının yedeklenmesi farklı bir veritabanına taşınması işlerinde
- Logical Backup işlemleri
Data Pump Export İmport işlemlerinin yapılabilmesi için bu işlemi yapacak User da ilgili yetkiler olmalıdır, export işlemi bir client ile yapılabilsede vertabanı makinası üzerinde tanımlanan bir directory üzerine alınır veya buradan okunur. Eğer başka bir makine üzerine alınsın diyorsak burada iki veritabanı olmalı ve DB LINK üzerinden yani network üzerinden Data Pump çalıştırılmalıdır, bu işlemlerin nasıl yapıldığı detaylarına gireceğiz.
CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS '/u01/app/oracle/oradata/';
GRANT READ, WRITE ON DIRECTORY pumpdir TO PMPUSER;
Tablo Export & Import
expdp user/password@database tables=SCOTT.EMP directory=DATA_PUMP_DIR dumpfile=emp_table.dmp logfile=emp_table_exp.log
impdp user/password@database tables=SCOTT.EMP directory=DATA_PUMP_DIR dumpfile=emp_table.dmp logfile=emp_table_imp.log
Schema Export & Import
expdp user/password@database schemas=SCOTT directory=DATA_PUMP_DIR dumpfile =SCOTT.dmp logfile=expdpSCOTT.log
impdp user/password@database schemas=SCOTT directory=DATA_PUMP_DIR dumpfile=SCOTT.dmp logfile=impdpSCOTT.log
Database Full Export & Import
expdp user/password@database full=Y directory=DATA_PUMP_DIR dumpfile=FUll.dmp logfile=expdpFull.log
impdp user/password@database full=Y directory=DATA_PUMP_DIR dumpfile=FUll.dmp logfile=impdpFull.log
Tablo export import işleminin bir çok opsiyonu bulunmaktadır, parallel işlem yapma , compress olarak export işlemi, mevcut bir tablya veri yazmak için append işlemi, farklı bir tablo adı ile import etmek için remap işlemi yada farklı bir tablespace alana aktarmak vs…
INCLUDE & EXCLUDE
Export ve Import yaparken bazı, işlemleri exportta veya importta dahil etmek ve bu hariç demek isteyebiliriz bunun için exclude ve include parametreleri kullanılmaktadır , Örnek verielcek olursa aşaıda bir SCHEMA export ediliyor fakat belli tablolar hariç tutuluyor olsun; INCLUDE parametresinde yanlızca INCLUDE içerisinde belirtilen nesleneler demektir.
expdp user/password@database schemas=SCFRK include=TABLE:"IN ('TABLE1', 'TABLE2')" directory=DATA_PUMP_DIR dumpfile=SCFRK.dmp logfile=expdpSCFRK.log
expdp user/password@database schemas=SCFRK exclude=TABLE:"= 'ISTENMEYENTBL'" directory=DATA_PUMP_DIR dumpfile=SCFRK.dmp logfile=expdpSCFRK.log
INCLUDE veya EXCLUDE içerisine where koşulunda kullandığımız gibi LIKE ifadeleri yazabiliriz
EXCLUDE=SCHEMA:"LIKE 'SYS%'"
EXCLUDE=SCHEMA:"IN ('SYSTEM','SYSMAN','APEX','ANONYMOUS','ODI','DBSNMP')"
CONTENT
Sadece Metadata veya sadece Data kısmı alınabilir, aşağıda ilk örnek bir SCHEMA metadata alınması, diğer örnekte bir SCHEMA nın metadatası olmadan sadece data içeriğinin aklınması örneği verilmiştir.
expdp user/password@database schemas=SCFRK directory=DATA_PUMP_DIR dumpfile=faruk_meta.dmp logfile=expdpfrk_meta.log content=METADATA_ONLY
expdp user/password@database schemas=SCFRK directory=DATA_PUMP_DIR dumpfile=faruk_dataonly.dmp logfile=expdpfrk_data.log content=DATA_ONLY
QUERY
Query ifadesi aslında WHERE şartlı expdp ve impdp çalıştırmak anlamına gelmekte;
expdp user/password@database full=Y directory=DATA_PUMP_DIR dumpfile=full.dmp logfile=expdp_full.log query='SCFRK.TBL1:"WHERE sicil=0",SCFRK.TBL2:"WHERE maas=1000"'
NETWORK expdp &imdpdp (NETWORK_LINK)
Bir veritbaanından alınan exportun locale yazılmadan başka bir veritabanına db_link kullanrak network üzerinden import edilmesi işlemi olarak tanımlanabilir. DB_LINK ile ilgili aşağıdaki yazıyı okuyabilirsiniz;
DATABASE LINK
Bu şekilde alacağımız export veya importlarda kaynakta erişeceğimiz bilgileri uzak veritabanındaki lokaldeki dizinimize atabiliriz. İşlemlerin yürüyebilmesi için her iki taraftaki kullanıcılarında exp_full_database yetkilerine sahip olması gerekir.
CREATE DATABASE LINK frkdb_link CONNECT TO frkusr IDENTIFIED BY welceom1 USING 'TNSUZAKDB';
expdp user/password@database tables=UZAKDB.TABLE network_link=frkdb_link directory=DATA_PUMP_DIR dumpfile=netlink_uzaktbl.dmp logfile=expdp_netlink_tbl.log
FLASHBACK EXPORTS
Alınan exportun belli bir zamana göre turualı alınması için FLASHBACK_TIME veya FLASHBACK_SCN kullanılabilir
expdp ..... flashback_time=systimestamp
--shel comand line syntax
expdp ..... flashback_time=\"to_timestamp\(\'01-05-1982 09:00:00\', \'DD-MM-YYYY HH24:MI:SS\'\)\"
Timestamp yerine SCN kullanılabilir , ben genelde bunu seçmekteyim format vs. uğraşamam :). SCN yi tespit etmek için aşağıdaki sql leri kullanabiliriz.
SELECT current_scn FROM v$database;
SELECT DBMS_FLASHBACK.get_system_change_number FROM dual;
SELECT TIMESTAMP_TO_SCN(SYSTIMESTAMP) FROM dual;
expdp ..... flashback_scn=77256323
İlgili SCN den timestamp bulmak için;
SELECT TIMESTAMP_TO_SCN(SYSTIMESTAMP) FROM dual;
SELECT SCN_TO_TIMESTAMP(77256323) FROM dual;
Bazı Önemli Backup Parametreleri
- Parallel backup almak için parallel=16 gibi ifade verilir dumpfile kısmına ise dumpfile=FRKDB_%U.dmp gibi bir isim verilebilir
- SKIP tablo mevcutsa atlar ve sonraki objeye geçer. CONTENT=DATA_ONLY de geçerli değil.
- APPEND var olan tabloya eski kayıtlar etkilenmeden yeni kayıtları yükler.
- TRUNCATE eski kayıtları siler ve yeni kayıtları yükler.
- REPLACE var olan tabloyu drop eder sonra yeni tablo oluşturup datayı yükler. CONTENT=DATA_ONLY de geçerli değil.
- Bazı durumlarda exportun içeriğinde istatistiklerin olmasını istemeyebiliriz bu durumda EXCLUDE=STATISTICS ifadesi kullanılır.
- İmport yaparken , kaynaktan farklı bir schema ya import yapılmak istenirse REMAP_SCHEMA ifadesi kullanılır. remap_schema=<source_schema_name>:<target_schema_name>
- Import işleminde kaynaktan farklı bir Tablspace ismi varsa REMAP_TABLESPACE ifadesi kullanılır; remap_tablespace=<source_tablespace_name>:<target_tablespace_name>
- Sıkıştırılmış export almak için seçenekler COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
- Şifrelenmiş export için seçenekler ENCRYPTION = {ALL | DATA_ONLY | ENCRYPTED_COLUMNS_ONLY | METADATA_ONLY | NONE}
- VERSION alt sürümden üst sürüme verisyon belirtmemize gerek yokken üst sürümden alt sürüme import edilcekse expdp sırasında version belirtmemiz gerekir
-- REMAP_SCHEMA ve parallel
expdp \"/ as sysdba\" DIRECTORY= DATA_PUMP_DIR DUMPFILE=expdp_full_%U.dmp LOGFILE=expdp_full.log schemas=SOURCE exclude=STATISTICS content=ALL parallel=16
impdp \"/ as sysdba\" DIRECTORY= DATA_PUMP_DIR DUMPFILE=expdp_full_%U.dmp LOGFILE=impdp_full.log remap_schema=SOURCE:TARGET parallel=16 ignore=Y
--REMAP_TABLESPACE
expdp \"/ as sysdba\" DIRECTORY= DATA_PUMP_DIR DUMPFILE=expdp_full_%u.dmp LOGFILE=expdp_full.log schemas=FRK exclude=STATISTICS content=ALL parallel=16
impdp \"/ as sysdba\" DIRECTORY= DATA_PUMP_DIR DUMPFILE=expdp_full_%u.dmp LOGFILE=impdp_full.log REMAP_TABLESPACE=users:frktbs parallel=16 ignore=Y
--COMPRESSION ALL
expdp \"/ as sysdba\" DIRECTORY= DATA_PUMP_DIR DUMPFILE=expdp_full_%U.dmp LOGFILE=expdp_full.log FULL=Y COMPRESSION=ALL
Bir yanıt yazın