У меня есть файл SQL, который содержит 2 блока кода, оба используют функции UTL_FILE для записи 2 разных файлов в одном каталоге.
Проблема, с которой я сталкиваюсь, заключается в том, что первый блок кода выполняется успешно, но при выполнении второго блока кода я обнаруживаю ORA-29283: недопустимая файловая операция.
Мой код выглядит следующим образом:
DECLARE
fileHandler UTL_FILE.FILE_TYPE;
vline varchar2(4000);
BEGIN
fileHandler := UTL_FILE.FOPEN('STAGING_REPORT', 'Report_1.csv', 'W',4000);
UTL_FILE.FCLOSE(fileHandler);
end;
/
DECLARE
fileHandler UTL_FILE.FILE_TYPE;
vline varchar2(4000);
BEGIN
fileHandler := UTL_FILE.FOPEN('STAGING_REPORT', 'Report_2.csv', 'W',4000);
UTL_FILE.FCLOSE(fileHandler);
end;
/
Когда я пытаюсь выполнить это в SQLDeveloper, я сначала выполнил два блока отдельно. В этом сценарии первый блок был выполнен успешно, но второй блок выдал ошибку ORA-29283.
Во второй попытке я попытался выполнить оба блока одновременно, т.е. выбрал их оба и нажал RUN. В этом сценарии мой первый блок тоже выполняется успешно, а второй - нет.
После множества таких попыток в настоящее время оба блока выдают ошибку ORA_29283.
В STAGING_REPORT нет файлов отчетов (REPORT_1 и REPORT_2). UTL_FILE.FOPEN создают их во время выполнения.
Что кажется странным, так это то, что этот код, успешно выполненный всего полнедели назад, внезапно ведет себя ненормально.
Я использую Oracle 12c. Что мне здесь не хватает?
(Я уже проверил разрешения и другие базовые вещи, такие как разрешение на каталог, и если каталог существует, как я ранее упоминал, этот код выполнялся полнедели назад и частично выполнялся, когда я выполнял его вручную)
Я также пробовал использовать два разных имени обработчика для обоих блоков, но безуспешно.
select * from v$active_instances;
и посмотрите, сколько строк возвращается - если только одна, то проблема не в этом. Но у вас может быть несколько удаленных серверов Linux, и каталог должен существовать на всех из них. - person Alex Poole   schedule 18.09.2019