You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle DB 21c XE读取网络共享驱动器文件时提示路径/文件不存在

解决UTL_FILE访问网络共享文件的ORA-29283错误

核心问题分析

你遇到的错误本质是Oracle数据库服务的运行账户无法识别你手动挂载的Z盘,同时映射盘符的方式不适用于服务级别的文件访问。Windows的网络驱动器映射是绑定到当前登录用户会话的,而Oracle服务默认使用Local System账户运行,这个账户无法访问你个人会话中挂载的Z盘。

解决方案步骤

1. 改用UNC路径创建目录对象

放弃使用映射盘符Z:,直接使用网络共享的UNC路径格式:

CREATE OR REPLACE DIRECTORY NETTEST AS '\\你的Win10电脑名称\共享文件夹名称';
-- 示例:若Win10电脑名为WIN10-PC,共享文件夹叫ShareFolder,路径就是'\\WIN10-PC\ShareFolder'

之后重新授予读写权限:

GRANT READ, WRITE ON DIRECTORY NETTEST TO 你的数据库用户;

2. 调整Oracle服务的运行账户

  1. 打开Windows服务管理器(按Win+R输入services.msc)
  2. 找到OracleServiceXE和OracleOraDB21Home1TNSListener服务
  3. 右键点击服务,选择属性 -> 登录标签页
  4. 选择此账户,输入你当前登录Win11的用户账户和密码(该账户需能访问Win10的共享文件夹)
  5. 重启这两个Oracle服务

3. 验证共享权限

确保Win10的共享文件夹权限满足:

  • 共享权限:给指定的Oracle服务运行账户(或Everyone)分配读取/写入权限
  • NTFS权限:同样给该账户分配读取权限(仅读取文件时)

4. 执行修改后的PL/SQL代码

代码无需大调整,只需保证文件名正确,示例:

SET SERVEROUTPUT ON;
DECLARE
    f1 UTL_FILE.FILE_TYPE;
    s  VARCHAR2(32767);
BEGIN
    f1 := UTL_FILE.FOPEN('NETTEST', 'test.txt', 'r');
    LOOP
        BEGIN
            UTL_FILE.GET_LINE(f1, s);
            DBMS_OUTPUT.PUT_LINE(s);
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                EXIT;
        END;
    END LOOP;
    UTL_FILE.FCLOSE(f1);
END;
/

关键注意事项

  • 服务级别的文件访问必须用UNC路径,不能使用映射盘符
  • Oracle服务账户必须拥有网络共享的访问权限,Local System账户无法访问网络资源
  • 确保Win10和Win11在同一局域网,且网络共享未被防火墙拦截

内容的提问来源于stack exchange,提问作者Nehan Shashith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 02:16:01