DATAPUMP – Daten Import / Export mittels impdp – expdp

von Tobias Redmann

In diesem Post zeige ich grundlegend wie Daten mittels DATAPUMP exportieren (expdp) und in ein anderes DB-Schema mittels impdp importiert werden können.

Dabei wird in diesem Anwendungsbeispiel der Einsatz von REMAP_SCHEMA, QUERY, TABLES sowie TABLE_EXISTS_ACTION Parameter des DATAPUMPs dargestellt.

Grundvoraussetzungen – Database Directory

Grundvoraussetzung für den Export bzw. Import ist ein Oracle Directory mit entsprechenden Schreibberechtigungen auf dem DB-Host.

Beispiel Datenexport – expdp

In diesem Beispiel werden aus der Datenbank alle Daten der TABELLE1 und TABELLE2 aus dem DB-Schema USER_BESSERDICH und Daten der TABELLE3 aus dem DB-Schema USER_KARSTEN mit der ID 1,2 und 3 exportiert. Der fertige Datendump wird dann in das Oracle Directory TESTDATA_DIR abgelegt, also auf dem DB-Host unter /tmp/export_testdata.dmp .

Beispiel Datenimport – impdp

Nun kann der Dump – also die Datei export_testdata.dmp – auf einen anderen DB-Host kopiert oder auf der gleichen Datenbank in andere Schemata importiert werden.

In diesem Beispiel werden die Daten von zwei Schemata (USER_KARSTEN und USER_BESSERDICH) in ein anderes Schema – NEW_USER – importiert und entsprechend gemappt. Grundvoraussetzung ist natürlich, dass die Tabellenstrukturen der 3 Tabellen auf dem Zielschema vorhanden ist!

Sofern in der Zielstruktur Daten vorhanden sind, werden diese gelöscht – wird durch den Befehl TABLE_EXISTS_ACTION initiiert.

Problematik – ForeignKeys

Wenn Tabellen Abhängigkeiten in Form von Foreign Keys aufweisen, wird das Importieren der Daten auf einen Fehler laufen. Ich weiß leider nicht warum der DATAPUMP keine Option besitzt die vorhanden ForeignKeys während des Importes zu deaktivern – jedenfalls führe ich grundsätzlich folgende Statements – am Besten in separate SQL-Plus Scripte auslagern – aus.

Sollten sich ForeignKeys nicht einschalten lassen, so liegt ein Datenschiefstand vor, d.h. die Daten passen nicht zueinander.

4 KOMMENTARE

avatar placeholder
14
.
12
.
2017
 von  Juergen Donnerstag
Hallo Karsten. Ich habe Data Pump Export Files nach AWS S3 übertragen. Allerdings finde ich keine Beispiele oder Hinweise, wie ich die Daten aus dem S3 Storage mittels Oracle Data Pump in eine RDS Oracle Instanz importieren kann. Hast du da vielleicht eine Idee? Vielen Dank Jürgen
avatar placeholder
15
.
12
.
2017
 von  Karsten Besserdich
Hallo Jürgen, wenn der Dump auf S3 liegt, musst du diesen erst wieder auf das System kopieren wo du das Programm Datapump ausführst - idealerweise auf dem DB-Host, da es hier am schnellsten geht. Ich würde auf dem DB-Host die AWS-CLI installieren und vor dem Import den Dump vom S3-Bucket kopieren. Das könnte wie folgt bei dir aussehen. aws s3 cp s3://meine-dumps/dump01.zip /tmp/dump01.zip Das packst du dann alles in ein Shellscript und löscht nach dem Import das Dump-File. :-)
avatar placeholder
17
.
01
.
2018
 von  Jürgen
Hallo Karsten, AWS scheint keine Möglichkeiten zu bieten das dmp File direct in das DATA_PUMP_DIR der RDS Instanz zu kopieren, oder? expdp/impdp funktioniert (glaube ich) funktioniert ausschliesslich zwischen 2 Oracle Instanzen. Wenn ich also ein *.dmp File in eine RDS Oracle Instanz importieren möchte, brauche ich zwangsweise Zugriff und Rechte auf eine 2te Instanz. Was ist der beste Weg, wenn ich aber keinen Zugriff auf die Source-DB habe, sondern nur das *.dmp File? Gefunden habe ich lediglich zwei Krücken: 1) ein Perl-Script welches UTL_FILE.PUT_RAW verwendet. Interessanterweise habe ich keine Implementierungen in anderen Sprachen (Python, Java, Go, etc.) gefunden 2) Oracle Express auf einer EC2 Instanz installieren, das dmp File in dessen DATA_PUMP_DIR kopieren, und dann den mehr oder weniger überall beschrieben Prozess unter Verwendung von 2 Oracle Instanzen anwenden Kennst du noch einen anderen Weg? Vielen Dank
avatar placeholder
09
.
01
.
2020
 von  Axel Burghof
Hallo, das Problem mit den Foreign Keys bei impdp ist mir noch nicht begegnet. Kann es sein, dass dies nur bei DATA_ONLY auftritt? Ich verwende expdp/impdp wie folgt: expdp \'/ as sysdba \' dumpfile=alt.dmp logfile=expdp.log directory=data_pump_dir schemas=alt impdp \'/ as sysdba \' remap_schema=alt:neu remap_tablespace=alt:neu dumpfile=alt.dmp logfile=impdp.log TABLE_EXISTS_ACTION=replace EXCLUDE=user VERSION=12.1 Happy Hacking

SCHREIBEN SIE EINEN KOMMENTAR