java故意重新创建多线程SQL错误
所以我有一个多线程的批处理器,它接受一些值并将它们插入到Oracle数据库中。我收到报告说此处理器正在记录Unique Constraint
错误
这是处理器用于插入的查询:
INSERT INTO TABLE_T
(VALUE_A_PK, VALUE_B_PK, VALUE_C, VALUE_D, VALUE_E, VALUE_F, VALUE_G, VALUE_H, VALUE_I, VALUE_J)
SELECT ?,?,?,?,?,?,?,?,?,? FROM DUAL
WHERE NOT EXISTS
(SELECT 1 FROM TABLE_T WHERE
VALUE_A_PK= ? AND VALUE_B_PK = ?);
我知道解决这个问题的方法,但首先我需要重新创建错误,以证明我已经解决了它。 尽管向处理器提供了多个重复记录,但我无法手动重新显示错误
我几乎可以肯定,这是一个多线程问题,多个线程试图同时插入一条新记录
是否有可靠的方法强制多个线程同时执行?如果我能做到这一点,那么似乎我应该能够让错误弹出了回来
# 1 楼答案
不可能在两个会话中同时发出两个声明。像DBMS_SCHEDULER这样的工具可能可以在一秒钟内可靠地启动两个进程,但要模拟一行插入的主键错误,您需要更高的精度
在循环中的两个单独会话中运行语句可能更容易,只需等待其中一个会话失败即可。为了重现间歇性问题,我已经做过几次了
在两个或多个会话中运行此伪代码,并等待出现错误: