資料庫鏡像 提供資料庫級別的熱備援,支援 **高安全模式 (同步)** 與 **高效能模式 (非同步)**。本文提供標準化部署 T-SQL 腳本,涵蓋兩夥伴節點與見證伺服器端點建立、鏡像會話啟動、手動容錯移轉指令。
| 角色 | 主機 | 端點埠 | 夥伴連線字串 |
|---|---|---|---|
| Principal (主要) | Server1 | 5023 | TCP://Server2:5022 |
Server1: 192.168.5.106 (Principal), Server2: 192.168.5.106 (Mirror), Witness: 192.168.5.106 (同一測試機不同埠)。生產環境必須為**獨立實體/虛擬機器**,跨機架/可用區域部署。
-- 1. 建立鏡像端點 (僅需執行一次)
CREATE ENDPOINT DbMirroring
STATE = STARTED
AS TCP (LISTENER_PORT = 5023)
FOR DATABASE_MIRRORING (ROLE = PARTNER, ENCRYPTION = SUPPORTED);
GO
-- 2. 設定夥伴為 Mirror 伺服器
ALTER DATABASE AdventureWorks
SET PARTNER = 'TCP://192.168.5.106:5022';
GO
-- 1. 建立鏡像端點
CREATE ENDPOINT DbMirroring
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = PARTNER, ENCRYPTION = SUPPORTED);
GO
-- 2. 設定夥伴為 Principal 伺服器
ALTER DATABASE AdventureWorks
SET PARTNER = 'TCP://192.168.5.106:5023';
GO
-- 1. 建立見證端點 (ROLE = WITNESS)
CREATE ENDPOINT DbMirroring
STATE = STARTED
AS TCP (LISTENER_PORT = 5033)
FOR DATABASE_MIRRORING (ROLE = WITNESS, ENCRYPTION = SUPPORTED);
GO
-- 2. 在 Principal 執行:加入見證
ALTER DATABASE AdventureWorks
SET WITNESS = 'TCP://192.168.5.106:5033';
GO
-- 在 Principal 伺服器執行,角色互換
USE MASTER;
GO
ALTER DATABASE AdventureWorks SET PARTNER FAILOVER;
GO
執行後,原 Mirror 成為新 Principal,原 Principal 成為 Mirror。連線字串需支援 `Failover Partner=MirrorServer` 自動重導。
-- 鏡像狀態總覽
SELECT
db_name(sd.database_id) AS DatabaseName,
sd.mirroring_state_desc AS State,
sd.mirroring_role_desc AS Role,
sd.mirroring_partner_instance AS Partner,
sd.mirroring_witness_state_desc AS WitnessState,
sd.mirroring_safety_level_desc AS SafetyLevel,
sd.mirroring_connection_timeout AS TimeoutSec
FROM sys.database_mirroring sd
WHERE sd.mirroring_guid IS NOT NULL;
-- 鏡像效能計數器 (效能監視器)
-- SQLServer:Database Mirroring -> Bytes Received/Sec, Bytes Sent/Sec, Log Remaining for Undo KB, ...
| 錯誤 | 原因 | 解決 |
|---|---|---|
| 1418: 夥伴網路位址無法到達 | 防火牆、埠錯誤、端點未啟動、DNS 解析失敗 | Telnet 測試埠連通、檢查端點 STATE=STARTED、IP/主機名可解析 |
| 1474: 無法啟動鏡像,資料庫狀態不正確 | Mirror 端資料庫非 NORECOVERY/STANDBY、未套用記錄備份、檔案路徑不符 | 重新 RESTORE WITH NORECOVERY、檢查檔案路徑 WITH MOVE |
| 1456: 見證無法連線 | 見證端點角色錯誤、防火牆、權限 | 確認 ROLE=WITNESS、雙向連通 |
資料庫鏡像以「資料庫級、同步/非同步可選、自動容錯移轉 (含見證)、透明用戶端重導」成為 SQL Server 2005-2016 經典高可用方案。**關鍵在於:FULL 復原模式、完整備份鏈初始化、端點加密與權限、網路雙向通暢、定期容錯移轉演練。** 現代架構 (2012+) 建議優先考慮 Always On 可用性群組 (支援多副本、讀取負載平衡、群組級容錯移轉)。