Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So lösen Sie ORA-29913 mit externen Tabellen auf

ORA-29913 ist einer der häufigsten Fehler beim Arbeiten mit externen Tabellen in der Oracle-Datenbank. Wir würden uns verschiedene Möglichkeiten ansehen, wie der Fehler erzeugt werden kann, und was getan werden kann, um den Fehler zu beheben

(1) Externe Datei nicht gefunden oder Berechtigung falsch

SQL> select * from Scott.example_external_table;
select * from example_external_table
*
FEHLER in Zeile 1:
ORA-29913:Fehler beim Ausführen des Aufrufs ODCIEXTTABLEOPEN
ORA- 29400:Datenkassettenfehler
KUP-04040:Datei test1.dat in TEST_DIR nicht gefunden
ORA-06512:bei "SYS.ORACLE_LOADER", Zeile 14
ORA-06512:bei Zeile 1

Beim Analysieren der Tabelle erhalten Sie eine ähnliche Meldung:

SQL> execute sys.dbms_stats.gather_table_stats(‘SCOTT’,’EXAMPLE_EXTERNAL_TABLE’);
BEGIN sys.dbms_stats.gather_table_stats(‘SCOTT’,’EXAMPLE_EXTERNAL_TABLE’); END;
*
FEHLER in Zeile 1:
ORA-29913:Fehler beim Ausführen des ODCIEXTTABLEOPEN-Callouts
ORA-29400:Datenkassettenfehler
KUP-04040:Dateitest1 .dat in TEST_DIR nicht gefunden
ORA-06512:bei „SYS.DBMS_STATS“, Zeile 7161
ORA-06512:bei „SYS.DBMS_STATS“, Zeile 7174
ORA-06512:bei Zeile 1

Oder allgemein

ORA-20011:Ungefähres NDV fehlgeschlagen:

ORA-29913:Fehler beim Ausführen des ODCIEXTTABLEOPEN-Callouts
ORA-29400:Datenkassettenfehler
KUP-04040:Datei in nicht gefunden

Grund

Die externen Dateien wurden vom richtigen Ort verschoben

SQL> select * from dba_directories;

EIGENTÜMER DIRECTORY_NAME DIRECTORY_PATH
------ -------------- -----------------------
SYS TEST_DIR /u01/oradata/externe_Dateien

Überprüfen Sie die mit der externen Tabelle verknüpften Dateinamen

select * from dba_external_locations
where table_name='EXAMPLE_EXTERNAL_TABLE';OWNER TABLE_NAME LOCATION DIRECTORY_OWNER DIRECTORY_NAME
----- ------------- -------- --------------- ---------------
SYS BEISPIEL_EXTERNE_TABELLE test1.dat SYS TEST_VERZ
SYS BEISPIEL_EXTERNE_TABELLE test2.dat SYS TEST_DIR

Jetzt Überprüfung auf Betriebssystemebene
$ cd /u01/oradata/external_files
$ ls test[1-2]/dat
Keine solche Datei oder Verzeichnis

Dateien sind also nicht am richtigen Ort vorhanden

Beide obigen Abfragen können auch wie unten kombiniert werden

select TABLE_NAME, DIRECTORY_PATH||'/'||LOCATION file_name from DBA_EXTERNAL_LOCATIONS loc, dba_directories dir
wobei loc.DIRECTORY_OWNER=dir.OWNER
und loc.DIRECTORY_NAME=dir.DIRECTORY_NAME
und loc. OWNER='&1' und loc.TABLE_NAME='&2';

Lösung:
Verschieben Sie beide Dateien zurück an den ursprünglichen Speicherort

$ mv /u02/oradata/externe_dateien/test2.dat /u01/oradata/externe_dateien
$ mv /u02/oradata/externe_dateien/test1.dat /u01/oradata/externe_dateien

Jetzt
Sowohl die unten stehende Anweisung wird erfolgreich sein

select * from Scott.example_external_table;execute sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');

(2) Falsches Datenformat in externer Datei

FEHLER in Zeile 1:
ORA-29913:Fehler beim Ausführen des ODCIEXTTABLEFETCH-Callouts
ORA-30653:Ablehnungsgrenze erreicht
ORA-06512:bei „SYS.ORACLE_LOADER“, Zeile 14
ORA-06512:bei Zeile 1

Grund

(i) Die externe Datei enthält möglicherweise Leerzeilen
(ii) Überprüfen Sie das TAB-Trennzeichen oder das HEX-Trennzeichen

a. Das von Oracle verwendete TAB-Trennzeichen „\t“ wird durch einen HEX-Wert „09“ dargestellt
b. Der HEX-Wert in der Datendatei sollte mit dem HEX-Wert übereinstimmen, der in der
CREATE-Anweisung
c angegeben ist. Die HEX-Spezifikation in der CREATE-Anweisung sollte wie folgt aussehen:0X'gt;' oder 0x''
(iii) Wenn die Spalte der externen Tabelle hinzugefügt wird, sollte dieselbe in der vorhanden sein externe Datei

Auflösung
Überprüfen Sie den Fehler im Protokoll und beheben Sie das Problem entsprechend

(3) Fehler bei Null-Spalte

FEHLER in Zeile 1:
ORA-29913:Fehler beim Ausführen des ODCIEXTTABLEOPEN-Callouts
ORA-29400:Datenkassettenfehler
KUP-04043:Tabellenspalte nicht in externer Quelle gefunden:

Grund
Die externe Datei hat Nullwerte für die letzte Spalte, die ursprünglich eine Zahlenspalte ist. Wenn wir die Null in eine Zahl 0 ändern, ist die Abfrage erfolgreich.

Auflösung
Um einen NULL-Wert zu laden, müssen wir das Trennzeichen ENCLOSED BY in die Tabellendefinition aufnehmen.

durch Zeilenumbruch getrennte Datensätze
mit ',' abgeschlossene Felder
optional eingeschlossen durch ' ' <<<=====
fehlende Feldwerte sind null

(4) ORA-29913 kann auch auftreten, wenn Oracle nicht in der Lage ist, die Protokolldateien ebenfalls zu erstellen. Also überprüfen Sie die Berechtigung der Verzeichnisse

(5) Externer Tabellenverzeichnisfehler
Der ORA-29913-Fehler kann auch in externen Tabellen auftreten, wenn Sie dem Verzeichnis keine Lese- und Schreibberechtigungen erteilen:

VERZEICHNIS EXTDIR ERSTELLEN ODER ERSETZEN ALS „/u01/oradata/testdir“;
GEWÄHREN SIE DAS LESEN AUF DEM VERZEICHNIS testdir TO ;
GEWÄHREN SIE DAS SCHREIBEN AUF DEM VERZEICHNIS testdir TO ;

Hier sind einige gute Informationen über externe Tabellen, die Sie sich ansehen sollten

Was sind EXTERNE TABELLEN in Oracle?

(1)Externe Tabellen sind Nur-Lese-Tabellen, in denen die Daten in Flatfiles außerhalb der Datenbank gespeichert werden

(2) Sie können die Funktion für externe Tabellen verwenden, um auf externe Dateien zuzugreifen, als wären sie Tabellen in der Datenbank.

(3)   Wenn Sie eine externe Tabelle erstellen, definieren Sie ihre Struktur und Position mit in Oracle. Im Grunde speichern Sie einfach die Metadaten im Orakel

(4) Wenn Sie die Tabelle abfragen, liest Oracle die externe Tabelle und gibt die Ergebnisse zurück, als wären die Daten in der Datenbank gespeichert worden.

(5) Der Oracle-Server bietet zwei wichtige Oracle-Treiber zum Lesen der Flatfiles

  • Oracle_loader:Dies wird zum Lesen der Flatfiles unter Verwendung der Oracle-Loader-Technologie verwendet. Es ermöglicht grundsätzlich das Lesen der Dateien, die mit der SQL-Loader-Technologie interpretiert werden können
  • Oracle_datapump:Dies wird sowohl zum Importieren als auch zum Exportieren von Daten unter Verwendung eines plattformunabhängigen Formats verwendet

Verwandte Artikel
Externe Oracle-Tabellen:In diesem Beitrag finden Sie Informationen zur Verwendung externer Tabellen in Oracle mit Beispielen, wie externe Tabellen erstellt und verwendet werden
Oracle-Tabelle erstellen:Tabellen sind die Grundeinheit der Datenspeicherung in einer Oracle-Datenbank. Wir behandeln die Verwendung des Oracle-Befehls „Create Table“, um eine Tabelle mit Fremdschlüssel/Primärschlüssel zu erstellen wir können es vermeiden, Oracle bugs für diese Fehler
ORA-01017:ungültiger Benutzername/Passwort; Anmeldung verweigert:Informieren Sie sich über die mögliche Auflösung von ORA-01017 ungültiger Benutzername/Passwort; Anmeldung verweigert. So beheben Sie es schnell und ohne großen Aufwand
ORA-00001 eindeutige Einschränkung verletzt :Sehen Sie sich diesen Beitrag für die mögliche Lösung für den Oracle-Fehler ORA-00001 eindeutige Einschränkung verletzt an. Wie man es löst und repariert
ORA-00911:Ungültiges Zeichen:Dieser Beitrag ist für häufige Ursachen von ORA-00911:Ungültiges Zeichen in Oracle mit Beispielen und Lösungen, die Ihnen helfen, den Job abzuschließen
ORA-00900:Dieser Beitrag enthält verschiedene Lösungen für die ungültige SQL-Anweisung von ORA-00900. Gründe für den Fehler. Wie man ihn schnell debuggt und löst,
ORA-03113:Dateiende im Kommunikationskanal:Überprüfen Sie die Methode zur Auflösung von ORA -03113:Dateiende auf Kommunikationskanal. Dieser Fehler kann beim Starten der Datenbank und beim Ausführen des Programms
Oracle-Dokumentation

auftreten

Empfohlene Kurse

Hier ist der nette Udemy-Kurs für Oracle SQL
Oracle-Sql-Schritt-für-Schritt :Dieser Kurs behandelt grundlegendes SQL, Joins, Erstellen von Tabellen und Ändern ihrer Struktur, Erstellen von Ansichten, Union, Union -all und vieles mehr . Ein großartiger Kurs und ein Muss für SQL-Einsteiger
Der vollständige Oracle SQL-Zertifizierungskurs :Dies ist ein guter Kurs für alle, die für SQL-Entwicklerfähigkeiten einsatzbereit werden möchten. Ein gut erklärter Kurs
Oracle SQL Developer:Grundlagen, Tipps und Tricks :Das Oracle Sql-Entwicklertool wird von vielen Entwicklern verwendet. Dieser Kurs gibt uns Tricks und Lektionen, wie man es effektiv nutzt und ein produktiver SQL-Entwickler wird
Oracle SQL Performance Tuning Masterclass 2020 :Leistungsoptimierung ist eine der wichtigsten und gefragtesten Fähigkeiten. Dies ist ein guter Kurs, um mehr darüber zu erfahren und mit der Optimierung der SQL-Leistung zu beginnen