Не удается добавить новый каталог в all_directories на oracle?
Я пытаюсь добавить новый каталог в all_directories. Эта первая часть прошла хорошо, я думаю, но когда я пытаюсь создать файл в этом каталоге, я получаю:
ORA-29283: недопустимая файловая операция
Это мой код:
DECLARE
fHandle UTL_FILE.FILE_TYPE;
BEGIN
fHandle := UTL_FILE.FOPEN('TEMPKBU', 'test.txt', 'w');
UTL_FILE.FCLOSE(fHandle);
END;
КАТАЛОГ создан здесь:
SELECT * FROM all_directories WHERE directory_name = 'TEMPKBU'
OWNER DIRECTORY_NAME DIRECTORY_PATH ORIGIN_CON_ID
SYS TEMPKBU \\kcdkfile03\UserData\Bruger\KBU\temp 0
А у пользователя есть права на запись:
SELECT * FROM all_tab_privs WHERE table_name = 'TEMPKBU'
GRANTOR GRANTEE TABLE_SCHEMA TABLE_NAME PRIVILEGE GRANTABLE HIERARCHY COMMON TYPE
SYS KC_PROD SYS TEMPKBU EXECUTE YES NO NO DIRECTORY
SYS KC_PROD SYS TEMPKBU READ YES NO NO DIRECTORY
SYS KC_PROD SYS TEMPKBU WRITE YES NO NO DIRECTORY
KC_PROD PUBLIC SYS TEMPKBU READ NO NO NO DIRECTORY
KC_PROD PUBLIC SYS TEMPKBU WRITE NO NO NO DIRECTORY
Так почему же это не работает? И как мне получить более подробное сообщение об ошибке?
БР Крестен
1 ответ
Эта ошибка обычно возникает, если вы пытаетесь: 1. записать в каталог, который не существует, или 2. записать в каталог, в котором не были предоставлены достаточные права.
Хотя вы предоставили права на запись через базу данных, как насчет пользователя ОС Oracle? Пользователю ОС также потребуется иметь права доступа к каталогу на уровне операционной системы, иначе он не сможет создавать файлы и приведет к этой ошибке. Чтобы проверить, подключитесь к серверу базы данных, как пользователь Oracle (или какой пользователь использовался для создания базы данных), перейдите к этому \\kcdkfile03\UserData\Bruger\KBU\temp
каталог, и попробуйте создать файл.
Вот соответствующая статья AskTom, которая может быть полезна: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:9538408200346950265