2009-05-18 108 views
1

使用Oracle 11g數據庫。我有一個標記有服務:TransactionTimeout與Oracle 11g

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,TransactionTimeout = 「00:00:10」)]

本身看起來像這樣的方法:

[OperationBehavior(TransactionScopeRequired = true)] 
    [TransactionFlow(TransactionFlowOption.NotAllowed)] 
    public OrderMessage AddOrder(OrderMessage orderMessage) 
    { 
     ValidateMessage(orderMessage); 
     return this.orderBusiness.Add(orderMessage); 
    } 

如果我在orderBusiness.Add方法中放置斷點並等待10秒,則事務超時。如果我取出斷點,但鎖定了交易中涉及的表格,則它將等待超過10秒鐘,至少在服務超時60秒之前。如果表被鎖定,任何想法如何讓事務以指定的時間間隔超時?

回答

0

這是我在這種情況下必須做的。我發現我的transactiontimeout沒有效果,因爲我正在等待我的交易鎖。我不知道這一點,因爲distributed_lock_timeout被設置爲我的數據庫中的默認60秒,並且服務在此之前超時。既然我不能改變我distributed_lock_timeout增加服務超時,然後我開始看到:

InnerException: Oracle.DataAccess.Client.OracleException 
Message="ORA-02049: timeout: distributed transaction waiting for lock" 

因此,在總結中,transactiontimeout當我有一個斷點,因爲它關心的交易實際需要多長時間執行工作。當表被鎖定時它沒有影響,因爲它沒有開始執行。在開始我的事務性工作之前,我應該使用try catch來確保資源沒有被鎖定。

0

如果在您的代碼中鎖定並處理它,您可以使用帶NOWAIT的插入來立即將控制權返回給您。