2009-07-02 55 views
3

如果我正在開發一個可以利用SQL Server集羣的環境,那麼我應該知道什麼(如果有的話)?針對SQL Server集羣進行開發

從我所看到的東西,我應該處理的數據庫操作異常,有兩種選擇:

  • 顯示「重試」給用戶。在用戶重試時,故障轉移節點應該已經啓動。
  • 等待幾秒鐘,然後重試,而不通知用戶。

這是正確的嗎?這是我需要做的嗎?

這是一個ASP.NET應用程序,但我認爲這不會對這種方法產生巨大影響。

任何意見,將不勝感激

鄧肯

回答

3

只需重試連接應該是足夠的。當一個實例是在故障轉移的中間,我們的應用程序打開一個連接,這裏發生了什麼:

  1. 的連接是否正常
  2. 的SQLException:「發送請求時發生傳輸級錯誤(提供程序:TCP提供程序,錯誤:0 - 現有連接被遠程主機強制關閉)。「
  3. SQLException:」建立到SQL Server的連接時發生網絡相關或實例特定的錯誤。驗證實例名稱是否正確並且SQL Server配置爲允許遠程連接(提供程序:TCP提供程序,錯誤:0 - 沒有連接因爲目標機器會主動拒絕它)。「
  4. 將重複步驟3中的消息,直到故障轉移完成。
  5. 重新連接成功。

在這種情況下,您只需要嘗試重試連接。如果你的SQL服務器一般都很響應,你可以嘗試將你的連接代碼包裝在30秒後數據庫調用超時的類中,但是在類中使用更短的超時並重試幾次。這將使您的應用程序只需要一次調用即可完成,並允許內部連接時間在需要時進行故障切換。

雖然網絡名稱和IP地址的轉換是無縫的,但是如果發生故障轉移,您不需要做任何特殊的恢復操作 - 只需重新連接並保持連接。但請記住,任何進程內事務都將被回滾,因此如果在發生斷開連接時有任何正在運行的事件,則需要在新節點上重新提交它。