4 Stimmen

Oracle - Daten in eine Tabelle mit einem anderen Namen importieren?

Ich habe eine große (mehrere GB große) Datendatei aus einer Oracle-Tabelle exportiert. Ich möchte diese Daten in eine andere Oracle-Instanz importieren, aber ich möchte, dass der Tabellenname anders lautet aus der ursprünglichen Tabelle. Ist dies möglich? Und wie?

Sowohl das importierende als auch das exportierende System ist Oracle 11g. Die Tabelle enthält eine BLOB-Spalte, falls dies einen Unterschied macht.

Gracias.

UPDATES :

Die Idee dabei war, eine Tabelle zu aktualisieren und dabei die Ausfallzeit auf dem System, das sie verwendet, so gering wie möglich zu halten. Die Lösung (basierend auf Vincent Malgrat Antwort und APC 's Update) ist:

  1. Angenommen, unser Tabellenname ist A
  2. Ein temporäres Schema erstellen TEMP_SCHEMA
  3. Importieren Sie unsere Daten in TEMP_SCHEMA.A
  4. CREATE REAL_SCHEMA.B AS SELECT * FROM TEMP_SCHEMA.A
  5. DROP TABLE REAL_SCHEMA.A Umbenennen REAL_SCHEMA.A a REAL_SCHEMA.A_OLD
  6. Umbenennen REAL_SCHEMA.B a REAL_SCHEMA.A
  7. DROP REAL_SCHEMA.A_OLD

Auf diese Weise fällt die Ausfallzeit nur während der Schritte 4 und 5 an, die beide unabhängig von der Datengröße sein sollten. Ich werde hier ein Update posten, falls dies nicht funktioniert :-)

5voto

APC Punkte 140727

Wenn Sie die alten Dienstprogramme EXP und IMP verwenden, können Sie dies nicht tun. Die einzige Möglichkeit besteht darin, in eine Tabelle mit demselben Namen zu importieren (obwohl Sie das Schema, dem die Tabelle angehört, ändern könnten).

Sie sagen jedoch, Sie arbeiten mit 11g. Warum verwenden Sie nicht das in 10g eingeführte Dienstprogramm DataPump, das Import und Export ersetzt. Denn in 11g bietet dieses Dienstprogramm die Option REMAP_TABLE, die genau das tut, was Sie wollen.

bearbeiten

Nachdem ich die Kommentare gelesen habe, die der Auftraggeber zu einer anderen Antwort hinzugefügt hat, während ich dies schrieb, glaube ich nicht, dass die Option REMAP_TABLE in ihrem Fall funktionieren wird. Sie benennt nur neue Objekte um. Wenn im Zielschema eine Tabelle mit dem ursprünglichen Namen existiert, schlägt der Import mit ORA-39151 fehl. Das tut mir leid.

bearbeiten bis

Angesichts der Lösung, die der OP schließlich gewählt hat (bestehende Tabelle löschen, durch neue Tabelle ersetzen), gibt es eine Lösung mit Data Pump, die darin besteht, die TABLE_EXISTS_ACTION={TRUNCATE | REPLACE} Klausel. Auswahl von REPLACE lässt die Tabelle fallen, während TRUNCATE nur, ähm, kürzt sie ab. In beiden Fällen müssen wir uns um die Einschränkungen der referentiellen Integrität kümmern, aber auch das ist ein Problem der gewählten Lösung.

Ich schreibe diesen Nachtrag nicht für den Auftraggeber, sondern für andere Suchende, die diese Seite irgendwann in der Zukunft finden.

3voto

Vincent Malgrat Punkte 65127

Ich nehme an, Sie wollen die Tabelle in ein Schema importieren, in dem der Name bereits verwendet wird. Ich glaube nicht, dass Sie den Tabellennamen während des Imports ändern können. Sie können jedoch das Schema mit der Option FROMUSER y TOUSER Option. Damit können Sie die Tabelle in ein anderes (temporäres) Schema importieren.

Wenn dies geschehen ist, kopieren Sie die Tabelle in das Zielschema mit einer CREATE TABLE AS SELECT . Die Zeit, die für das Kopieren der Tabelle benötigt wird, ist im Vergleich zum Importieren vernachlässigbar, so dass dies nicht allzu viel Zeit kostet. Allerdings benötigen Sie während des Vorgangs den doppelten Speicherplatz.

Update

Wie vorgeschlagen von Gary Eine klügere Methode wäre es, im temporären Schema eine Ansicht oder ein Synonym zu erstellen, das auf die neue Tabelle im Zielschema verweist. Sie brauchen die Daten nach dem Import nicht zu kopieren, da sie direkt in die Zieltabelle übernommen werden.

2voto

Sakthi Punkte 21

Verwenden Sie die Option REMAP_TABLE=EXISITNG_TABLE_NAME:NEW_TABLE_NAME in impdp. Dies funktioniert in 11gR2.

1voto

Gandalf Punkte 9365

Importieren Sie sie einfach in eine Tabelle mit demselben Namen und benennen Sie die Tabelle dann um.

1voto

David Aldridge Punkte 50293

Erstellen Sie eine Ansicht als select * from ... die Tabelle, in die Sie importieren möchten, wobei die Ansicht dem Namen der Tabelle im Export entspricht. Ignorieren Sie Fehler beim Import.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X