所有人
我们有一组8个作业,它们在Unix服务器上并行运行。这些作业称为Oracle存储过程。所有这些过程都会执行一组DB操作(在不同的表上),最后在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:文件中的内部错误 generationORA-06512:位于“ MYPACKAGE”,第84行 ORA-06512:位于“ SYS.UTL_FILE”的第536行