0

I have a mounted directory as follow:

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 I have to 'move' a file from this directory to a directory inside ACFS

drwxrwxrwx 6 oracle oinstall  4096 Apr 10 09:34 ftp_files

these instead are the priv

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

I execute this to move the files

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;

but it doesn't work, I get

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

But if I just try to delete the file instead of frename it, it works. So what this could be?

Here is the output from 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;

Thanks

TESTING 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

TESTING 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
[oracle@db01 ftp_files]$ pwd
/acfs/external/ftp_files
[oracle@db01 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

Mike John
  • 75
  • 2
  • 8
  • how did you declare your dirs? what is the result of `SELECT * from DBA_DIRECTORIES where DIRECTORY_NAME like 'FTP%'`? – J. Chomel Apr 10 '17 at 12:56
  • Please edit your question to include additional info. Keep comments for comments. – APC Apr 10 '17 at 13:05

1 Answers1

0

"If i just try to delete the file instead of frename it, it works.. So what this could be?"

So the OS source directory exists and the oracle OS account has write privileges on it.

But the frename failure suggests that either :

  • the OS target directory does not exist, or
  • the oracle OS account does not have write privileges on it, or
  • the database DIRECTORY object has been defined incorrectly, or
  • the OS target directory already contains a file of that name.
APC
  • 144,005
  • 19
  • 170
  • 281
  • If I log as oracle user I can run mv via bash. Anyway running the frename with overwrite as true, doesn't change anything – Mike John Apr 10 '17 at 13:11