DATAPUMP exportiert falschen DEFAULT Tablespace bei partitionierten Segmenten

von Karsten Besserdich

Mittels Oracle Datapump wurde ein Export – expdp – einer Datenbank durchgeführt. Beim Import – impdp – des Dumps konnten einige Segmente (Tabellen und Indizes) aufgrund fehlender Tablespaces nicht angelegt werden. Die vom Datapump vermeintlich fehlenden Tablespaces waren jedoch noch nicht einmal auf dem Quellsystem vorhanden, was mich schon sehr verwunderte. Eine Gemeinsamkeit hatten alle Segmente – sie waren partitioniert.

Wo lag nun der Fehler? Beim Datapump Export oder beim Import oder war gar das DataDictionary des Quellsystems korrupt? Nach einigen Stunden Suche hatte ich auf das eigentliche Problem entdeckt.

Beim Anlegen eines partitionierten Segmentes wurde ein Default Tablespace angegeben, welcher im Laufe der Zeit umbenannt oder gelöscht wurde. Im DataDictionary findet keine automatische Umbenennung bzw. Korrektur statt.

Problemdarstellung

Das folgende Demoscript stellt das eigentliche Problem detailiert dar.

Schritt 3 – DDL Generierung – nochmals ausführen und man sieht, dass der Default Tablespace sich nicht geändert hat. Das hat zur Folge, dass die Import der Tabelle nicht funktioniert hätte.

Folgende SQL Befehle löschen die Segmente und Tablespaces des Demoscriptes aus der DB.

Lösungsansatz

Für mich stellt sich die eigentliche Frage, ist das ein Bug oder Feature? M.E. darf ein Tablespace nicht gelöscht werden, wenn dieser in irgend einer Art und Weise von einem Segment referenziert wird – in diesem Fall der Default Tablespace. Zumindest sollte die Datenbank den Default Tablespace der Tabelle auf den Default Tablespace des Users ändern.

Um das Problem im Quellsystem zu beheben, habe ich folgendes Script entwickelt, welches alle Default Tablespaces ermittelt, die es in Wirklichkeit gar nicht mehr gibt. Diese werden dann auf den Default Tablespace des USERs geändert. Somit ist sichergestellt, dass bei einem Export mittels Datapump ein erfolgreicher Import durchgeführt werden kann.

SCHREIBEN SIE EINEN KOMMENTAR