it-roy-ru.com

ORA-29283: недопустимая файловая операция ORA-06512: в "SYS.UTL_FILE", строка 536

Ниже приведен код, который я использую для извлечения данных из таблицы в плоский файл. 

BEGIN
    DECLARE
        file_name VARCHAR2(50);
        file_handle utl_file.file_type;
BEGIN
    file_name := 'table.txt';
    file_handle := utl_file.fopen('SEND',file_name,'W');
FOR rec in(
    SELECT            column 1
                ||'~'||column 2
                ||'~'||column 3 out_line
    FROM table1)LOOP
UTL_FILE.PUT_LINE(file_handle,rec.out_line);
UTL_FILE.FFLUSH(file_handle);
END LOOP;
UTL_FILE.FCLOSE(file_handle);
END;
end;

Этот код работает нормально в нашей базе данных разработки, но он выдает ошибку ниже, если я выполню в новой БД.

Error starting at line 1 in command:
    BEGIN
    DECLARE
        file_name VARCHAR2(50);
        file_handle utl_file.file_type;
BEGIN
    file_name := 'table.txt';
    file_handle := utl_file.fopen('SEND',file_name,'W');
FOR rec in(
    SELECT            column 1
                ||'~'||column 2
                ||'~'||column 3 out_line
    FROM table1)LOOP
UTL_FILE.PUT_LINE(file_handle,rec.out_line);
UTL_FILE.FFLUSH(file_handle);
END LOOP;
UTL_FILE.FCLOSE(file_handle);
END;
end;

Error report:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 7
29283. 00000 -  "invalid file operation"
*Cause:    An attempt was made to read from a file or directory that does
           not exist, or file or directory access was denied by the
           operating system.
*Action:   Verify file and directory access privileges on the file system,
           and if reading, verify that the file exists.

Oracle directory 'SEND' points to some UNIX directory which has rights as 
       'rwxrwsr-x' (Octal 2775)
Oracle Version:11g

Пожалуйста, помогите мне решить эту проблему.

Ребята, пожалуйста, дайте мне знать, если вам нужно больше данных от меня, чтобы решить этот вопрос.

6
Vivek

Таким образом, @Vivek получил решение проблемы с помощью диалога в комментариях, а не путем фактического ответа. Кто сказал SO сайт вопросов и ответов не форум? Э, я, среди других.

Во всяком случае, в отсутствие принятого ответа на этот вопрос я предлагаю ссылку на мой ответ на тему UTL_FILE.FOPEN(). Найти это здесь .

Постскриптум Я отмечаю этот ответ вики-сообществом, потому что это не правильный ответ на этот вопрос, а просто перенаправление в другое место. 

5
APC

В Windows также проверьте, не зашифрован ли файл с помощью EFS. У меня была такая же проблема, пока я не расшифровал файл вручную.

0
Khamyl

Я сталкивался с этой проблемой в течение двух дней и обнаружил, что каталог, который вы создаете в Oracle, также необходимо сначала создать на вашем физическом диске. Я нигде не упоминал об этом, я пытался найти решение этой проблемы.

то есть.

Если вы создали каталог, скажем, «DB_DIR».

CREATE OR REPLACE DIRECTORY DB_DIR AS 'E:\DB_WORKS';

Затем вам нужно убедиться, что DB_WORKS существует на вашем диске E: \, а также для доступа к процессу Oracle доступны разрешения на чтение/запись на уровне файловой системы.

Мое понимание UTL_FILE из моего опыта приведено ниже для такого рода операций.

UTL_FILE - объект под пользователем SYS. GRANT EXECUTE ON SYS.UTL_FILE TO PUBLIC; необходимо дать, когда вы вошли в систему как SYS. В противном случае это будет дать объявление ошибки в процедуре. Любой может создать каталог как показано: - CREATE OR ЗАМЕНИТЕ КАТАЛОГ DB_DIR AS 'E:\DBWORKS'; Но СОЗДАЙТЕ СПРАВОЧНИК разрешение должно быть на месте. Это может быть предоставлено как показано: - GRANT CREATE ALL DIRECTORY пользователю; в то время как вошли как SYS пользователь. Однако, если это необходимо использовать другому пользователю, необходимо предоставить права доступа быть переданным этому пользователю, иначе он выдаст ошибку. GRANT READ, НАПИСАТЬ, ВЫПОЛНИТЬ НА DB_DIR ДЛЯ пользователя; пока залогинен как пользователь который создал каталог. Затем скомпилируйте ваш пакет. Перед выполнением Процедура, убедитесь, что Каталог существует физически на вашем Диск. В противном случае он выдаст ошибку «Недопустимая операция с файлом». (V . ВАЖНО) Убедитесь, что разрешения на чтение/запись на уровне файловой системы находятся в место для процесса Oracle. Это отдельно от уровня БД предоставленные разрешения. (V. ВАЖНО) Выполните процедуру. Файл должен получить заполняется набором результатов вашего запроса.

0
Ayush Pratap Singh