Многократное чтение одной и той же внешней таблицы Oracle с различным содержимым файла приводит к ошибке KUP-05011: Размер файла изменился - PullRequest
2 голосов
/ 30 апреля 2020

Я пытаюсь прочитать одну и ту же внешнюю таблицу Oracle несколько раз с различным содержимым файла.

Я использую приложение java с фрагментом кода, например:

int sptepn = 1;
for (File file: files) {
    log_step(stepn++);
    copy_file_to_oracle_directory(file); // copy myfileN.txt to myfile.txt
    call_oracle_sp_read_file();
}

В процедуре pl / sql я использую фрагмент кода, например:

procedure read_file() is
    cursor ext_cu is
      select * from ext_table;
begin
    for ext_rec in ext_cu loop
      -- do something with ext_rec.*
    end loop;
end read_file;

На одной группе db-серверов эта процедура pl / sql работает правильно. Но на другой группе db-серверов вызов этой процедуры pl / sql на шаге 2 (процедуры java) вызывает ошибку:

29913-ORA-29913: error in executing ODCIEXTTABLEFETCH callout: ORA-29400: data cartridge error: KUP-05011: Size of file myfile.txt in directory /mydir has changed from 12345 to 67890.

Где myfile1.txt имеет размер 12345, а myfile2.txt имеет размер 67890.

В чем проблема?

У уязвимого сервера есть версия:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
"CORE   12.2.0.1.0  Production"
TNS for IBM/AIX RISC System/6000: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production

1 Ответ

0 голосов
/ 01 мая 2020

Как насчет сообщения Oracle, что вы изменили файл? Вместо того, чтобы копировать myfileN.txt в myfile.txt, я бы попытался сохранить число в именах файлов и изменить внешнюю таблицу:

ALTER TABLE ext_table LOCATION ("MYDIR":'myfile1.txt');
read_file();

ALTER TABLE ext_table LOCATION ("MYDIR":'myfile2.txt');
read_file();
...
...