肉肉的狗 2017-01-03 04:01 采纳率: 0%
浏览 1555

oracle utl_file.fopen错误

--sys用户创建目录并授权给yljkjx用户 (数据库为linux 红帽子)
create or replace directory FILENAME as '/usr/software/';
grant read,write on directory FILENAME to yljkjx;
grant execute on utl_file to yljkjx;
alter system set utl_file_dir='/usr/software/' scope=spfile;

--在yljkjx下创建存储过程 PRC_Check_TransData
create or replace procedure PRC_Check_TransData is
filehandle utl_file.file_type;
begin
filehandle := utl_file.fopen('FILENAME','a.txt','w');
utl_file.put_line(filehandle,'test');
utl_file.fclose(filehandle);

END;

--在yljkjx下执行报错
SQL> exec PRC_Check_TransData;
begin PRC_Check_TransData; end;
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at "YLJKJX.PRC_CHECK_TRANSDATA", line 4
ORA-06512: at line 1

  • 写回答

1条回答 默认 最新

  • 一只小爪磕 前端领域新星创作者 2024-07-02 00:32
    关注

    您好题主!
    🍭本答案参考GPT-4o,由爪磕整理并总结,希望对您有所帮助!


    你遇到的 ORA-29283: invalid file operation 错误通常与文件操作权限或路径问题有关。以下是一些常见原因及其解决方案:

    1. 目录路径问题

    确保Oracle用户对指定的目录有正确的读写权限,并且目录路径是正确的。你已经指定了目录路径为 /usr/software/,请确保该路径存在,并且Oracle数据库用户(通常是 oracle 用户)对该目录有读写权限。

    sudo mkdir -p /usr/software/
    sudo chown oracle:oinstall /usr/software/
    sudo chmod 775 /usr/software/
    

    2. utl_file_dir 参数配置

    你已经使用以下命令配置了 utl_file_dir 参数:

    alter system set utl_file_dir='/usr/software/' scope=spfile;
    

    确保在修改 spfile 后,重启数据库以使配置生效:

    shutdown immediate;
    startup;
    

    3. 权限授予问题

    你已经授予了 readwrite 权限,但请确保这些步骤没有遗漏:

    create or replace directory FILENAME as '/usr/software/';
    grant read, write on directory FILENAME to yljkjx;
    grant execute on utl_file to yljkjx;
    

    4. 存储过程问题

    确保你的存储过程代码正确且 fopen 函数参数无误。看起来你的代码是正确的,但请注意文件模式参数 'w' 应该是写模式:

    create or replace procedure PRC_Check_TransData is
        filehandle utl_file.file_type;
    begin
        filehandle := utl_file.fopen('FILENAME','a.txt','w');
        utl_file.put_line(filehandle, 'test');
        utl_file.fclose(filehandle);
    end;
    

    5. 检查错误日志

    如果上述步骤都没有问题,但问题依旧存在,可以查看 Oracle 的警告日志和追踪文件,获取更多详细信息。这些日志文件通常位于 Oracle 安装目录下的 alert 目录中。

    示例步骤重现:

    综合以上步骤,以下是完整的操作示例:

    1. 创建目录并设置权限

    sudo mkdir -p /usr/software/
    sudo chown oracle:oinstall /usr/software/
    sudo chmod 775 /usr/software/
    

    2. 在数据库中配置目录和权限

    -- 以 sys 用户连接
    create or replace directory FILENAME as '/usr/software/';
    grant read, write on directory FILENAME to yljkjx;
    grant execute on utl_file to yljkjx;
    alter system set utl_file_dir='/usr/software/' scope=spfile;
    

    3. 重启数据库

    shutdown immediate;
    startup;
    

    4. 创建并执行存储过程

    -- 以 yljkjx 用户连接
    create or replace procedure PRC_Check_TransData is
        filehandle utl_file.file_type;
    begin
        filehandle := utl_file.fopen('FILENAME', 'a.txt', 'w');
        utl_file.put_line(filehandle, 'test');
        utl_file.fclose(filehandle);
    end;
    
    -- 执行存储过程
    exec PRC_Check_TransData;
    

    如果以上所有步骤都正确执行,但问题仍然存在,请检查 Oracle 数据库的警告日志和追踪文件,以获取更多详细信息。

    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵