utl_file.fremove erros, когда Oracle Grants предоставляются для пользователя (Linux) - PullRequest
0 голосов
/ 27 ноября 2018

Я создал каталог оракула (SIMPLEDIR), и он указывает на физическое местоположение на диске.Версия Oracle - 12C.

Пользователь имеет права «CREATE ANY DIRECTORY» и «DROP ANY DIRECTORY», что подтверждается запросом

            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;

Это работает нормально и может подтвердить, что файл теперь находится на диске, и я могутакже прочитайте файл, используя скрипт simillar, как указано выше.Однако, когда я пытаюсь удалить файл с помощью приведенного ниже сценария, я получаю сообщение об ошибке.

            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. 

Это не проблема блокировки файла, так как еслиЯ создаю файл и копирую в то же место вручную, но его не удается удалить.Как я могу получить более подробную информацию о точной причине ошибки.

Мне кажется, что это проблема уровня ОС, поскольку в сообщении об ошибке «Операция удалена при попытке удаления файла».

Это прекрасно работает во внутренних системах, где БД размещается на сервере Windows, но не работает на клиенте, где БД размещается в Linux.

...