External Table-Probleme mit deutschen Spracheinstellungen in Version 10.2.0.2

04.
Juni
2009
Veröffentlicht von: Hildegard Asenbauer

External Tables sind ein recht praktischer Weg, wenn Daten aus Flatfiles regelmäßig geladen werden sollen. Wenn beispielsweise ein täglicher Ladelauf erfolgen soll, so muss nur sichergestellt werden, dass die Datei mit den Daten rechtzeitig und am richtigen Ort vorliegt. Ein zusätzlicher SQL*Loader-Aufruf ist in diesem Fall dann nicht mehr nötig, da direkt über einen SELECT auf die Daten zugegriffen werden kann. Einzelheiten zu External Tables mit einem Beispiel finden Sie hier.

External Tables sind ein recht praktischer Weg, wenn Daten aus Flatfiles regelmäßig geladen werden sollen. Wenn beispielsweise ein täglicher Ladelauf erfolgen soll, so muss nur sichergestellt werden, dass die Datei mit den Daten rechtzeitig und am richtigen Ort vorliegt. Ein zusätzlicher SQL*Loader-Aufruf ist in diesem Fall dann nicht mehr nötig, da direkt über einen SELECT auf die Daten zugegriffen werden kann. Einzelheiten zu External Tables mit einem Beispiel finden Sie hier.

Vor kurzem wählten wir in einem Projekt diesen Weg und stolperten dabei über einen Oracle-Bug, da der Kunde noch mit der Datenbank-Version 10.2.0.2 und mit deutschen Spracheinstellungen arbeitete. Sowohl das Oracle-Directory als auch die Tabelle waren angelegt, und auch die Datendatei war im richtigen Verzeichnis vorhanden.


Das Problem…

Beim Zugriff auf die External Table folgte dann die Überraschung:

ORA-29913: Fehler bei der Ausführung von Aufruf ODCIEXTTABLEOPEN
ORA-29400: Data Cartridge-Fehler
KUP-00552: internal XAD package failed to load
ORA-06512: in "SYS.ORACLE_LOADER", Zeile 19


Die Lösung…

Das Problem tritt auf bei nicht-englischsprachigen NLS-Einstellungen (in diesem Fall deutsch) und kann folgendermaßen behoben werden:

  1. Gehen Sie in das Verzeichnis <ORACLE_HOME>/rdbms/mesg (bzw. <ORACLE_HOME>\rdbms\mesg)
  2. Ersetzen Sie die zu Ihren Spracheinstellungen passende kup<lang>.msb-Datei (deutsche Version: kupd.msb) durch die amerikanische Version:

    a) Benennen Sie die vorhandene Datei um, beispielsweise zu kupd.msb.save

    b) Erstellen Sie im selben Verzeichnis eine Kopie der amerikanischen Datei (kupus.msb) unter diesem Namen (kupd.msb)


In Version 10.2.0.3 ist der Fehler behoben.

Bei den kup<lang>.msb-Dateien handelt es sich um die zu der jeweiligen Spracheinstellung passende Fehlermeldungen. Unter Verwendung von kupus.msb erscheinen daher die KUP-Fehlermeldungen in englisch. Fehlt etwa in diesem Beispiel die externe Datei emp1.dat, so wird die Fehlermeldung in 10.2.0.2 mit angegebenem Workaround in englisch angezeigt:

ORA-29913: Fehler bei der Ausführung von Aufruf ODCIEXTTABLEOPEN
ORA-29400: Data Cartridge-Fehler
KUP-04040: file emp1.dat in EMP_DIR not found
ORA-06512: in "SYS.ORACLE_LOADER", Zeile 19


In Version 10.2.0.3 (ohne obigen Workaround) dagegen in deutsch:

ORA-29913: Fehler bei der Ausführung von Aufruf ODCIEXTTABLEOPEN
ORA-29400: Data Cartridge-Fehler
KUP-04040: Datei emp1.dat in EMP_DIR nicht gefunden
ORA-06512: in "SYS.ORACLE_LOADER", Zeile 19

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.