oracle数据库中的分发事务锁

时间:2009-09-22 23:17:12

标签: sql oracle transactions distributed

我对oracle数据库中的事务锁有一些疑问。到目前为止我发现的是:

原因:已超出等待分布式事务中的锁定的时间。此时间在初始化参数DISTRIBUTED_LOCK_TIMEOUT中指定。

操作:此情况被视为死锁并且语句已回滚。要将超时间隔设置为更长的时间间隔,请调整初始化参数DISTRIBUTED_LOCK_TIMEOUT,然后关闭并重新启动实例。

我想更详细地了解其他一些事情,例如:

  1. 提到“分布式事务”中的锁定发生了。那么什么样的数据库操作可以导致这种情况?更新记录?选择一条记录?

  2. “分布式”的含义无论如何。我已经看到这个词在各处都被创造出来,但我似乎无法推断出它的含义。

  3. 我们可以做些什么来减少此类锁定的实例?

2 个答案:

答案 0 :(得分:3)

分布式事务意味着您有一个具有两个不同参与者的事务。如果您使用PL / SQL,通常意味着涉及多个数据库。但它可能只是表明应用程序在与数据库的交互中使用外部事务协调器。例如,J2EE应用程序可能希望创建一个分布式事务,该事务涵盖针对数据库发出SQL语句以将100美元从帐户A移动到帐户B,以及为此事务创建JMS消息的应用程序服务器操作最终导致发送转移的电子邮件通知。在这种情况下,应用程序希望确保中间层的状态与后端的状态匹配。

分布式交易不是免费的。它们可能涉及相当多的额外开销,因为至少需要使用two-phase commit protocol来验证属于分布式事务的所有组件是否已准备好提交并验证它们是否都提交了。这涉及发送许多网络数据包,这可能是OLTP事务等待时间的很大一部分。分布式事务也会导致管理问题,因为最终会出现一个参与者的事务在指示它已准备好提交或事务协调器失败而另一个参与者具有打开事务时失败的情况。

所以第一个问题是你的应用程序是否真的需要分布式事务。有时,开发人员发现他们在没有必要时会意外地请求分布式事务。如果您不确定分布式事务是什么,那么您完全有可能不需要它们。

答案 1 :(得分:0)

有一个指南here将引导您完成模拟ORA-02049的步骤:超时:如果您希望更好地了解其中一个原因,则等待锁定的分布式事务: