当前位置: 首页 > 面试题库 >

我可以在Oracle中进行原子合并吗?

耿联
2023-03-14
问题内容

我有几个在单个WebLogic集群中运行的J2EE应用程序实例。

在某些时候,这些应用程序会进行合并以将记录插入或更新到后端Oracle数据库中。MERGE检查是否存在具有指定主键的行。如果在那里,请更新。如果没有,请插入。

现在,假设有两个应用程序实例要插入或更新主键=
100的行。假设该行不存在。在合并的“检查”阶段,他们都看到行不在此处,因此他们都试图插入。然后,我得到了唯一的键约束违规。

我的问题是:Oracle中是否存在原子合并?我正在寻找一种与INSERT ... FOR UPDATEPL /
SQL中的效果类似的东西,除了我只能从我的应用程序中执行SQL。

编辑:我不清楚。我仍在使用MERGE语句,但仍然出现此错误。问题是,只有“修改”部分是原子的,而不是整个合并。


问题答案:

在该会话提交之前,第二个会话中的MERGE语句无法“看到”第一个会话进行的插入。如果减小交易的大小,则发生这种情况的可能性将减小。

或者,您可以对数据进行排序或分区,以便将给定主键的所有记录分配给同一会话。像“主键mod N”这样的简单功能应平均分配给N个会话。

顺便说一句,如果两个记录具有相同的主键,则第二个将覆盖第一个。听起来有点奇怪。



 类似资料:
  • 请考虑下面的C++11代码片段。对于GCC和clang,这将编译为两个(顺序一致的)Foo加载。(编者注:编译器不会优化atomics,更多细节请参见本问答,特别是http://wg21.link/n4455标准讨论了这可能产生的问题,该标准没有给程序员提供解决这些问题的工具。本语言律师问答是关于当前标准的,而不是编译器的工作。) C++内存模型是否允许编译器将这两个加载合并为一个加载,并对x和y

  • 我知道下一个场景:(奇怪的格式,我知道) 如果线程#1和线程#2在完全相同的时间输入,这将发生: > 两者都将执行" CMPXCHG指令同时对两个线程生效: 3.1锁定前缀本机使用 3.2线程#1或#2首先到达,赢得比赛。 3.3获胜线程比较(是aBoolean==true?)这将返回"true",因此一个布尔值将被设置为"false"。 3.4 aBoolean现在为false。 3.5线程丢失

  • 问题内容: 我只是在学习AsyncTask,并希望将其用作单独的类,而不是子类。 例如, 和main(ui)线程: 谢谢! 问题答案: 使用界面。就像是: 然后在您的UI线程中执行此操作: 在inetloader中,添加: 然后在postExecute()中,执行以下操作:

  • Solr4提供了对索引中现有文档进行原子(部分)更新的功能。即。可以匹配文档ID并替换一个字段的内容,或者向多值字段添加更多条目:http://wiki.apache.org/solr/atomicupdates 原子更新可以从DataImportHandler(DIH)完成吗?

  • 问题内容: “ group by”子句是否可以自动保证结果将由该键排序?换句话说,编写以下内容是否足够: 还是必须写 我知道例如在MySQL中我不必这样做,但是我想知道我是否可以在SQL实现中依靠它。可以保证吗? 问题答案: 不必对数据进行排序。DB旨在尽可能快地获取数据,并且仅在必要时才进行排序。 因此,如果您需要有保证的订单,请添加。