2010-02-04 82 views
5

我有一個NHibernate的C#應用​​程序,必須對SQL Server數據庫執行一些操作。在多臺機器上的進程之間的鎖機制

我們的目標是多次在同一臺機器上運行這個程序,以及在其他機器。

其實應用程序中插入一行在SQL表,並檢查第一行用最小的日期是用正確的PID和機器名的行,以便應用程序設置鎖和做的工作。

我們有這樣的邏輯問題,因爲如果保留該鎖的應用程序是崩潰的應用程序也必須刪除其他應用的鎖。

有關更改鎖體系結構的任何提示?

的問題是,應用程序可以運行在多臺機器。

回答

2

如何管理數據庫中的鎖定?您可以擁有一個表/存儲過程,其中每個正在運行的實例註冊到,獲取唯一的ID,並使用存儲過程免費鎖定&。 (與防止多臺機器上的單個用戶進行多次登錄相同的技術)。

+0

我寧願不使用StoredProcedures因爲在我的NHibernate的配置我沒有任何準備。 – 2010-02-04 14:00:14

+0

我的意思是在標準數據範圍之外實現它,作爲一個單獨的模塊。 – Amirshk 2010-02-04 15:05:16

2

要麼

我實現了兩者兼得。

離線鎖可以與數據庫的工作,但如果有過多的進程上的鎖經常要等待(儘管一個體面的數據庫服務器緩存的信息),可以引入抖動的可能性。此外,請確保您與該表做任何事情的時候使用ReadCommited事務隔離級別,死鎖

+0

我會試試看.. – 2010-02-04 14:00:59

相關問題