EXPDP - IMPDP

In ambiente Oracle 11g la directory di default in cui è salvato il file di dump è la seguente.

SELECT directory_name, directory_path 
FROM dba_directories
WHERE directory_name='DATA_PUMP_DIR';

Se si usa una differente directory, specificarla nel parametro DIRECTORY.

Esportare sempre  ORACLE_SID e NLS_LANG.

Estrarre dalla macchina di destinazione su cui deve essere effettuato l’import il parametro
NLS_LANG=<NLS_LANGUAGE>_<NLS_TERRITORY>.<NLS_CHARACTERSET>
dalla seguente query.

SELECT *   FROM NLS_DATABASE_PARAMETERS
where parameter in ('NLS_LANGUAGE', 'NLS_TERRITORY','NLS_CHARACTERSET');

Esportare su entrambi server su cui verrà fatto l’export e l'import la variabile con i parametri di sopra.

export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1


Controllare anche il parametro NLS_NCHAR_CHARACTERSET.


Per monitorare l'esecuzione del job
select * from DBA_DATAPUMP_JOBS;

  • Export del 5% di uno schema.
expdp '"/ as sysdba"' SCHEMAS=PIPPO dumpfile=pippo_20180911.dmp logfile=expdp_20180911.log  SAMPLE=5;

  • Export di una sola tabella e compressione del dump, Omettere il parametro "schema".
expdp '"/ as sysdba"' dumpfile=pippo_20180912.dmp logfile=expdp_20180912.log  TABLES=PIPPO.T1409D_TREC 
COMPRESSION=ALL;

  • Export di solo 20 righe di una tabella..

expdp '"/ as sysdba"' dumpfile=T1401R_ACOL_20180912.dmp logfile=T1401R_ACOL_20180912.log  
TABLES=PIPPO.T1401R_ACOL 
QUERY='PEP.T1401R_ACOL:"WHERE rownum<=20"' 
COMPRESSION=all;


Se si trasferisce il file nella macchina target come root
scp pippo_20180911.dmp root@coslab02:/home/oracle/u01/app/oracle/admin/IAT11F/dpdump 

Accedere alla macchina target e da root cambiare i permessi del file
chown oracle:oinstall pippo_20180911.dmp

Se si trasferisce il file come oracle il file importato ha già come proprietario oracle e gruppo primario oinstall.
scp pippo_20180911.dmp oracle@coslab02:/home/oracle/u01/app/oracle/admin/IAT11F/dpdump 

  • Export consistente di uno schema.
Usare l'opzione flashback_scn=1296276701 recuperabile dalla seguetne query
select current_scn from V$database

expdp \"sys/xxxxxx as sysdba\" SCHEMAS=PIPPO dumpfile=pippo_20200805.dmp logfile=pippo_20200805.log  FLASHBACK_SCN=1296276701


  • Export di tutte le strutture delle tabelle di uno schema e senza dati
expdp  
SCHEMAS=DB_AA_OWN
 dumpfile=expdp_DB_TAB_20230919.dmp 
logfile=DB_TAB_20230919.log  
INCLUDE=TABLE 
CONTENT= METADATA_ONLY


  • Export consistente di solo i dati delle tabelle di uno schema tranne una tabella
expdp SCHEMAS=EMEN
dumpfile=exp_EMEN_20231228.dmp 
logfile=exp_EMEN_20231228.log 
FLASHBACK_SCN=8850160797 
CONTENT=DATA_ONLY
 EXCLUDE=TABLE:\"LIKE \'T1893D_CSIS%\'\"


                                                                      IMPORT                                                          
  • Import di uno schema.
Quando si esegue un import inserire sempre la clausola "schemas" oppure accedere con le utenze dello schema da importare, altrimenti i dati vengono importati sotto sys.

echo $ORACLE_SID
su - oracle
impdp '"/ as sysdba"' schemas=PIPPO dumpfile=pippo_20180911.dmp logfile=impdp_20180911.log

Attenzione: se lo schema già esiste questa operaizone va ad aggiungere dati.

  • Import di una sola Tabella. 

    Se la tabella esiste e si effettua il DROP della tabella, omettere il comando CONTENT.
    Se la tabella già esiste ed è vuota (ad esempio prima è stato fatto un TRUNCATE)
     usare il comando CONTENT con importazione dei soli dati.
    Se la tabella esiste e si vuole aggiungere altri dati (apppend) a quelli esistenti non eseguire alcun drop e truncate ed usare il comando CONTENT.

    impdp'"/ as sysdba"' dumpfile=pippo_20180912.dmp tables=<schema>.<nome tabella> logfile=imxpdp_20180912.log CONTENT=DATA_ONLY;

Il dump file può essere anche l'export dell'intero schema e non solo puntale della singola tabella.

  • Import Schema ad eccezione della "create user"
Se si importa uno schema PIPPO su una nuova istanza che già contiene quello schema compare l'errore seguente ma l'import continua e non si blocca.

impdp '"/ as sysdba"' schemas=PIPPO DIRECTORY=my_dir dumpfile=pippo_yyyymmdd.dmp logfile=impdp_yyyymmdd.log
...
ORA-31684: Object type USER:"PIPPO" already exists
...
ORA-31684: Object type TABLE:"PIPPO"."TEST_TAB" already exists

Per escludere CREATE USER dall'import, specificare EXCLUDE = USER o EXCLUDE = USER: "= 'TEST'" per escludere una specifica istruzione CREATE USER:

impdp '"/ as sysdba"' schemas=PIPPO EXCLUDE=USER DIRECTORY=my_dir dumpfile=pippo_yyyymmdd.dmp logfile=impdp_yyyymmdd.log 

...
ORA-31684: Object type TABLE:"TEST"."TEST_TAB" already exists

  • Import Schema ad eccezione di uno schema completo
Per escludere l'import dello schema completo PIPPO, specificare EXCLUDE=SCHEMA:"= 'PIPPO'"

impdp '"/ as sysdba"' EXCLUDE=SCHEMA:\"='PIPPO'\" DIRECTORY=my_dir dumpfile=sorgente_yyyymmdd.dmp logfile=impdp_yyyymmdd.log


  • Remap Schema 
impdp dumpfile=pep_20190110.dmp logfile=imp_pep5.log REMAP_SCHEMA=PEP:PEPT;

Viene popolato lo schema nuovo (PEPT) senza cancellare quello vecchio (PEP)

  • Remap Tablespace
impdp dumpfile=pep_20190110.dmp logfile=imp_pep5.log REMAP_TABLESPACE=TS_PEP_DATA:TS_PEPT_DATA,TS_PEP_INDEX:TS_PEPT_INDEX;

  • Remap Schema + Tablespace
Quando si deve importare un vecchio schema (esempio PEP) e cambiare nome sia allo user (da PEP a PEPT) che ai tablespace:
1)  creare prima i tablespace associati al nuovo schema sul nuovo ambiente
2) effettuare l'import dei dati vecchi usando l'opzione remap. Non è necessario creare la nuova utenza con lo script.

E s e m p i o

CREATE TABLESPACE TS_PEPT_DATA DATAFILE
'/u01/app/oracle/oradata/s11test1/s11test1/datafile/ts_pept_data01.dbf'
SIZE 1M AUTOEXTEND OFF
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

CREATE TABLESPACE TS_PEPT_INDEX DATAFILE
'/u01/app/oracle/oradata/s11test1/s11test1/datafile/ts_index_data01.dbf'
SIZE 1M AUTOEXTEND OFF
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

impdp dumpfile=pep_20190110.dmp logfile=imp_pep5.log
REMAP_SCHEMA=PEP:PEPT REMAP_TABLESPACE=TS_PEP_DATA:TS_PEPT_DATA,TS_PEP_INDEX:TS_PEPT_INDEX;


Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database