實體問題、作業系統問題或 SQL Server 問題可能會導致資料庫鏡像會話失敗。 資料庫鏡像不會定期檢查 Sqlservr.exe 所依賴的元件,以確認它們是否正常運作或失敗。 不過,對於某些類型的故障,受影響的元件會通報錯誤至 Sqlservr.exe。 另一個元件回報的錯誤稱為 「硬式錯誤」。 為了偵測其他較難察覺的失敗,資料庫鏡像採用自己的逾時機制。 發生鏡像逾時時時,資料庫鏡像會假設發生失敗並宣告 虛錯誤。 不過,在 SQL Server 實例層級發生的某些失敗不會造成鏡像超時,也可能不會被偵測到。
這很重要
資料庫鏡像會話中無法偵測到鏡像資料庫以外的資料庫失敗。 此外,除非資料庫因為數據磁碟失敗而重新啟動,否則不太可能偵測到數據磁碟失敗。
錯誤偵測的速度和鏡像會話對故障的反應時間取決於錯誤是硬性還是軟性。 會立即回報某些重大錯誤,例如網路故障。 不過,在某些情況下,元件特定的逾時期間可能會延遲某些嚴重錯誤的報告。 針對軟性錯誤,鏡像逾時期間的長度會決定錯誤偵測的速度。 根據預設,此期間為10秒。 這是建議的最小值。
因硬體錯誤而失敗
硬性錯誤的可能原因包括(但不限於)下列條件:
中斷的連線或電線
壞的網路卡
路由器變更
防火牆中的變更
端點重新設定
遺失事務記錄檔所在的磁碟驅動器
作業系統或程序失敗
例如,當主體資料庫上的日誌磁碟無法回應並故障時,作業系統會通知 Sqlservr.exe 發生嚴重錯誤。
某些元件,例如網路元件和某些 IO 子系統,有自己的逾時設定來確定故障。 這類逾時與資料庫鏡像無關,資料庫鏡像對這些逾時一無所知,完全不了解它們的行為。 在這些情況下,超時延遲會增加從故障發生到資料庫鏡像接收到相應硬性錯誤之間的時間。
備註
針對資料庫鏡像執行的唯一作用中錯誤檢查會發生於軟錯誤案例中。 如需詳細資訊,請參閱本主題稍後的「因軟錯誤導致的失敗」。
為了協助您解譯網路上發生的錯誤狀況,請向網路工程師詢問在 TCP 連線發生下列事件時,傳送到埠的錯誤訊息:
DNS 無法運作。
纜線被拔下。
Microsoft Windows 具有封鎖特定埠的防火牆。
監視埠的應用程式失敗。
Windows 伺服器已重新命名。
Windows 伺服器重新啟動。
備註
鏡像無法防範用戶端存取伺服器的特定問題。 例如,假設公用網路適配器會處理主體伺服器實例的用戶端連線,而私人網路介面卡則處理伺服器實例之間的所有鏡像流量。 在此情況下,公用網路介面卡故障會防止用戶端存取資料庫,不過資料庫會維持鏡像備援。
軟性錯誤導致的故障
可能導致鏡像逾時的情況包括但不限於以下:
網路錯誤,例如 TCP 連結逾時、捨棄或損毀的封包,或順序不正確的封包。
未回應的作系統、伺服器或資料庫。
Windows 伺服器逾時。
計算資源不足,例如 CPU 或磁碟多載、事務歷史記錄填滿,或系統記憶體不足或線程不足。 在這些情況下,您必須增加逾時期間、減少工作負載,或變更硬體來處理工作負載。
鏡像 Time-Out 機制
因為伺服器實例無法直接偵測軟式錯誤,所以軟式錯誤可能會導致伺服器實例無限期等候。 為避免這種情況,資料庫鏡像會根據鏡像會話中的每個伺服器實例,以固定間隔在每個開啟的連線上傳送 Ping,實作自己的逾時機制。
若要讓連線保持開啟,伺服器實例必須在定義的逾時期間收到該連線的 Ping,再加上傳送一個多 Ping 所需的時間。 在逾時期間接收 Ping 表示連線仍在開啟,而且伺服器實例會透過它進行通訊。 在接收 Ping 時,伺服器實例會在該連線上重設逾時計數器。
如果在逾時期間沒有在連線上收到 Ping,伺服器實例就會將連線視為逾時。伺服器實例會關閉逾時連線,並根據會話的狀態和作業模式處理逾時事件。
即使另一台伺服器實際運行正常,逾時仍視為失敗。 如果會話的逾時值設得太短,無法讓任一夥伴正常回應,就會發生誤判。 當某個伺服器實例成功聯絡另一個伺服器實例,但因為其回應時間過慢,未能在逾時期限內收到回覆的 Ping 時,就會發生偽故障。
在高效能模式會話中,逾時期間一律為 10 秒。 這通常足以避免誤判失敗。 在高安全性模式會話中,預設逾時期間為10秒,但您可以變更持續時間。 為了避免假性失敗,建議您將鏡像逾時期限一律設為 10 秒或更久。
變更逾時值 (僅限高安全性模式)
檢視目前的逾時值
- 查詢sys.database_mirroring中的mirroring_connection_timeout。
回應錯誤
不論錯誤類型為何,偵測錯誤的伺服器實例都會根據實例的角色、會話的作業模式,以及會話中任何其他連線的狀態,適當地回應。 如需合作夥伴遺失時所發生狀況的詳細資訊,請參閱 資料庫鏡像作業模式。
另請參閱
估計角色切換期間的服務中斷 (資料庫鏡像)
資料庫鏡像運作模式
資料庫鏡像會話期間的角色切換 (SQL Server)
資料庫鏡像 (SQL Server)