首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Oracle11g的TransactionTimeout

使用Oracle11g的TransactionTimeout
EN

Stack Overflow用户
提问于 2009-05-18 15:03:29
回答 2查看 2.3K关注 0票数 1

使用Oracle 11g数据库。我有一个服务,它的标签是:

ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,TransactionTimeout="00:00:10")

该方法本身如下所示:

代码语言:javascript
复制
    [OperationBehavior(TransactionScopeRequired = true)]
    [TransactionFlow(TransactionFlowOption.NotAllowed)]
    public OrderMessage AddOrder(OrderMessage orderMessage)
    {
        ValidateMessage(orderMessage);
        return this.orderBusiness.Add(orderMessage);
    }

如果我在orderBusiness.Add方法中设置一个断点并等待10秒,事务就会超时。如果我取出断点,然后锁定事务中涉及的一个表,它将等待超过10秒,至少要等到服务在60秒超时。如果表被锁定,如何让事务在指定的时间间隔超时?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-19 14:44:50

这是我在这种情况下必须做的事情。我发现我的transactiontimeout没有效果,因为我正在等待我的事务的锁。我并不知道这一点,因为在我的数据库中,distributed_lock_timeout被设置为默认的60秒,而在此之前服务就超时了。因为我无法更改distributed_lock_timeout,所以我增加了服务超时,然后我开始看到:

代码语言:javascript
复制
InnerException: Oracle.DataAccess.Client.OracleException
Message="ORA-02049: timeout: distributed transaction waiting for lock"

因此,总而言之,当我有一个断点时,transactiontimeout就起作用了,因为它关心事务实际执行需要多长时间。当表被锁定时,它没有效果,因为它还没有开始执行。在开始事务性工作之前,我应该使用try catch来确保资源没有被锁定。

票数 0
EN

Stack Overflow用户

发布于 2009-05-19 00:14:22

您可以使用带有NOWAIT的insert来立即将控制权返回给您,并在您的代码中处理它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/878183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档