數據庫鏡像期間可能出現的故障

物理故障、操作系統故障或 SQL Server 故障都可能導致數據庫鏡像會話失敗。數據庫鏡像不會定期檢查 Sqlservr.exe 所依賴的組件來驗證組件是在正常運行還是已出現故障。但對于某些類型的故障,受影響的組件將向 Sqlservr.exe 報告錯誤。由另一個組件報告的錯誤稱為“硬錯誤”。為了檢測可能未被注意的其他故障,數據庫鏡像采用了自己的超時機制。發生鏡像超時時,數據庫鏡像將假定已發生故障并聲明一個“軟錯誤”。
在數據庫鏡像會話中無法檢測到數據庫(除鏡像數據庫之外)故障。此外,也無法檢測到數據磁盤故障,除非數據庫因為數據磁盤故障而重新啟動。 |
因此,錯誤檢測的速度以及鏡像會話對故障的反應時間取決于是硬錯誤還是軟錯誤。系統可以立即報告某些硬錯誤,例如網絡故障。但在某些情況下,特定于組件的超時期限可能會延遲報告某些硬錯誤。對于軟錯誤,鏡像超時期限的長度決定了錯誤檢測的速度。默認情況下,此期限為 10 秒鐘。這是建議的最小值。

可能的硬錯誤原因包括(但不限于)下列幾種情況:
- 連接或網線斷開
- 網卡出現故障
- 路由器更改
- 防火墻更改
- 端點重新配置
- 事務日志駐留的驅動器丟失
- 操作系統或進程故障
例如,如果主體數據庫中的日志驅動器停止響應或失敗,操作系統會通知 Sqlservr.exe 出現嚴重錯誤。
某些組件(如網絡組件和某些 IO 子系統)使用它們自己的超時設置來確定故障。這些超時設置獨立于數據庫鏡像,數據庫鏡像不了解它們,并且完全不能識別其行為。在這些情況下,超時延遲會延長發生故障與數據庫鏡像收到所引發硬錯誤之間的時間。
出現軟錯誤時,僅對數據庫鏡像執行活動的錯誤檢查。有關詳細信息,請參閱本主題后面的“軟錯誤導致的故障”。 |
若要了解網絡出現的錯誤情況,請咨詢網絡工程師,詢問當 TCP 連接發生下列事件時,哪些錯誤消息會發送到端口:
- DNS 未運行。
- 網線被拔掉。
- Microsoft Windows 防火墻阻止了特定端口。
- 監視端口的應用程序出現故障。
- 重命名基于 Windows 的服務器。
- 重新啟動基于 Windows 的服務器。
鏡像無法避免與客戶端訪問服務器相關的問題。例如,假設由公用網絡適配器處理與主體服務器實例的客戶端連接,而由專用網絡接口卡處理服務器實例之間的所有鏡像通信流量。此時,盡管數據庫可以繼續進行鏡像,但公用網絡適配器的故障將防止客戶端訪問數據庫。 |

導致鏡像超時的情況包括(但不限于)下列各項:
- 諸如 TCP 鏈接超時、數據包被刪除或損壞或數據包順序錯誤等網絡錯誤。
- 操作系統、服務器或數據庫處于掛起狀態。
- Windows 服務器超時。
- 計算資源不足,例如 CPU 或磁盤超負荷運轉,事務日志填滿,或系統用完內存或線程。在這些情況下,需要增加超時期限、降低工作負荷或更換硬件以處理相應的工作負荷。?
鏡像超時機制
由于軟錯誤不能由服務器實例直接檢測到,因此,軟錯誤可能導致服務器實例無限期等待。為了防止發生這種情況,數據庫鏡像采用了它自己的超時機制,此機制基于鏡像會話中的每個服務器實例會在每個開放連接上按固定間隔發送 ping。
為了使連接保持開放,服務器實例必須能夠在超時期限內在該連接上接收到 ping,此期限為定義的鏡像超時時間再加上再發送一個 ping 所需的時間。在超時期限內收到 ping 指示連接仍是開放的,且服務器實例正在通過此連接進行通信。接收到 ping 后,服務器實例將重置此連接上的超時計數器。
如果未在超時期限內從此連接上收到 ping,則服務器實例認為此連接已超時。服務器實例將關閉超時連接,然后根據會話的狀態和運行模式處理超時事件。
即使其他服務器實際工作正常,超時也被認為是一個故障。如果會話的超時值太短而不能使任一伙伴做出正常響應,則會產生虛假故障。如果一個服務器實例成功地與另一個服務器實例實現通信,但后者的響應時間太短,以致于無法在超時期限過期之前接收到 ping,則會產生錯誤故障。
在高性能模式會話中,超時期限始終為 10 秒鐘。通常,該期限足以避免虛假故障。在高安全性模式會話中,默認超時期限為 10 秒鐘,但您可以更改該持續時間。為了避免虛假故障,建議鏡像超時期限始終為 10 秒鐘或更長。
更改超時值(僅限于高安全性模式)
- 使用?ALTER DATABASE <database> SET PARTNER TIMEOUT <integer>?語句。
查看當前超時值
- 在?sys.database_mirroring?中查詢?mirroring_connection_timeout。?
