Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle utl文件重命名操作失败_Oracle_Unix_Utl File - Fatal编程技术网

Oracle utl文件重命名操作失败

Oracle utl文件重命名操作失败,oracle,unix,utl-file,Oracle,Unix,Utl File,我有一个挂载目录,如下所示: etc/fstab 10.100.52.12:/ftp/ftp nfs rw,bg,hard,nointr,rsize=1048576,wsize=1048576,tcp,vers=3,timeo=60,actimeo=0 ll 因此,我必须将一个文件从这个目录“移动”到ACFS中的一个目录 drwxrwxrwx 6 oracle oinstall 4096 Apr 10 09:34 ftp_files 相反,这些是priv (GRANTEE,TABLE_NAM

我有一个挂载目录,如下所示:

etc/fstab

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

ll

因此,我必须将一个文件从这个目录“移动”到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
但是,如果我只是尝试删除文件而不是为其命名,它会起作用。 那么这可能是什么呢

以下是DBA_目录的输出:

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

测试UTL_FILE.FOPEN DST

如果我只是尝试删除该文件而不是为其命名,它会起作用。。那么这可能是什么呢

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

但frename的失败表明:

操作系统目标目录不存在,或 oracle OS帐户没有写入权限,或者 数据库目录对象定义不正确,或 OS目标目录已包含该名称的文件。
你是如何申报你的存款的?从目录名为“FTP%”的DBA_目录中选择*的结果是什么?请编辑您的问题以包含其他信息。为注释保留注释。如果我以oracle用户身份登录,我可以通过bash运行mv。无论如何,运行覆盖为true的frename不会改变任何东西
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;
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
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]$