Gibt es eine bequeme Möglichkeit zum Importieren eines Schemas in Oracle 11gR2 mithilfe eines einzelnen neuen oder anderen Tabellenbereichs als dem, aus dem die Daten stammen?
Als Beispiel habe ich BLOG_DATA aus OLDDB exportiert, wo alle Benutzerdaten im USERS-Tabellenbereich gespeichert sind.
In NEWDB möchte ich das BLOG_DATA-Schema importieren, aber die Benutzerobjekte im BLOG_DATA-Tabellenbereich speichern, der speziell für diesen Benutzer erstellt wurde.
Ich habe den BLOG_DATA-Benutzer erstellt, den BLOG_DATA-Tabellenbereich erstellt und ihn als Standard-Tabellenbereich für diesen Benutzer festgelegt und ein entsprechendes unbegrenztes Kontingent hinzugefügt.
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
Das Schema wurde mit so etwas wie aus OLDDB exportiert
exp blog_data/secretpassword@OLDDB file=blog_data.dmp
Nachdem ich Phils ausgezeichnete Antwort unten gelesen hatte, fragte ich mich :
Da die Daten keinen anderen Speicherort als den Standardtabellenbereich haben - den einzigen Tabellenbereich, für den der Benutzer ein Kontingent festgelegt hat - wird dadurch der IMP gezwungen, alle Benutzerobjekte in diesen Standardtabellenbereich zu verschieben?
imp blog_data/secretpassword@NEWDB file=blog_data.dmp
Würde dies dann das gesamte blog_data-Schema in den blog_data-Tabellenbereich von NEWDB stellen? Gibt es einen Grund, warum dies nicht funktioniert oder ich Probleme mit bestimmten Objekten usw. habe?
aktualisieren:
Ich habe einen kurzen Test gemacht und festgestellt, dass dies der Fall ist. Imp
Platziert Objekte im Standardtabellenbereich für diesen Benutzer, vorausgesetzt, er kann sie nicht im ursprünglichen Tabellenbereich platzieren (z. B. der Tabellenbereich ist nicht vorhanden). Vollständige Erklärung: http://www.dolicapax.org/?p=57
Dennoch denke ich, dass die Verwendung von Data Pump, wie Phil vorschlägt, die bevorzugte Option sein könnte.
exp
Dienstprogramm oder mitexpdp
(Datenpumpe) exportiert ?Antworten:
Es ist nicht möglich, einen anderen Tablespace beim Importieren mit dem Oracle-
imp
Dienstprogramm anzugeben . Um dieses Problem zu umgehen, können Sie die Tabellen vorab erstellen, indem Sie sieROWS=N
in denUSERS
Tabellenbereich importieren , dannalter table mytable move tablespace BLOG_DATA;
für jede Tabelle in den neuen Tabellenbereich verschieben und den Import mit demIGNORE=Y
Parameter erneut ausführen, um die Fehler bei der Tabellenerstellung zu ignorieren und alle zu importieren der Daten.Wenn die Daten mit Data Pump (
expdp
) exportiert wurden (abgesehen davon sollte dies heutzutage jeder verwenden und nicht das alte Legacyexp
/imp
Dienstprogramm), können Sie sie mit demREMAP_TABLESPACE
Parameter problemlos in einen anderen Tablespace importieren .z.B:
quelle
Sie sollten die folgenden Schritte ausführen: -
imp system/manager file=export.dmp indexfile=newfile.sql
Dadurch werden die Daten importiert und alle Definitionen in gespeichert
newfile.sql
.newfile.sql
nachdem Sie die Tablespaces geändert haben.quelle