it-swarm.com.de

fehler sqlplus bei Auswahl aus externer Tabelle: ORA-29913: Fehler beim Ausführen des Aufrufs ODCIEXTTABLEOPEN

Ich habe einen einfachen externen Oracle-Tabellentest eingerichtet, den ich (neben einem DBA- und Unix-Administrator) nicht zur Verfügung stellen kann.

Folgendes basiert auf Oracle External Tables Concepts . Die Datenbank, die wir verwenden, ist 11g.

Dies ist die externe Tabellendefinition:

drop table emp_load;

CREATE TABLE emp_load
    (employee_number      CHAR(5),
     employee_dob         DATE,
     employee_last_name   CHAR(20),
     employee_first_name  CHAR(15),
     employee_middle_name CHAR(15),
     employee_hire_date   DATE)
  ORGANIZATION EXTERNAL
    (TYPE Oracle_LOADER
     DEFAULT DIRECTORY defaultdir
     ACCESS PARAMETERS
       (RECORDS DELIMITED BY NEWLINE
        FIELDS (employee_number      CHAR(2),
                employee_dob         CHAR(20),
                employee_last_name   CHAR(18),
                employee_first_name  CHAR(11),
                employee_middle_name CHAR(11),
                employee_hire_date   CHAR(10) date_format DATE mask "mm/dd/yyyy"
               )
       )
     LOCATION ('external_table_test.dat')
);

Dies ist der Inhalt von "external_table_test.dat":

56november, 15, 1980  baker             mary       alice      09/01/2004
87december, 20, 1970  roper             Lisa       marie      01/01/1999

Ich kann das Skript ausführen, mit dem "emp_load" ohne Probleme erstellt wird. Ich kann die Tabelle auch gut beschreiben. Wenn ich versuche, * aus Emp_load auszuwählen, erhalte ich folgende Fehler:

SQL> select * from emp_load;
select * from emp_load
              *
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
error opening file /defaultdir/EMP_LOAD_29305.log

BEARBEITEN 1
Oracle verfügt über Lese- und Schreibberechtigungen für das Verzeichnis.

BEARBEITEN 2
Ich konnte diesen Fehler mit der folgenden externen Tabellendefinition übergeben:

CREATE TABLE emp_load
    (employee_number      CHAR(3),
     employee_last_name   CHAR(20),
     employee_middle_name CHAR(15),
     employee_first_name  CHAR(15)
     )
  ORGANIZATION EXTERNAL
    (TYPE Oracle_LOADER
     DEFAULT DIRECTORY defaultdir
     ACCESS PARAMETERS
       (RECORDS DELIMITED BY NEWLINE
        BADFILE DHHSMAPSIS:'EMP.BAD'
        LOGFILE DHHSMAPSIS:'EMP.LOG'
        FIELDS TERMINATED BY ','
       )
    LOCATION ('external_table_test2.dat')
)
REJECT LIMIT UNLIMITED;

Meine DAT-Datei sieht so aus ...

056,baker,beth,mary
057,smith,teddy,john

Ich musste die Berechtigungen für "EMP.BAD", "EMP.LOG" und "external_table_test2.dat" auf 777 setzen, damit es funktioniert. Der Oracle-Benutzer besitzt diese Dateien nicht, sondern befindet sich in derselben Gruppe wie die Dateien.

Irgendeine Idee, warum ich das nicht zum Laufen bringen kann, wenn ich die Berechtigungen für diese Dateien auf 770 setze? Auch hier befindet sich Oracle in derselben Gruppe wie diese Dateien, also dachte ich, dass 770 für Berechtigungen in Ordnung wäre ...

7
Zack Macomber

Unsere Oracle-Version läuft unter Red Hat Enterprise Linux. Wir haben mit verschiedenen Arten von Gruppenberechtigungen ohne Erfolg experimentiert. Das Verzeichnis/defaultdir enthielt eine Gruppe, die eine sekundäre Gruppe für den Oracle-Benutzer war. Als wir das Verzeichnis/defaultdir für eine Gruppe von "oinstall" (primäre Gruppe von Oracle) aktualisiert haben, konnte ich problemlos aus den externen Tabellen unter diesem Verzeichnis auswählen.

Für andere, die dieses Problem möglicherweise haben, legen Sie fest, dass das Verzeichnis die primäre Gruppe von Oracle als Gruppe hat, und es könnte für Sie so gelöst werden, wie es uns tat. Wir konnten die Berechtigungen für das Verzeichnis und die Dateien auf 770 setzen. Die Auswahl für die externen Tabellen funktioniert jetzt einwandfrei.

4
Zack Macomber

Beachten Sie, dass der Benutzer, der die Oracle-Datenbank ausführt, über Schreibberechtigungen für das Verzeichnis/defaultdir verfügen muss, nicht den bei Oracle angemeldeten Benutzer. Normalerweise führen Sie die Datenbank als Benutzer "Oracle" aus. Es ist nicht unbedingt derselbe Benutzer, mit dem Sie die externe Tabelle erstellt haben.

Überprüfen Sie auch Ihre Verzeichnisberechtigungen.

1
DCookie

Wir standen vor demselben Problem:

ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error error opening file /fs01/app/rms01/external/logs/SH_EXT_TAB_VGAG_DELIV_SCHED.log

In unserem Fall hatten wir einen RAC mit 2 Knoten. Nachdem Sie die Schreibberechtigung für das Protokollverzeichnis erteilt haben, auf beiden Seiten , hat alles gut funktioniert.

1
Timo

Wir hatten diesen Fehler unter Oracle RAC 11g unter Windows. Die Lösung bestand darin, auf beiden Knoten dieselbe Verzeichnisstruktur und dieselbe externe Betriebssystemdatei zu erstellen.

0
Carlo