Esiste un modo conveniente per importare uno schema in Oracle 11gR2 utilizzando un unico tablespace nuovo o diverso rispetto a dove sono stati originati i dati?
Ad esempio, ho esportato BLOG_DATA da OLDDB, dove tutti i dati dell'utente sono memorizzati nel tablespace USERS.
Su NEWDB, vorrei importare lo schema BLOG_DATA, ma archiviare gli oggetti utente nello spazio tabelle BLOG_DATA, creato appositamente per questo utente.
Ho creato l'utente BLOG_DATA, creato il tablespace BLOG_DATA e impostato come tablespace predefinito per quell'utente e aggiunto una quota illimitata appropriata.
CREATE TABLESPACE blog_data DATAFILE SIZE 1G;
CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;
GRANT connect,resource TO blog_data
Lo schema è stato esportato da OLDDB con qualcosa di simile
exp blog_data/secretpassword@OLDDB file=blog_data.dmp
Dopo aver letto l'eccellente risposta di Phil di seguito, mi sono ritrovato a chiedermi :
Dal momento che i dati non hanno altro posto dove andare rispetto al tablespace predefinito - l'unico tablespace su cui l'utente ha una quota - questo importerà effettivamente l'imp per mettere tutti gli oggetti utente in quel tablespace predefinito?
imp blog_data/secretpassword@NEWDB file=blog_data.dmp
Questo posizionerebbe quindi l'intero schema blog_data nello spazio tabelle blog_data su NEWDB? C'è qualche motivo per cui questo non funzionerebbe o che avrei riscontrato problemi con determinati oggetti, ecc.?
aggiornare:
Ho fatto un rapido test e ho scoperto che era così. Imp
posiziona gli oggetti nel tablespace predefinito per quell'utente, a condizione che non possa posizionarlo nel tablespace originale (ad es. il tablespace non esiste). Spiegazione completa: http://www.dolicapax.org/?p=57
Tuttavia, suppongo che l'uso di Data Pump come suggerisce Phil potrebbe essere l'opzione preferita.
exp
utilità legacy o conexpdp
(data pump)?