utl_file.fopen有时会失败

时间:2018-12-12 18:52:56

标签: oracle unix plsql oracle11g utl-file

所有人

我们有一组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行

0 个答案:

没有答案