Tuesday, May 20, 2014

Oracle DB - DATAPUMP


Oracle DATAPUMP (expdp/impdp) je alat koji je prevashodno namijenjen za transfer podataka iz jedne baze u drugu bazu ali može se koristiti i za tzv. logički backup Oracle schema-e ili za logički backup cjelokupne baze podataka. DATAPUMP alati EXPDP i IMPDP predstavljeni su u Oracle 10g verziji baze i oni predstavljaju naprednije verzije već postojećih alata exp i imp.

Pomoću DATAPUMP alata expdp moguće je napraviti export podataka iz jedne baze a pomoću alata impdp moguće je taj export importovati u drugu ili istu bazu. Fajl koji se kreira prilikom export-a podataka iz baze je takođe (kao i kod exp/imp alata) DUMP fajl koji u binarnom formatu sadrži objekte iz baze, metapodatke tih objekata kao i njihove kontrolne podatke.

 EXPDP/IMPDP komande (parametri) mogu biti izvršene na tri načina:

1. Pomoću command line interface-a (parametri se specificiraju u okviru command line interface-a)
2. Pomoću parametarskog fajla (parametri se specificiraju u posebnom fajlu)
3. Interaktivni unos parametara (potrebni parametri interaktivno se unose u expdp/impdp interface)

 DATAPUMP alati podržavaju pet različitih mode-ova za migraciju podataka:

* Full export/import mode (izvršava export/import cjelokupne baze podataka)
* Schema mode (default-ni mod, export/import podataka određene schema-e)
* Table mode (izvršava export/import određenih tabela i objekata koji zavise od tih tabela)
* Tablespace mode (vrši export/import objekata koji se nalaze u određenom tablespace-u)
* Transportable Tablespace Mode (vrši export/import samo metadata podataka o tabelama u okviru određenog tablespace-a)

Da bi se alat DATAPUMP mogao koristiti potrebno je ispuniti odgovarajuće uslove:

- Postojanje odgovarajućeg Oracle direktorijuma (folder-a) u koji će se smještati DUMP fajlovi. Ovaj direktorijum je definisan Oracle parametrom DATA_PUMP_DIR.

- Kreiranje posebnog Oracle korisničkog naloga (kao bi se izbeglo korišćenje SYS analoga) koji će imati pravo da vrši export/import procedure. Korisničkom nalogu koji će biti zadužen za DATAPUMP poslove moraju se grant-ovati i sledeće privilegije: create table, datapump_exp_full_database, datapump_imp_full_database, read i write on directory (Oracle DATAPUMP folder).


Evo i procedure setup-a Oracle DATAPUMP parametara:

1. Kreiranje direktorijum na nivou operativnog sistema.

$ pwd
/home/oracle
$ mkdir datapump
$ cd datapump/
/home/oracle/datapump

2. Konfiguracija Oracle direktorijuma.

SQL> conn / as sysdba
Connected.

SQL> create directory datapump_dir as '/home/oracle/datapump';
Directory created.

 3. Kreiranje i podešavanje korisničkog naloga koji će biti zadužen za DATAPUMP poslove.

SQL> create user datapump_admin identified by pass1 default tablespace users quota unlimited on users;
User created.
SQL> grant create table to datapump_admin;
Grant succeeded.
SQL> grant datapump_exp_full_database to datapump_admin;
Grant succeeded.
SQL> grant datapump_imp_full_database to datapump_admin;
Grant succeeded.
SQL> grant read, write on directory datapump_dir to datapump_admin;
Grant succeeded.

Sada korisnički nalog datapump_admin ima sva potrebna prava da bi izvršio bilo koju DATAPUMP proceduru.


EXPORT Procedura

Komanada za export svih podataka iz cjelokupne baze podataka:

$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/db_1

$ expdp datapump_admin/pass1 directory=datapump_dir dumpfile=full.dmp logfile=full.exp.log full=y

Ova će komanda izvršiti export svih podataka iz baze u fajl full.dmp koji će biti smješten u folder /home/oracle/datapump. Takođe, u isti folder biće smješten i log fajl export procesa.

Ovaj se export može izvršiti i na drugi način, pomoću parametarskog fajla. Prvo je potrebno kreirati parametarski fajl:

$ vi fillexp.par

userid=datapump_admin/pass1
directory=datapump_dir 
dumpfile=full.dmp 
logfile=full.exp.log 
full=y

Sada je komanda za export svih podataka iz baze sledeća:
$ expdp parfile=fullexp.par

Za export podataka iz samo neke schema-e potrebno je navesti parametar "schemas=". Moguće je navesti jednu ili više schema-a za export. Npr:
vi user_test.par

userid=datapump_admin/pass1 
directory=my_datapump_dir
schemas=test
reuse_dumpfiles=y
Export komanda je:
$ expdp parfile=user_test.par dumpfile=test_schema.dmp logfile=test_schema.exp.log

Pored već navedenih parametara postoji još veliki broj parametara koje je moguće navesti prilikom DATAPUMP export procedure, neki od njih su kompresija podataka, zatim enkripcija podataka, kao i detaljno specificiranje onoga što se želi export-ovati (samo tabele, samo struktura objekata (DDL), itd.).


IMPORT Procedura

Što se tiče IMPDP podešenja ona su identična EXPDP podešenjima, tj. mora se kreirati Oracle direktorijum i odgovarajući korisnički nalog. Sintaksa komandi je slična.

Import FULL exporta podataka iz baze.

Parametarski fajl:
$ vi fullimp.par

userid=datapump_admin/pass1
directory=datapump_dir 
dumpfile=full.dmp 
logfile=full.imp.log 
full=y
content=all
table_exists_action=truncate

Import komanda:
$ impdp parfile=fullimp.par

Import schema exporta podataka.

Parametarski fajl:
$ cat test_imp.par

userid=datapump_admin/pass1 
directory=datapump_dir 
dumpfile=test_schema.dmp 
logfile=test_schema.imp.log 
schemas=test
content=all
table_exists_action=replace

Import komanda:
$ impdp parfile=test_imp.par