7

我建立一個數據庫鏡像,然後使用該connectionstring連接到它:如何在故障轉移後連接到鏡像SQL Server?

Data Source={0};Failover Partner={1};Initial Catalog=AdventureWorks; 
    Integrated Security=True; 

添加一些數據到數據庫中,我關閉主體服務器,所以鏡像服務器成爲主要服務器之後。我再次打開連接,出現此錯誤:

System.Data.SqlClient.SqlException: A transport-level error has 
occurred when sending the request to the server. (provider: Shared Memory 
Provider, error: 0 - No process is on the other end of the pipe.) 

我認爲與故障轉移合作伙伴連接字符串中指定,ADO.NET會做的工作對我來說。那麼我現在該做什麼?

這個問題很緊迫。非常感謝你的幫助。

+1

應指定是否有證人或如果這是一個手動故障轉移配置(你只能得到,如果你有一個證人的自動故障轉移。看到http://technet.microsoft.com/ EN-US /庫/ ms189852(SQL.90)的.aspx)。您還應該檢查Principal和Failover上的數據庫狀態。 – 2010-02-04 15:51:33

+0

你在使用什麼提供商? – gbn 2010-02-04 15:55:55

+0

@doug_w:我通過T-SQL手工檢查,一切正常:) @gbn:我正在使用ADO.NET – Vimvq1987 2010-02-04 15:58:42

回答

3

幸運的是,我解決了這個問題。我只需要調用ClearPool方法:

SqlConnection.ClearPool(conn); 

此方法將清除連接池。然後,問題消失了。我很高興。

謝謝大家,支持你。 :D

+0

是的 - 連接池可以導致這種類型的事情與羣集和鏡像 – onupdatecascade 2010-02-04 19:48:36

+0

你如何確定何時清除池?你是否試圖用try/catch打開conn,如果打開拋出異常呢?或者您是否發現了可能需要清除池的通知時可以掛鉤的特定事件?此外,您可以在連接字符串中禁用連接池,但會影響性能,與在打開連接之前始終清除連接池相同。 – 2013-07-11 22:36:32

+0

這是很久以前,我沒有代碼了,但如果我沒有記錯的話,我清除連接池的捕獲異常。不是一個理想的解決方案,但它適用於我作爲演示。 – Vimvq1987 2013-07-26 05:46:31

2

我不是一個專家.net的東西,但你需要SQL本機客戶端(SQLNCLI)來處理故障轉移。 「ado.net」可能是SQLOLEDB

直到Windows Server 2003至少它沒有默認安裝。它可能是獨立的或是SQL客戶端工具的一部分,所以我懷疑你正在使用SQLOLEDB

+0

您能否給我更多的細節? :)。 – Vimvq1987 2010-02-04 16:18:14

+0

嘗試提供程序= SQLNCLI; conn字符串。我現在無法進入msdn查找參考 – gbn 2010-02-04 16:21:42

0

關閉主體之後,你確認了故障切換實際上成了主體嗎?如果它在Sql Server上沒有自動故障轉移,那麼你的鏡像仍然是一個鏡像。

+0

SQL Server顯示鏡像已成爲主體。我嘗試了一個T-SQL,它運行良好:-s – Vimvq1987 2010-02-04 16:57:39

+0

好吧,僅僅從一年前的故障轉移開始,我知道錯過這些小東西是多麼容易......沒有答案給你,抱歉。 – taylonr 2010-02-04 16:59:51

相關問題