powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка при использовании пакета utl_file и sqlloader
9 сообщений из 9, страница 1 из 1
Ошибка при использовании пакета utl_file и sqlloader
    #39594804
menja_zovut_deniska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Есть процедура, которая загружает данные из файловой системы в БД с помощью sql loader (примерно 2-3 тысячи файлов).
После загрузки другая процедура читает лог и в зависимости от того, что там проводит определенные действия.
Внутри этой процедуры вызывается проверка того, что из файла можно считать строку. Иногда при загрузке поднимается пользовательская ошибка "При проверке лога произошла ошибка. Превышено время ожидания ненулевого содержимого в файле". Повторная загрузка этого файла происходит без ошибок

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

ЗЫ Внешние таблицы просьба не рассматривать, как решение))

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
PROCEDURE Check_Exist_File(p_Dirname IN VARCHAR2, p_Filename IN VARCHAR2, p_Res OUT NUMBER) AS
    v_Lob_Loc              BFILE;
    v_Num_Num_Not_Null_Log NUMBER := 100;
    --Сколько секунд проверять, что файл не пустой
    v_Handle Utl_File.File_Type;
    Vnewline VARCHAR2(32000);
  BEGIN
    v_Lob_Loc := Bfilename(p_Dirname, p_Filename);
    --Проверим, что файл создан
    IF (Dbms_Lob.Fileexists(v_Lob_Loc) != 0) THEN
      p_Res := 1;
    ELSE
      p_Res := 0;
      RETURN;
    END IF;
    --Если файл создан, то проверим, что он не пустой
    FOR i IN 1 .. v_Num_Num_Not_Null_Log
    LOOP
      v_Handle := Utl_File.Fopen(p_Dirname, p_Filename, 'r');

      BEGIN
        Utl_File.Get_Line(v_Handle, Vnewline);
        --Если смогли прочитать строку
        Utl_File.Fclose(v_Handle);
        RETURN;
      EXCEPTION
        WHEN No_Data_Found THEN
          IF i < v_Num_Num_Not_Null_Log THEN
            Dbms_Lock.Sleep(1);
            Utl_File.Fclose(v_Handle);
          ELSE
            p_Res := 0;
            IF Utl_File.Is_Open(v_Handle) THEN
              Utl_File.Fclose(v_Handle);
            END IF;
            Errors_Pack.Te_User_Error_With_Raise(p_Descr         => 'При проверке лога произошла ошибка. Превышено время ожидания ненулевого содержимого в файле',
                                                 p_Sql_Text      => NULL,
                                                 p_Pars          => 'p_Dirname=' || p_Dirname ||
                                                                    '; p_Filename=' || p_Filename,
                                                 p_Programm_Name => 'Check_Exist_File');
          END IF;
      END;

    END LOOP;

  EXCEPTION
    WHEN OTHERS THEN
      Errors_Pack.Te_Oracle_Error_With_Raise(p_Sql_Text      => NULL,
                                             p_Pars          => 'p_Dirname=' || p_Dirname ||
                                                                '; p_Filename=' || p_Filename,
                                             p_Programm_Name => 'Check_Exist_File');
  END Check_Exist_File;
...
Рейтинг: 0 / 0
Ошибка при использовании пакета utl_file и sqlloader
    #39594857
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
menja_zovut_deniskaПочему такое может быть?
файл не закрыт
...
Рейтинг: 0 / 0
Ошибка при использовании пакета utl_file и sqlloader
    #39594870
menja_zovut_deniska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123ййmenja_zovut_deniskaПочему такое может быть?
файл не закрыт
имеется в виду сам обрабатываемый файл или лог?
...
Рейтинг: 0 / 0
Ошибка при использовании пакета utl_file и sqlloader
    #39594910
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется ввиду, что не при всех ошибках вызывается Utl_File.Fclose(v_Handle)
А в пакете UTL_FILE, насколько помню, неявное ограничение на 50 открытых хэндлов

Да и странно как-то -- существование проверяется через DBMS_LOB, а содержимое через UTL_FILE. Это чтоб потенциального агрессора запутать?
...
Рейтинг: 0 / 0
Ошибка при использовании пакета utl_file и sqlloader
    #39594916
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
menja_zovut_deniskaимеется в виду сам обрабатываемый файл
тот кто пишет в файл еще не закончил начатое.
название файла уже есть в каталоге а вот его размера еще нет
...
Рейтинг: 0 / 0
Ошибка при использовании пакета utl_file и sqlloader
    #39594947
menja_zovut_deniska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровИмеется ввиду, что не при всех ошибках вызывается Utl_File.Fclose(v_Handle)
А в пакете UTL_FILE, насколько помню, неявное ограничение на 50 открытых хэндлов

Вижу, спасибо, но тут это не критично...было во всяком случае
Вячеслав ЛюбомудровДа и странно как-то -- существование проверяется через DBMS_LOB, а содержимое через UTL_FILE. Это чтоб потенциального агрессора запутать?
Типа того)
...
Рейтинг: 0 / 0
Ошибка при использовании пакета utl_file и sqlloader
    #39594963
menja_zovut_deniska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123ййmenja_zovut_deniskaимеется в виду сам обрабатываемый файл
тот кто пишет в файл еще не закончил начатое.
название файла уже есть в каталоге а вот его размера еще нет
Т.е. sqlloader.
Видимо надо пробовать увеличить количество попыток считать строку...
Вообще запуск sqlloader вызывается запуском батника через dbms_scheduler.
Может быть есть еще какие-то варианты отследить момент из процедуры, когда лоадер завершит работу и точно можно будет прочитать лог?
...
Рейтинг: 0 / 0
Ошибка при использовании пакета utl_file и sqlloader
    #39594966
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может лучше использовать внешние таблицы?
...
Рейтинг: 0 / 0
Ошибка при использовании пакета utl_file и sqlloader
    #39595008
menja_zovut_deniska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровМожет лучше использовать внешние таблицы?

Абсолютно с вами согласен...но, хотелось бы слышать возможный вариант решения вопроса с лоадером, если он есть)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка при использовании пакета utl_file и sqlloader
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]