现在的过程中,我们使用的插入集中的记录是这样的:

(请注意"设定的记录"意味着什么样的一个人的记录以及他们的地址、电话号码或任何其他的加入表)。

  1. 启动交易。
  2. 插入一组的记录有关。
  3. 提交如果一切都是成功的,滚回来。
  4. 回去要步骤1下设置的记录。

我们应该做更多的东西喜欢这个吗?

  1. 启动交易的开始脚本
  2. 开始一个保存点为每一组的记录。
  3. 插入一组有关的记录。
  4. 回滚到保存点,如果有错误,如果一切都是成功的。
  5. 提交事务在开始脚本。

之后有一些问题与奥拉-01555和阅读的几个问问汤姆文章(喜欢 这一个),我想出第二个过程。当然,作为汤姆点了,开始一个新的交易是什么,应该由业务需求。是第二个进程值得尝试的,或者是一个坏主意?

有帮助吗?

解决方案

一项交易应该是一个有意义的工作单元。但是,什么构成一个单元的工作取决于环境。在读系统的一个单元的工作将是一个人及其地址等信息。但它的声音,因为如果实现某种形式的批次处理,这是载入大量的人员。

如果你有问题ORA-1555它几乎可以肯定是因为你有一个长期运行的查询提供的数据正在更新其它交易。犯下你的内环路,有助于周期性使用的撤消段,所以往往会增加的可能性,该段是依靠以提供读取的一致性将有被重新使用。因此,不这样做,可能是一个好主意。

是否采用保存点是解决方案是一个不同的问题。我不确定什么样的优势,这将给您在您的情况。因为你是工作与Oracle10g也许你应该考虑使用批量 仔错误记录 代替。

或者你可能会希望改写驱动的查询,以便它适用于较小的块的数据。不知道更多关于具体的过程,我不能给出具体的建议。但在一般情况下,而不是打开一个标为10000记录,它可能是更好的打开第二十次为500行一流行。其他的事情要考虑是,是否插入过程可以做得更有效率,说使用大量收集和所有的.

其他提示

有些思想...

  1. 似乎我一点asktom联系到尺寸您回退/撤消适当地避免1555。是有一些原因,这是不可能的吗?正如他所指出的那样,这远远便宜买盘比其是编写/维持码,以处理越来越围绕回退的局限性(尽管我不得不双采取后阅读250美元标价一36Gb驱动器,螺纹2002年开始!好的插图穆尔法则!)
  2. 这个链接(伯利森) 显示一个可能的问题上与保存点。
  3. 是你的交易中的现实步骤,2,3和5在第二种情况?如果是这样,这就是我想要做的-犯下各种交易。听起来有点到我喜欢的方案1是一个集中的交易卷入一个吗?
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top