it-swarm.com.de

ORA-29283: Ungültige Dateioperation ORA-06512: in "SYS.UTL_FILE", Zeile 536

Unten ist der Code, den ich zum Extrahieren von Daten aus einer Tabelle in eine flache Datei verwende. 

BEGIN
    DECLARE
        file_name VARCHAR2(50);
        file_handle utl_file.file_type;
BEGIN
    file_name := 'table.txt';
    file_handle := utl_file.fopen('SEND',file_name,'W');
FOR rec in(
    SELECT            column 1
                ||'~'||column 2
                ||'~'||column 3 out_line
    FROM table1)LOOP
UTL_FILE.PUT_LINE(file_handle,rec.out_line);
UTL_FILE.FFLUSH(file_handle);
END LOOP;
UTL_FILE.FCLOSE(file_handle);
END;
end;

Dieser Code funktioniert gut in unserer Entwicklungsdatenbank, aber der folgende Fehler wird ausgegeben, wenn ich ihn in einer neuen Datenbank ausführe.

Error starting at line 1 in command:
    BEGIN
    DECLARE
        file_name VARCHAR2(50);
        file_handle utl_file.file_type;
BEGIN
    file_name := 'table.txt';
    file_handle := utl_file.fopen('SEND',file_name,'W');
FOR rec in(
    SELECT            column 1
                ||'~'||column 2
                ||'~'||column 3 out_line
    FROM table1)LOOP
UTL_FILE.PUT_LINE(file_handle,rec.out_line);
UTL_FILE.FFLUSH(file_handle);
END LOOP;
UTL_FILE.FCLOSE(file_handle);
END;
end;

Error report:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 7
29283. 00000 -  "invalid file operation"
*Cause:    An attempt was made to read from a file or directory that does
           not exist, or file or directory access was denied by the
           operating system.
*Action:   Verify file and directory access privileges on the file system,
           and if reading, verify that the file exists.

Oracle directory 'SEND' points to some UNIX directory which has rights as 
       'rwxrwsr-x' (Octal 2775)
Oracle Version:11g

Bitte helfen Sie mir, dieses Problem zu lösen.

Jungs, bitte lassen Sie mich wissen, wenn Sie mehr Daten von mir benötigen, um diese Frage zu beantworten.

6
Vivek

@Vivek hat also die Lösung des Problems durch einen Dialog in den Kommentaren und nicht durch eine tatsächliche Antwort erhalten. Wer sagt SO ist eine Q & A-Site kein Forum? Er, ich unter anderen.

In Ermangelung einer akzeptierten Antwort auf diese Frage gebe ich auf jeden Fall einen Link zu einer Antwort von mir zum Thema UTL_FILE.FOPEN(). Finden Sie es hier .

P.S. Ich bezeichne diese Antwort als Community-Wiki, da dies keine richtige Antwort auf diese Frage ist, sondern nur eine Weiterleitung an einen anderen Ort. 

5
APC

Überprüfen Sie unter Windows auch, ob die Datei nicht mit EFS verschlüsselt ist. Ich hatte das gleiche Problem, bis ich die Datei manuell entschlüsselt habe.

0
Khamyl

Dieses Problem hatte ich zwei Tage vor mir und ich habe festgestellt, dass das Verzeichnis, das Sie in Oracle erstellen, zuerst auf Ihrer physischen Festplatte erstellt werden muss. Ich habe diesen Punkt nirgendwo erwähnt, wo ich versuchte, die Lösung dafür zu finden.

d.h.

Wenn Sie ein Verzeichnis erstellt haben, sagen wir 'DB_DIR'.

CREATE OR REPLACE DIRECTORY DB_DIR AS 'E:\DB_WORKS';

Dann müssen Sie sicherstellen, dass DB_WORKS in Ihrem E:\-Laufwerk vorhanden ist. Außerdem stehen dem Oracle-Prozess Lese-/Schreibberechtigungen auf Dateisystemebene zur Verfügung.

Mein Verständnis von UTL_FILE aus meinen Erfahrungen ist unten für diese Art von Operation angegeben.

UTL_FILE ist ein Objekt unter dem SYS-Benutzer. GRANT EXECUTE AUF SYS.UTL_FILE ZU ÖFFENTLICHKEIT; muss angegeben werden, während Sie als SYS angemeldet sind. Andernfalls wird es Fehler in der Prozedur angeben. Jeder kann ein Verzeichnis als .__ erstellen. gezeigt: - CREATE OR REPLACE DIRECTORY DB_DIR AS 'E:\DBWORKS'; Aber CREATE DIRECTORY-Erlaubnis sollte vorhanden sein. Dies kann als .__ gewährt werden. gezeigt: - GRANT ERSTELLEN ALLES VERZEICHNIS AN BENUTZER; während Sie als SYS .__ angemeldet sind. Nutzer. Wenn dies jedoch von einem anderen Benutzer verwendet werden muss, müssen Zuschüsse an diesen Benutzer übergeben werden, andernfalls wird ein Fehler ausgegeben. GRANT READ, WRITE, EXECUTE ON DB_DIR TO Benutzer; während als der Benutzer angemeldet ist, der das Verzeichnis erstellt. Dann kompilieren Sie Ihr Paket. Vor dem Ausführen von Stellen Sie sicher, dass das Verzeichnis physisch in Ihrem .__ vorhanden ist. Platte. Andernfalls wird der Fehler "Invalid File Operation" ausgelöst. (V . WICHTIG) Stellen Sie sicher, dass die Lese-/Schreibberechtigungen auf Dateisystemebene in .__ vorhanden sind. Platz für den Oracle-Prozess. Dies ist getrennt von der DB-Ebene Berechtigungen erteilt. (V. WICHTIG) Prozedur ausführen. Die Datei sollte .__ erhalten. mit der Ergebnismenge Ihrer Abfrage gefüllt werden.

0