当为用户(Linux)提供Oracle Grants时,utl_file.fremove错误了

时间:2018-11-26 23:59:54

标签: linux database oracle delete-file

我已经创建了oracle目录(SIMPLEDIR),它指向磁盘上的物理位置。 Oracle版本为12C。

用户具有通过查询确认的“创建任何目录”和“删除任何目录”授权

            SELECT 'DIR' gtype, PRIVILEGE
            FROM sys.dba_sys_privs
            WHERE grantee = 'MY_TEST_USER1';

还可以确认用户具有创建和读取文件的权限。

            SELECT * 
            FROM all_tab_privs 
            WHERE table_name = 'SIMPLEDIR'; 

现在,我使用以下代码块在磁盘上创建文件

            declare 
                fHandle  UTL_FILE.FILE_TYPE;
            begin
                fHandle := UTL_FILE.FOPEN('SIMPLEDIR', 'my_test_1.txt', 'w');

                UTL_FILE.PUT_LINE(fHandle, 'This is the first line');
                UTL_FILE.PUT_LINE(fHandle, 'This is the second line');
                UTL_FILE.PUT_LINE(fHandle, 'This is the third line');

                UTL_FILE.FCLOSE(fHandle);
            EXCEPTION
            WHEN OTHERS THEN
                DBMS_OUTPUT.PUT_LINE('Exception: SQLCODE=' || SQLCODE || '  SQLERRM=' || SQLERRM);
                RAISE;
            end;

这可以正常工作,并且可以确认文件现在在磁盘上,并且我还可以使用上述类似脚本来读取文件。 但是,当我尝试使用以下脚本删除文件时,出现错误。

            declare 
                fHandle  UTL_FILE.FILE_TYPE;
            begin  
                utl_file.fremove('SIMPLEDIR', 'my_test_1.txt');
            EXCEPTION
            WHEN OTHERS THEN
                DBMS_OUTPUT.PUT_LINE('Exception: SQLCODE=' || SQLCODE || '  SQLERRM=' || SQLERRM);
                RAISE;
            end;

错误消息如下

            Error report:
            ORA-29291: file remove operation failed
            ORA-06512: at line 8
            29291. 00000 -  "file remove operation failed"
            *Cause:    A file deletion attempt was refused by the operating system.
            *Action:   Verify that the file exists and delete privileges granted on
                the directory and the file. 

这不是文件锁定问题,因为如果我创建文件并手动复制到同一位置,仍然无法删除。如何获得有关错误的确切原因的详细信息。

在我看来,这似乎是操作系统级别的问题,因为错误消息为“操作系统拒绝了文件删除尝试。”。

这在DB托管在Windows服务器中的内部系统中可以正常工作,但在DB托管在Linux上的客户中则无法使用。

0 个答案:

没有答案