在 Oracle 上向 all_directories 添加新目录失败?

Adding new directory to all_directories on oracle fails?

我正在尝试向 all_directories 添加一个新目录。我认为第一部分进展顺利,但是当我尝试在该目录中创建文件时,我得到:

ORA-29283: 无效的文件操作

这是我的代码:

DECLARE
  fHandle  UTL_FILE.FILE_TYPE;
BEGIN
  fHandle := UTL_FILE.FOPEN('TEMPKBU', 'test.txt', 'w');
  UTL_FILE.FCLOSE(fHandle);
END;

目录创建于此:

SELECT * FROM all_directories WHERE  directory_name = 'TEMPKBU'

OWNER   DIRECTORY_NAME  DIRECTORY_PATH                          ORIGIN_CON_ID
SYS     TEMPKBU         \kcdkfile03\UserData\Bruger\KBU\temp   0

并且用户有写入权限:

SELECT * FROM all_tab_privs WHERE  table_name  = 'TEMPKBU'

GRANTOR GRANTEE TABLE_SCHEMA TABLE_NAME PRIVILEGE GRANTABLE HIERARCHY   COMMON  TYPE
SYS     KC_PROD SYS          TEMPKBU    EXECUTE   YES       NO          NO      DIRECTORY
SYS     KC_PROD SYS          TEMPKBU    READ      YES       NO          NO      DIRECTORY
SYS     KC_PROD SYS          TEMPKBU    WRITE     YES       NO          NO      DIRECTORY
KC_PROD PUBLIC  SYS          TEMPKBU    READ      NO        NO          NO      DIRECTORY
KC_PROD PUBLIC  SYS          TEMPKBU    WRITE     NO        NO          NO      DIRECTORY

那么为什么这不起作用?我怎样才能得到更详细的错误消息?

BR 克雷斯滕

如果您尝试执行以下操作,通常会发生该错误:1. 写入不存在的目录,或 2. 写入未授予足够权限的目录。

虽然您已经通过数据库授予了写权限,但是 OS Oracle 用户呢? OS 用户还需要在操作系统级别对目录具有 r/w 权限,否则将无法创建文件并导致此错误。要检查,请以 Oracle 用户(或任何用于创建数据库的用户)身份连接到数据库服务器,导航到该 \kcdkfile03\UserData\Bruger\KBU\temp 目录,并尝试创建一个文件。

这是一篇可能有用的相关 AskTom 文章:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:9538408200346950265