0

我有一个挂载目录如下:

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

这些反而是私人

(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;

谢谢

测试 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

测试 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

4

1 回答 1

0

“如果我只是尝试删除文件而不是对其进行命名,它可以工作.. 那么这可能是什么?”

因此 OS 源目录存在,并且oracleOS 帐户对其具有写入权限。

frename失败表明:

  • 操作系统目标目录不存在,或者
  • oracle操作系统帐户没有写入权限,或者
  • 数据库 DIRECTORY 对象的定义不正确,或者
  • 操作系统目标目录已包含该名称的文件。
于 2017-04-10T13:01:13.467 回答