Последовательная обработка файлов: применение данных к базе данных дает нарушение уникального ключа - PullRequest
0 голосов
/ 18 февраля 2019

Задача - сохранить данные из файла в базе данных оракула.Работа запускается Autosys, когда мы получаем файл в определенной папке (${INPUT_DIR}).Autosys вызывает сценарий, написанный на shell, и пример приведен ниже ... Сценарий оболочки внутренне вызывает DatabaseApply.bin (код ProC / C ++), который применяет данные, содержащиеся в файле, к базе данных.Программа принимает имя файла в качестве ввода, как показано ниже.

for fil_name in `ls ${INPUT_DIR}/INPUT_*`
do 
    ${BIN_DIR}/DatabaseApply.bin  $fil_name
    #sleep 10 # Sleep added to avoid unique key violation.
    .
    .
    .
done

Проблема: Когда мы получаем 2 файла с одинаковой записью (с одинаковым первичным ключом), мы получаем Unique constraint violation.Обратите внимание, что программа DatabaseApply.bin удаляет запись в базе данных, соответствующую первичному ключу, найденному во входном файле, и затем вставляет новые данные.Пример: если входной файл содержит указанные ниже данные с первым столбцом в качестве первичного ключа:

ABC, DEF, HIJ,... 

Затем программа удаляет данные ABC из базы данных, а затем вставляет новые данные с присутствующим ABC, DEF, HIJв файле.

Согласно логике, файлы обрабатываются последовательно один за другим (как показано в приведенном выше коде).Когда я добавляю sleep 10, мы не получаем нарушения уникального ключа.

Что я чувствую, до того, как база данных выполнит фиксацию для 1-го файла, 2-й файл также будет зафиксирован.

Невозможно выяснить проблему.

Примечание. Это устаревший код, написанный на ProC/C++

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...