Задача - сохранить данные из файла в базе данных оракула.Работа запускается 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++