Panoramica di un bug interessante

Spesso è essere necessario caricare i dati nel database sotto uno schema diverso e in un diverso tablespace.
Con Oracle Data Pump tutto questo è possibile in un modo molto semplice. Tra le varie opzioni della routine impdp si possono trovare:
REMAP_SCHEMA
REMAP_TABLESPACE
REMAP_SCHEMA consente di caricare gli oggetti esportati sotto uno schema diverso;
REMAP_TABLESPACE consente di caricare gli oggetti esportati sotto un tablespace diverso.
Ovviamente, le opzioni possono essere utilizzate separatamente.
Per esempio, se abbiamo la ADMIN.TAB1 sul tablespace ADMIN_TBS (che non è il tablespace predefinito di schema ADMIN):
SQL> select owner, segment_name, tablespace_name from dba_segments where segment_name=’TAB1′
OWNER SEGMENT_NAME TABLESPACE_NAME
———— —————— ——————————
ADMIN TAB1 ADMIN_TBS
Esportiamo lo schema ADMIN (che per comodità possiamo immaginare contenga solo la tabella TAB1) utilizzando un parfile come:
DIRECTORY=MYDIR
DUMPFILE=expdp_ADMIN.dmp
LOGFILE=expdp_ADMIN.log
SCHEMAS=ADMIN
A questo punto è possibile effettuare l’import (anche sullo stesso database) facendo ricreare ad ADMIN gli oggetti sotto lo schema TEST e nel tablespace TEST_TBS.
L’importazione può essere fatta con un parfile come:
DIRECTORY=MYDIR
DUMPFILE=expdp_ADMIN.dmp
LOGFILE=impdp_ADMIN.log
REMAP_SCHEMA=ADMIN:TEST
REMAP_TABLESPACE=ADMIN_TBS:TEST_TBS
In una situazione come questa mi è successo che la ricreazione degli oggetti avesse successo, ma che la procedura rimanesse in blocco.
Tutto questo è legato al bug 6807289 documentato nel metalink nota Oracle “Bug 6807289: IMPDP REMAP_SCHEMA WITH TABLE AND STATISTICS AT REMAP_TABLESPACE HANGS”
Il bug è presente e non è ancora stato risolto nella versione 10.2.0.3.
Per raggirare il problema è necessario aggiungere nei parametri di importazione:
EXCLUDE=STATISTICS
e lanciare le statistiche manualmente dopo aver completato l’importazione.
In questo modo l’importazione termina e il risultato finale nel caso di importazione sullo stesso database è il seguente:
SQL> select owner, segment_name, tablespace_name from dba_segments where segment_name=’TAB1′
OWNER SEGMENT_NAME TABLESPACE_NAME
———— —————— ——————————
ADMIN TAB1 ADMIN_TBS
TEST TAB1 TEST_TBS

Potrebbero interessarti anche...