現代理念強調預防不可用、失敗時影響最小化,而非事後災難恢復。SQL Server 2008 提供三大核心方案構建業務連續性。
| 模式 | 架構 | 資源利用 | 故障切換 |
|---|---|---|---|
| Active/Passive | 單一實例,主節點服務,備用節點待命 | 備用閒置,成本較高 | 極快,僅啟動服務 |
| Active/Active | 多實例,各節點主不同實例 | 雙節點皆工作,資源利用率高 | 需備用節點承擔雙倍負載,硬體規格須規劃足夠 |
Active/Active 實質為多虛擬伺服器互為備援,單實例仍無法多寫入 (唯一交易日誌)。
基於每個資料庫獨立配置。主資料庫定期備份交易記錄 → 複製至次要伺服器 → 還原 (NORECOVERY/STANDBY)。支援多次要伺服器。
文中提供完整 sp_add_log_shipping_primary_database、sp_add_log_shipping_secondary_* 等系統預存程序腳本範例,適合自動化部署。
連接字串加入 Failover Partner:
Server=Principal; Failover Partner=Mirror; Database=AdventureWorks2008
驅動程式自動嘗試切換,無需應用程式修改。
| 模式 | 同步方式 | 自動容錯移轉 | 見證伺服器 | 資料損失風險 |
|---|---|---|---|---|
| 高效能 | 非同步 | 不支援 | 不需要 | 可能 (主體未等鏡像確認) |
| 高安全性 (無自動) | 同步 | 不支援 | 不需要 | 無 (同步提交) |
| 高安全性 (有自動) | 同步 | 支援 | 必要 | 無 |
仲裁機制:三角色中任兩者連通即構成仲裁,服務可用。失去仲裁則鏡像狀態改變 (SUSPENDED/DISCONNECTED)。
-- 建立端點 (主體/鏡像)
CREATE ENDPOINT MirroringEndPoint STATE=STARTED AS TCP(LISTENER_PORT=5022) FOR DATABASE_MIRRORING(ROLE=PARTNER);
-- 建立見證端點 (含加密範例)
CREATE ENDPOINT WitnessEndPoint STATE=STARTED AS TCP(LISTENER_PORT=5024) FOR DATABASE_MIRRORING(AUTHENTICATION=WINDOWS NEGOTIATE, ENCRYPTION=REQUIRED ALGORITHM AES, ROLE=WITNESS);
-- 建立鏡像夥伴關係
ALTER DATABASE AdventureWorksLT2008 SET PARTNER = 'TCP://MIRROR:5022'; -- 在主體執行
ALTER DATABASE AdventureWorksLT2008 SET PARTNER = 'TCP://PRINCIPAL:5023'; -- 在鏡像執行
ALTER DATABASE AdventureWorksLT2008 SET WITNESS = 'TCP://WITNESS:5024'; -- 在主體執行
-- 切換非同步 (高效能)
ALTER DATABASE AdventureWorksLT2008 SET PARTNER SAFETY OFF;
ALTER DATABASE ... SET PARTNER SUSPEND/RESUME。ALTER DATABASE ... SET PARTNER FAILOVER (在主體執行)。ALTER DATABASE ... SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS。ALTER DATABASE ... SET PARTNER OFF,端點保留可重用。| 需求 | 推薦方案 | 備註 |
|---|---|---|
| 實例級 HA、自動容錯、共享儲存可行 | 容錯移轉叢集 | Active/Active 需規劃雙倍負載容量 |
| 資料庫級 HA、跨機房、可容忍分鐘級 RTO、需報表分流 | 記錄傳送 | Standby 模式支援唯讀查詢 |
| 資料庫級 HA、自動秒級容錯、零資料損失、無共享儲存 | 資料庫鏡像 (高安全性+見證) | 單一鏡像夥伴,不支援 FILESTREAM |
| 多次要庫、跨區域災備、可接受資料損失 | 記錄傳送 + 鏡像混合 | 鏡像做本地 HA,記錄傳送做遠端災備 |
三大方案可疊加組合 (如 FC 節點上再做鏡像/記錄傳送),構建多層次高可用防護體系。