Export e import in data pump

Pubblicato da Alessandro Caredda il

Nell’articolo Export e import in data pump presento le principali modalità di migrazione dati da un database ad un altro.

Una delle soluzioni migliori per migrare un database, è attraverso l’export e import in data pump.

Il tool è stato introdotto dalla versione Oracle 10g, rispetto alle versione exp/imp sono state introdotte nuove modalità di gestione e aumento delle performance.

L’export in datapump salva i dati a livello logico in uno o più file sul sistema operativo.

La directory in cui viene depositato il file deve essere registrata nel database quindi o controlliamo una directory già presente con il seguente comando:

select * from dba_directories;

Oppure va creata con il seguente comando:

create or replace directory DIR_PROVA as '/path/dump/dir/';

Il secondo controllo che va effettuato sempre, è la dimensione dello SCHEMA che sarà da esportare.

Il controllo può essere effettuato con la seguente query:

select owner,sum(bytes/1024/1024) MB from dba_segments where owner='&owner' group by owner;

Una volta individuata la dimensione dello SCHEMA e la directory dove depositare il dump di export, dovete verificare la presenta di spazio sul FS dove sarò creato il file dump e il file log.

Passiamo al comando di export.

Per comporre il comando che esegue l’eportazione dei dati dobbiamo prima richiamare la procedura di export expdp, impostare: o nome utente e password, oppure con /as sysdba, directory, dumpfile e logfile.

expdp scott/scott@test directory=DIR_PROVA dumpfile=exp_tipoexport.dmp logfile=exp_tipoexport.logfile

Questa istruzione va sempre dichiarata per tutti i tipi di export quello di:

Export full del database
uno schema intero
dei soli metadati di un intero schema
una o più tabelle

Descriviamo le varie le varie tecniche:

Export full

L’export full del database effettua una copia completa all’interno di uno o, nel caso in cui si attivi il parallelismo, più file.
La prima cosa da verificare sono gli spazi di occupazione, quindi occorre vedere che dimensione ha il database e questo può essere effettuato con il seguente comando:

select sum(bytes/1024/1024) MB from dba_segments;

Vista la dimensione del database verifichiamo se sul FS abbiamo abbastanza spazio. Tenete in considerazione che lo spazio nel database è frammentato e l’export applica la compressione ai dati di default, quindi i dati la dimensione del file sarà ridotta rispetto alla dimensione totale recuperato con la query precedente.

Una volta verificato lo spazio è possibile effettuare l’export con il seguente comando:

expdp "' / as sysdba'" directory=DIR_PROVA dumpfile=exp_full.dmp logfile=exp_full.log full=y

Nel caso in cui volessi sfruttare il parallelismo e la compressione dati, occorre eseguire il seguente comando:

expdp "' / as sysdba'" directory=DIR_PROVA dumpfile=exp_full_%U.dmp logfile=exp_full.log full=y parallel=4 compression=ALL

Il parallelismo viene impostato dal carattere %U sulla componente finale del nome e dall’istruzione parallel= numero di parallelismo ossia del numero di file prodotti dall’export.
Il parallelismo va attivato sempre in base al numero di cpu e alla Versione Oracle che deve essere Enterprise Edition.

Export di uno schema intero

L’export di uno schema è la modalità più utilizzata a fronte di richieste di allineamento dati da ambiente di produzione ad ambiente di test o per richieste di migrazione di un determinato o più schema da un database a un altro.

Per verificare la dimensione di uno schema occorre eseguire il seguente comando:

select sum(bytes/1024/1024) MB from dba_segments where owner='PIPPO';

Se fossero più schema:

select sum(bytes/1024/1024) MB from dba_segments where owner in ('PIPPO','PLUTO');

Una volta verificati gli spazi possiamo eseguire l’export con il seguente comando:

expdp "' / as sysdba'" directory=DIR_PROVA dumpfile=exp_SCHEMA.dmp logfile=exp_full.log schemas=PIPPO

In questo caso ho esportato gli schema PIPPO, PLUTO all’interno del file exp_SCHEMAS.dmp
Se volessi attivare il parallelismo dovrei usare lo stesso comando applicando al nome del file %U.dmp e impostando il parametro parallel=4 come nel seguente comando:

expdp "' / as sysdba'" directory=DIR_PROVA dumpfile=exp_SCHEMAS_%U.dmp logfile=exp_full.log schema=PIPPO,PLUTO parallel=4

Export dei soli metadati di un intero schema

Se dovessi salvare tutti i metadati di uno schema, ossia solo le strutture delle tabelle e degli indici occorre eseguire il seguente aggiungere la seguente istruzione:

expdp "' / as sysdba'" directory=DIR_PROVA dumpfile=exp_SCHEMAS.dmp logfile=exp_full.log schema=PIPPO content=METADATA_ONLY

Export di una tabella

L’export di una o più tabelle ha un controllo in più. Oltre a verificare la dimensione che viene effettuato con il seguente comando:

select table_name, bytes/1024/1024 MB from dba_segments where segment_name in ('TAB_PIPPO_1','TAB_PIPPO_2');

Occorre controllare se le tabelle hanno delle referenze con altre tabelle, poichè se così fosse sono da esportare anche le tabelle con la relazione attiva.

set lines 300
spool disable_constraints.sql
select 'alter table '||owner||'.'||table_name||' enable novalidate constraint '||constraint_name||';' from dba_constraints where table_name ='&TABLE';
spool off

Una volta terminato i controlli possiamo eseguire l’export con il seguente comando:

expdp "' / as sysdba'" directory=DIR_PROVA dumpfile=exp_SCHEMAS.dmp logfile=exp_full.log tables=PIPPO.TAB_PIPPO_1,PIPPO.TAB_PIPPO_2

Trasferimento file dump

Quando effettuiamo l’export dei dati e abbiamo il dump di export a disposizione, dobbiamo trasferirlo nel server in cui è presente l’istanza in cui dobbiamo eseguire l’import.

Il trasferimento può essere effettuato sui sistemi Linux e Unix o con il comando:

scp filedump nomeutente@indirizzoip:/path/di/destinazione

O attraverso il protocollo sftp con il seguente comando:

sftp nomeutente@indirizzoip
cd /path/di/destinazione
put nomedump

Per i sistemi MS cercare “Esegui” nella ricerca di Cortana e digita:

\\ipserver\c$

Eseguire il login e trasferire il file.

Ora passiamo alla fase di Import

Quando eseguiamo l’import dei dati, oltre ad eseguire i controlli relativi agli spazi dobbiamo verificare altri tipo di controlli che andiamo a verificare.

Import del database

L’import full del database può essere effettuato nel caso in cui l’ambiente di test deve essere ricoperto completamente. In questo caso può essere effettuato l’import full.
L’unico controllo da eseguire è la presenza dei tablespace esattamente come nell’ambiente in cui sono stati esportati. Nel caso un cui i tablespace dovessero essere diversi occorre aggiungere la clausola REMAP_TABLESPACE=OLD_TBSP:NEW_TBSP

Controllare se sono presenti tablespace come in produzione e controllare le relative dimensioni.
Il controllo può essere effettuato attraverso la query riportata nell’articolo Query per vedere le dimensioni di tutte le TABLESPACE del database Oracle – https://www.scriptdba.com/query-per-vedere-le-dimensioni-di-tutte-le-tablespace-del-database-oracle/

Se non ci fosse abbastanza spazio estendere il/i tablespace.

L’import è eseguito con il seguente comando:

impdp "' / as sysdba'" directory=DIR_PROVA dumpfile=exp_full.dmp logfile=imp_full.log full=y

Eseguire il login e trasferire il file.

impdp "' / as sysdba'" directory=DIR_PROVA dumpfile=exp_full_%U.dmp logfile=imp_full.log full=y parallel=4

Import di uno schema intero

L’import di uno schema può essere richiesto a fronte di una migrazione di dati da un db a un altro o di un refresh dei dati da ambiente di produzione ad ambiente di test.
In fase di refresh dei dati da ambiente di produzione ad ambiente di test, a meno di richieste di salvataggio di qualche in tabella in particolare, si può eseguire la DROP dello schema con il seguente comando:

drop user PIPPO cascade;

Inoltre va eseguito il controllo degli spazi dei tablespace di destinazione.

Il controllo può essere effettuato attraverso la query riportata nell’articolo Query per vedere le dimensioni di tutte le TABLESPACE del database Oracle – https://www.scriptdba.com/query-per-vedere-le-dimensioni-di-tutte-le-tablespace-del-database-oracle/

Infine puoi eseguire l’import con il seguente comando:

impdp "' / as sysdba'" directory=DIR_PROVA dumpfile=exp_SCHEMAS.dmp logfile=impd_full.log schema=PIPPO

Import di un set di tabelle

Per eseguire l’import di alcune tabelle occorre avere alcune informazioni da chi ha richiesto l’allineamento.

Occorre verificare se sono presenti contraint attive con la seguente query:

set lines 300
spool disable_constraints.sql
select 'alter table '||owner||'.'||table_name||' disable novalidate constraint '||constraint_name||';' from dba_constraints where table_name ='&TABLE';
spool off

Inoltre se una tabella è già presente, occorre aggiungere la clausola TABLE_EXISTS_ACTION la quale accetta 4 opzioni:
APPEND – Aggiunge i record duplicandoli
REPLACE – Cancella la tabella e la ricrea
SKIP – Salta la tabella e passa all’oggetto successivo
TRUNCATE – Cancella i record della tabella e li reinserisce

Una volta disabilitate le constraint attive, controllato il tablespace in cui è presente la tabella possiamo eseguire l’import con il seguente comando:

expdp "' / as sysdba'" directory=DIR_PROVA dumpfile=exp_SCHEMAS.dmp logfile=exp_full.log tables=PIPPO.TAB_PIPPO_1,PIPPO.TAB_PIPPO_2 TABLE_EXISTS_ACTION=TRUNCATE

Una volta terminato l’importriabilitare le constraint, modificando i comandi inseriti nel file di spool prodotto prima dell’import cambiando l’istruzione disable con enable.

Queste sono le principali modalità di export e import in data pump.

Resta aggiornato sulle nostre attività entrando a far parte della nostra community:
Facebook
Youtube
Linkedin


0 commenti

Lascia un commento

Segnaposto per l'avatar