utl文件重命名操作失败

我有一个安装目录如下:

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 

所以我必须把一个文件从这个目录“移动”到ACFS中的一个目录中

 drwxrwxrwx 6 oracle oinstall 4096 Apr 10 09:34 ftp_files 

这些而不是priv

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

我执行这个来移动文件

 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; 

但它不起作用,我明白了

 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 

但是,如果我只是试图删除文件而不是frename它,它的工作原理。 那么这可能是什么?

这是来自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; 

谢谢

testingUTL_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 

testingUTL_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

“如果我只是试图删除文件,而不是frename它,它的工作..所以这可能是什么?

所以操作系统的源代码目录是存在的, oracle操作系统帐户上有写权限。

但是, frename失败表明:

  • OS目标目录不存在,或者
  • oracle操作系统帐户没有写权限,或者
  • 数据库DIRECTORY对象已被错误定义,或
  • OS目标目录已经包含了该名称的文件。