Ponieważ import danych z pliku DMP jest zajęciem raczej nudnym, a niestety w środowisku testowym należy wykonywać tę akcję nader często postanowiłem napisać prosty skrypt, który zautomatyzuje operację importu.
Zadania skryptu
- Usuwać starego użytkownika
- Usuwać tablespace dla tego użytkownika
- Utworzyć ponownie użytkownika i tablespace
- Utworzyć katalog importu (jak istnieje to się nadpisze)
- Załadować dane z pliku DMP
Plik ma format L(U)nixowy, ale pod Windows, po dostosowaniu ścieżek też powinien pracować.
Zakładam iż:
- wszystkie akcje odbywają się w katalogu /opt/oracle_dbs (Windows np. c:\oracle_dbs)
- Konto administratora Oracle (użytkownik) nazywa się oracle
- Tablespace nosi nazwę mojabaza
- Katalog importu to /opt/oracle_dbs
- Plik DMP ma nazwę eksport.dmp i znajduje się w katalogu /opt/oracle_dbs
- Katalog tablespace to /opt/oracle_dbs
- Konto użytkownika tablespace mojabaza ma nazwę mojabaza z hasłem mojabaza (tak samo, łatwo się zarządza)
Do rzeczy odpalamy konsolę lub terminal jak kto woli:
1. Zmiana właściciela pliku DMP
aby plik był widziany podczas importu należy uprzednio zmienić jego właściciela
sudo chown oracle:dba eksport.dmp
2. Zalogowanie się jako użytkownik oracle
su - oracle
należy następnie podać hasło użytkownika oracle.
3. Zapisać w katalogu /opt/oracle_dbs następujący skrypt (pod nazwą skrypt_sql)
DROP user mojabaza cascade; DROP TABLESPACE mojabaza INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS; DROP TABLESPACE mojabaza_temp INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS; create tablespace mojabaza datafile '/opt/oracle_dbs/mojabaza_lin.dbf' size 32m autoextend on next 32m maxsize 2048m extent management local; CREATE TEMPORARY TABLESPACE mojabaza_temp TEMPFILE '/opt/oracle_dbs/mojabaza_lin_tmp.dbf' SIZE 5M AUTOEXTEND ON; alter tablespace mojabaza online; create user mojabaza identified by mojabaza; CREATE OR REPLACE DIRECTORY imp_dir AS '/opt/oracle_dbs'; GRANT READ, WRITE ON DIRECTORY imp_dir TO mojabaza; grant CREATE SESSION, CONNECT, RESOURCE to mojabaza; conn mojabaza/mojabaza; CREATE SCHEMA AUTHORIZATION mojabaza; exit;
4. Wywołać skrypt (tekst skryptu poniżej)
./moj_skrypt.sh
Zawartość skryptu:
sqlplus "/ as sysdba" @skrtpt_sql.sql; impdp system/root table_exists_action=replace dumpfile=eksport.dmp logfile=import.log
koniec