2014-12-01 25 views
1

在理解爲什麼連接會話存在持續6個小時並且持有鎖和打破線程時存在以下問題:如果XADataSource(Oracle驅動程序)的連接需要Java引用才能保持活動狀態。XA事務,垃圾收集和until-tx-complete =真的結束

在分佈式事務集保留直到它明確結束(keep-xa-conn-till-tx-complete = true)的問題上,我想知道司機如何決定是否關閉連接並提交一次事務回收連接。數據庫管理系統甚至有辦法做到這一點嗎?

所以問題是數據庫管理系統如何決定是否放棄分佈式事務。

+0

如果你想從Oracle的角度看它,請查看dba_2pc_pending和v $ transtaction。如果您需要幫助,請詳細描述您的情況。談到分佈式交易沒有什麼簡單的。 – ibre5041 2014-12-01 20:32:23

回答

1

DBMS不會決定結束事務,事務管理器會這樣做。

事務管理器設置爲在您的應用程序容器中運行,不管它們是Spring,J2EE應用程序服務器還是其他。他們必須通過正確配置「知道」他們是分佈式事務管理者。在分佈式事務環境中,如果您有多個事務性應用程序和/或服務正在交互以完成事務,則它們必須都能夠支持分佈式事務以正確使用XADataSource並在鏈上下發送正確的信號以提交vs回滾。

假設您有上述情況,參與分佈式事務的多個應用程序和/或服務,聽起來好像其中一個配置不正確。鏈中的某些東西並不是真正的分佈式事務,因此當它完成時,它只能在本地完成,而不會將信號發送回線路。所以分佈式事務從不完成,保持連接處於打開狀態。

檢查參與事務的每個應用程序和/或服務的配置。在每個細節上添加日誌記錄輸出,以確定事務是否是分佈式事務。如果你不能這樣做,那麼dd記錄輸出到每個記錄事務的開始和結束。在你看到一個開放交易而不是一個關閉交易的操作序列中尋找最新點。如果你看到了這一點,它很可能是鏈中的節點正在做錯事情。

祝你好運。

+0

XA連接超時設置爲10小時。我想這是造成這個問題可能的原因。 – 2014-12-11 20:21:19