问题描述
我们设置了几个现有的Oracle目录,以允许读取工作正常的CSV文件,其中几个目录可以正常编写新文件。我一直在尝试添加指向不同路径的新目录定义,并且无法使其正常工作。我在一个公司环境中,我无法访问系统帐户,也看不到实例启动文件,也无法直接访问Linux操作系统,所以我不知道以前的目录做了什么设置。
用于读取和写入的现有目录之一定义为:
对于上述目录,以下测试代码可以正常创建输出文件:
我想将一些文件写入上述路径下的子目录,并且发现出于安全原因,Oracle将仅允许写入named-Oracle目录。我要创建的新目录定义为:
但是将上面的代码更改为使用RED_OUTPUT作为 “位置” 或目录,结果是 “ORA-29283: 无效的文件操作: 无法打开文件”。
“/red/dev/OUTPUT'” 目录位置存在于外部NAS文件系统上,并且似乎具有与父 “/red/dev” 目录相同的权限 (我最好使用Windows资源管理器查看目录安全属性)。
我已经阅读了各种在线帖子,表明像Oracle实例必须在定义新的Oracle目录后重新启动,或者Oracle目录指定的每个路径都必须在Oracle Linux服务器上有一个单独的 “安装点”,但我没有轻松访问这些事情。如果我使用Windows资源管理器将一个文件复制到该位置,则RED_OUTPUT目录当前可用于读取现有文件。
无法写入此新的RED_OUTPUT目录可能会出现什么问题,并且是否需要这些其他步骤 (重新启动,安装等) 来使此工作?
用于读取和写入的现有目录之一定义为:
CREATE OR REPLACE DIRECTORY RED AS '/red/dev';复制
对于上述目录,以下测试代码可以正常创建输出文件:
DECLARE v_file UTL_FILE.FILE_TYPE; BEGIN v_file := UTL_FILE.FOPEN(location => 'RED', filename => 'test.csv', open_mode => 'w', max_linesize => 32767); UTL_FILE.PUT_LINE(v_file, 'A,123'); UTL_FILE.FCLOSE(v_file); END;复制
我想将一些文件写入上述路径下的子目录,并且发现出于安全原因,Oracle将仅允许写入named-Oracle目录。我要创建的新目录定义为:
CREATE OR REPLACE DIRECTORY RED_OUTPUT AS '/red/dev/OUTPUT';复制
但是将上面的代码更改为使用RED_OUTPUT作为 “位置” 或目录,结果是 “ORA-29283: 无效的文件操作: 无法打开文件”。
“/red/dev/OUTPUT'” 目录位置存在于外部NAS文件系统上,并且似乎具有与父 “/red/dev” 目录相同的权限 (我最好使用Windows资源管理器查看目录安全属性)。
我已经阅读了各种在线帖子,表明像Oracle实例必须在定义新的Oracle目录后重新启动,或者Oracle目录指定的每个路径都必须在Oracle Linux服务器上有一个单独的 “安装点”,但我没有轻松访问这些事情。如果我使用Windows资源管理器将一个文件复制到该位置,则RED_OUTPUT目录当前可用于读取现有文件。
无法写入此新的RED_OUTPUT目录可能会出现什么问题,并且是否需要这些其他步骤 (重新启动,安装等) 来使此工作?
专家解答
I have read various posts online indicating things like the Oracle instance must be restarted after defining a new Oracle Directory
这是错误的。
that every path specified by an Oracle Directory must have a separate "mount point" on the Oracle Linux server
这也是错误的。
最可能的原因是在操作系统级别对目录的权限,特别是如果您可以通过note write读取。如果您没有自己创建目录,请确保您的DBA已完成:
授予读取,写入目录RED_OUTPUT到 [your_user]
为了确保Oracle privs就位,但在那之后,这将是一个操作系统级别的问题。
这是错误的。
that every path specified by an Oracle Directory must have a separate "mount point" on the Oracle Linux server
这也是错误的。
最可能的原因是在操作系统级别对目录的权限,特别是如果您可以通过note write读取。如果您没有自己创建目录,请确保您的DBA已完成:
授予读取,写入目录RED_OUTPUT到 [your_user]
为了确保Oracle privs就位,但在那之后,这将是一个操作系统级别的问题。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
586次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
541次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
450次阅读
2025-04-18 14:18:38
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
438次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
437次阅读
2025-04-01 11:08:44
墨天轮个人数说知识点合集
JiekeXu
436次阅读
2025-04-01 15:56:03
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
434次阅读
2025-04-22 00:20:37
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
411次阅读
2025-04-22 00:13:51
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
402次阅读
2025-04-20 10:07:02
Oracle 19c RAC更换IP实战,运维必看!
szrsu
386次阅读
2025-04-08 23:57:08