Importazione dello schema nel tablespace nuovo o diverso


13

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ì. Impposiziona 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.


È stato esportato utilizzando l' exputilità legacy o con expdp(data pump)?
Philᵀᴹ

Nell'esempio è stato esportato con l'utility exp convenzionale, come mostrato sopra. Suppongo che si potrebbe usare altrettanto facilmente expdp e prelevare il file dal vecchio server db, ciò renderebbe più semplice la transizione a un nuovo tablespace?
Roy,

Ho coperto entrambi nella mia risposta. Usa il data pump - è più facile eseguire questo compito
Phil

Risposte:


15

In realtà non è possibile specificare un tablespace diverso durante l'importazione tramite l' imputility oracle . Tuttavia, come soluzione alternativa, è possibile pre-creare le tabelle eseguendo ROWS=Nun'importazione nel USERStablespace, quindi alter table mytable move tablespace BLOG_DATA;per ogni tabella per spostarle nel nuovo tablespace, quindi eseguire nuovamente l'importazione con il IGNORE=Yparametro per ignorare gli errori di creazione della tabella e importare tutto dei dati.

Se i dati sono stati esportati utilizzando Data Pump ( expdp), (a parte questo, tutti dovrebbero usarlo in questi giorni, piuttosto che i vecchi legacy exp/ imputility), è possibile importare facilmente in un altro tablespace utilizzando il REMAP_TABLESPACEparametro.

per esempio:

impdp scott/tiger@ZOMG file=blog_data.dmp directory=mydir remap_tablespace=USERS:BLOG_DATA

Grazie mille, Phil. Mi stavo chiedendo: se l'utente da importare ha esclusivamente una quota sul tablespace predefinito, questo imp imporrà a posizionare tutti gli oggetti importati in quel tablespace predefinito indipendentemente dal layout sulla fonte dei dati?
Roy,

Sto lavorando a qualcosa di simile ma è un'intera migrazione di DB che utilizza expdp / impdp perché voglio che il nostro ambiente QA corrisponda alla produzione. Se uso remap_tablespace rimapparebbe ogni schema in un altro singolo tablespace, tuttavia penso di poter eseguire il comando impdp una volta per schema e usando remap_tablespace. Questo dovrebbe raggiungere il lavoro.
Nicolas de Fontenay,

0

È necessario seguire i passaggi indicati di seguito: -

  • Esporta l'utente
  • Esegui l'importazione usando il comando
    imp system/manager file=export.dmp indexfile=newfile.sql
    Questo importerà i dati e salverà tutte le definizioni newfile.sql.
  • Rilascia gli oggetti necessari.
  • Esegui lo script newfile.sqldopo aver modificato i tablespace.
  • Importa dal backup per gli oggetti necessari.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.