2013-12-10 132 views
0

考慮一個場景,當我在Java中有兩個應用程序A並且在.Net中有兩個用戶使用SQL服務器的數據庫時? A和B都試圖更新同時具有ID和Name兩列的表產品。會發生什麼,我們如何避免這種情況。SQL Server的鎖

請注意,產品表中有大量數據和不能等待B到完成任務,然後開始和等待時間會非常多,在這種情況下,B可拋出一個超時錯誤。

請建議。

+0

這是一個很有意思的問題,但它過於寬泛。請做一些調查/編碼/試驗,並嘗試制定一個更具體的問題,如果你遇到任何問題。 – Marijn

回答

0

通常您會希望在應用程序代碼中同步此類訪問。

我有這樣的,並讓DB 手柄這樣的比賽場景/條件不是很好的選擇很多情況。

對於您的情況,您可以創建第三個應用程序C,它在A和B之間(在一側)和DB(在另一側)之間,代表 。 然後在C中,您可以建立對數據庫的訪問 的細粒度控制。

0

由於超時,您的意思是一個死鎖,其中SQL Server會殺死「較弱」的作業(拋出錯誤並回滾事務)。

解決方案取決於您的方案。如果您可以忍受髒讀取和其他異常情況,則可以將其調整爲較少限制的隔離級別(但這不太可能)。

彼得sugestion是一個很好的,但如果你是無法建立在應用層面共同的切入點,你仍然可以使用複製,消息代理,創建雄鹿表等

在RDBMS或DB水平做

我建議其他人有類似的問題,因爲它是一個非常廣泛的主題,您必須縮小範圍以找到最適合您需求的解決方案。