首页 > 解决方案 > 顺序文件处理:将数据应用于数据库会导致唯一密钥违规

问题描述

任务是将文件中的数据存储到oracle数据库中。当我们在特定文件夹 ( ${INPUT_DIR}) 中收到文件时,Autosys 会触发该作业。Autosys 调用一个用 shell 编写的脚本,示例如下所示... 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,我们没有得到唯一键违规。

我的感觉是,在数据库提交第一个文件之前,第二个文件也被提交了。

无法弄清楚问题。

注意:这是一个遗留代码ProC/C++

标签: c++databaseshellplsqloracle11g

解决方案


推荐阅读