2017-04-10 2 views
0

ich ein bereitgestelltes Verzeichnis wie folgt haben:UTL Dateiumbenennungs- Vorgang ist fehlgeschlagen

etc/fstab

10.100.52.12:/ftp /ftp nfs rw,bg,hard,nointr,rsize=1048576,wsize=1048576,tcp,vers=3,timeo=60,actimeo=0 0 0

# ll

drwxr-xr-x 6 root  1000  62 Mar 29 13:48 ftp 

So habe ich zu ‚bewegen‘ eine Datei aus diesem Verzeichnis in ein Verzeichnis innerhalb ACFS

drwxrwxrwx 6 oracle oinstall 4096 Apr 10 09:34 ftp_files 

sind diese anstelle der priv

(GRANTEE,TABLE_NAME,PRIVILEGE) 
PUBLIC FTP_IN READ 
PUBLIC FTP_IN WRITE 
DB_SCHEMA FTP_OUT READ 
DB_SCHEMA FTP_OUT WRITE 

ich diese ausführen, um die Dateien zu verschieben

declare 
SRC  CONSTANT VARCHAR2(50) := 'FTP_IN'; 
DST  CONSTANT VARCHAR2(50) := 'FTP_OUT'; 

begin 
    UTL_FILE.FRENAME(
     src_location => SRC, 
     src_filename => 'test.txt', 
     dest_location => DST, 
     dest_filename => 'test.txt', 
     overwrite => FALSE); 
end; 

aber es funktioniert nicht, bekomme ich

ORA-29292: file rename operation failed 
ORA-06512: a "SYS.UTL_FILE", line 348 
ORA-06512: a "SYS.UTL_FILE", line 1290 
ORA-06512: a line 6 
29292. 00000 - "file rename operation failed" 
*Cause: A file rename attempt was refused by the operating system 
      either because the source or destination directory does not 
      exist or is inaccessible, or the source file isn't accessible, 
      or the destination file exists. 
*Action: Verify that the source file, source directory, and destination 
      directory exist and are accessible, and that the destination 
      file does not already exist. 

-rw-r--r-- 1 oracle oinstall 0 Apr 10 14:47 test.txt 

Aber wenn ich nur versuche, die Datei statt frename es zu löschen, funktioniert es. Also was könnte das sein? Hier

ist die Ausgabe von DBA_DIRECTORIES:

SYS FTP_IN /sftp 
SYS FTP_OUT /acfs/external/ftp_files 


CREATE DIRECTORY FTP_IN as '/ftp'; 
GRANT READ, WRITE ON DIRECTORY FTP_IN TO DB_SCHEMA; 
GRANT EXECUTE, READ, WRITE ON DIRECTORY FTP_IN TO SYSTEM WITH GRANT OPTION; 

Dank

TESTEN UTL_FILE.FOPEN (SRC)

declare 
SRC  CONSTANT VARCHAR2(50) := 'FTP_IN'; 
DST  CONSTANT VARCHAR2(50) := 'FTP_OUT'; 
l_file  UTL_FILE.FILE_TYPE; 

begin 

    l_file:=utl_file.fopen(SRC,'test.txt','W'); 
    UTL_FILE.PUT_LINE(l_file, CONVERT('test', 'AL32UTF8')); 
    UTL_FILE.FCLOSE(l_file); 

end; 

-rw-r--r-- 1 oracle oinstall 5 Apr 10 15:21 test.txt 

TESTEN UTL_FILE.FOPEN (DST)

declare 
SRC  CONSTANT VARCHAR2(50) := 'FTP_IN'; 
DST  CONSTANT VARCHAR2(50) := 'FTP_OUT'; 
l_file  UTL_FILE.FILE_TYPE; 

begin 

    l_file:=utl_file.fopen(DST,'test.txt','W'); 
    UTL_FILE.PUT_LINE(l_file, CONVERT('test', 'AL32UTF8')); 
    UTL_FILE.FCLOSE(l_file); 

end; 

-rw-r--r-- 1 oracle oinstall 5 Apr 10 15:29 test.txt 
[[email protected] ftp_files]$ pwd 
/acfs/external/ftp_files 
[[email protected] ftp_files]$ 

https://asktom.oracle.com/pls/apex/f?p=100:12:0::NO::P12_ORIG,P12_PREV_PAGE,P12_QUESTION_ID:Y,1,9534424300346182278

+0

Wie haben Sie Ihre Dir deklariert?Was ist das Ergebnis von 'SELECT * from DBA_DIRECTORIES, wo DIRECTORY_NAME wie 'FTP%''? –

+0

Bitte bearbeiten Sie Ihre Frage, um weitere Informationen hinzuzufügen. Kommentare für Kommentare speichern – APC

Antwort

0

„Wenn ich versuche, nur die Datei statt frename zu löschen, es funktioniert .. Also, was das sein könnte?“

Das Betriebssystem-Quellverzeichnis existiert also und das oracle OS-Konto hat Schreibrechte darauf.

Aber das frename Versagen läßt vermuten, dass entweder:

  • das O Zielverzeichnis nicht existiert, oder
  • das oracle O Konto keine Schreibrechte auf sie, oder
  • die Datenbank Directory-Objekt wurde falsch definiert, oder
  • das OS-Zielverzeichnis enthält bereits eine Datei mit diesem Namen.
+0

Wenn ich als Orakelbenutzer logge, kann ich mv über bash laufen lassen. Jedenfalls läuft das Frename mit Überschreiben als wahr, ändert nichts –

Verwandte Themen