首页 > 解决方案 > 在 oracle 上向 all_directories 添加新目录失败?

问题描述

我正在尝试向 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克雷斯顿

标签: sqloracleutl-file

解决方案


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

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

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


推荐阅读