Все,
У нас есть набор из 8 заданий, которые выполняются параллельно на сервере Unix.Эти задания вызывают хранимую процедуру Oracle.Все эти процедуры выполняют набор операций с БД (для разных таблиц) и в конце создают файлы на Unix-сервере.(Каждое задание создает файл с разными именами. Но помещает в одну папку)
В последнее время мы видим случайные сбои с сообщением об ошибке "ORA-06512: at" SYS.UTL_FILE ", строка 536". Каждый день при создании отчета об ошибке происходит сбой одного или двух заданий.Когда работа повторяется, проблем нет.Мы не могли воспроизвести проблему в более низкой среде.
Папка имеет все права доступа.Эта работа выполнялась более года без проблем.Любые идеи приветствуются.
Основываясь на моем анализе: - Операции с БД завершены без каких-либо проблем.Файл не создан (даже пустой).Так что это не удалось при встрече fopen.
Пример кода
DECLARE
IN_CONT_TYPE varchar2(100) := 'HARDWARE_ATTRIBUTES' ;
in_batch_name ccpm_epslz_control.push_batch_name%TYPE := 'HARDWARE_ATTRIBUTES_20181211062540';
l_file_type utl_file.file_type;
file_record_hold_cur sys_refcursor;
BEGIN
/*DB Operations*/
l_file_type :=utl_file.fopen('ERR_FOLDER',l_file_name,'W');
utl_file.put_line(l_file_type, 'count of input records filtered based on errors:');
utl_file.put_line(l_file_type, '-----------------------------------------------');
utl_file.put_line(l_file_type, l_col_name_print);
OPEN file_record_hold_cur FOR l_select_stmt_bus;
LOOP
FETCH file_record_hold_cur INTO l_putline_stmt_bus;
EXIT
WHEN file_record_hold_cur%notfound;
utl_file.put_line(l_file_type, l_putline_stmt_bus);
END LOOP;
CLOSE file_record_hold_cur;
utl_file.fclose(l_file_type);
EXCEPTION
WHEN OTHERS THEN
Dbms_Output.put_line ( DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() );
END;
СООБЩЕНИЕ ОБ ОШИБКЕ: - ORA-20051: внутренняя ошибка при генерации файла ORA-06512: в «MYPACKAGE», строка 84 ORA-06512: в «SYS».UTL_FILE ", строка 536