我有一些代码在多台机器上运行,并访问 Oracle 数据库。我通过锁定行将此数据库(除其他外)用作不同机器之间的同步对象。
我遇到的问题是,当我的进程启动时,数据库中还没有任何东西可以依赖于同步,并且我的进程得到了 oracle 异常,unique constraint violated
因为它们都尝试同时插入。
我现在的解决方案是捕获那个精确的异常并忽略它,但我真的不喜欢在我的应用程序的正常工作流程中抛出异常。
有没有更好的方法在数据库中原子地“测试和插入”?插入行时锁定整个表/分区不是可接受的解决方案。
我检查了一下merge into
,认为这是我的解决方案,但它产生了同样的问题。