萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> 資料庫綜合

SQL Server 資料庫鏡像部署全腳本:夥伴/見證/安全/啟動/驗證一站式實施

高可用鏡像 (High-Safety 模式) 完整自動化部署指南

資料庫鏡像 (Database Mirroring) 是 SQL Server 經典高可用方案。本文提供從端點建立、備份還原、夥伴/見證配置、安全授權到狀態驗證的**完整可執行 T-SQL 腳本**,適配 SQL Server 2005~2019。

架構拓撲

  • Principal (MIR-A):主體伺服器,對外提供服務
  • Mirror (MIR-B):鏡像伺服器,熱備援
  • Witness (MIR-W):見證伺服器,協助自動故障轉移 (High-Safety with Auto Failover)

所有節點需同版本、同版次、同補丁;防火牆開放 **TCP 5022** (預設鏡像端口)。

完整部署腳本 (按順序在各節點執行)

1. 建立鏡像端點 (三節點各執行一次,ROLE 不同)

-- MIR-A (Principal) & MIR-B (Mirror): ROLE = PARTNER
CREATE ENDPOINT DB_MirroringEP
  STATE = STARTED
  AS TCP (LISTENER_PORT = 5022)
  FOR DATABASE_MIRRORING (ROLE = PARTNER, ENCRYPTION = SUPPORTED);
GO

-- MIR-W (Witness): ROLE = WITNESS
CREATE ENDPOINT DB_MirroringEP
  STATE = STARTED
  AS TCP (LISTENER_PORT = 5022)
  FOR DATABASE_MIRRORING (ROLE = WITNESS, ENCRYPTION = SUPPORTED);
GO

-- 驗證端點
SELECT * FROM sys.database_mirroring_endpoints;

2. 授權服務帳號連接端點 (三節點各執行)

-- 假設服務帳號為 DOMAIN\sqlsvc
GRANT CONNECT ON ENDPOINT::DB_MirroringEP TO [DOMAIN\sqlsvc];
GO

3. Principal 完整備份 + Mirror 無恢復還原

-- MIR-A: 完整備份
BACKUP DATABASE AdventureWorks TO DISK = 'C:\Backup\AdventureWorks.bak' WITH COMPRESSION, STATS=5;
GO
-- 複製 .bak 到 MIR-B (安全複製)

-- MIR-B: 無恢復還原 (關鍵:NORECOVERY)
RESTORE DATABASE AdventureWorks
FROM DISK = 'C:\Backup\AdventureWorks.bak'
WITH NORECOVERY, STATS=5, MOVE 'AdventureWorks_Data' TO 'D:\Data\AdventureWorks.mdf', MOVE 'AdventureWorks_Log' TO 'L:\Log\AdventureWorks.ldf';
GO

-- 如有差異備份/日誌備份,依序 NORECOVERY 還原

4. 啟動鏡像會話 (順序關鍵:先 Mirror 再 Principal)

-- 4.1 MIR-B (Mirror) 先指定 Principal 夥伴
ALTER DATABASE AdventureWorks SET PARTNER = N'TCP://MIR-A.yourdomain.com:5022';
GO

-- 4.2 MIR-A (Principal) 指定 Mirror 夥伴
ALTER DATABASE AdventureWorks SET PARTNER = N'TCP://MIR-B.yourdomain.com:5022';
GO

-- 4.3 MIR-A 指定 Witness
ALTER DATABASE AdventureWorks SET WITNESS = N'TCP://MIR-W.yourdomain.com:5022';
GO

-- 4.4 設定安全等級 (High-Safety 同步模式)
ALTER DATABASE AdventureWorks SET SAFETY FULL;
GO

狀態驗證與監控

-- 1. SSMS 物件總管:資料庫圖示顯示 (Principal, Synchronized) / (Mirror, Synchronized / Restoring)
-- 2. 資料庫屬性 → 鏡像頁籤:狀態、運作模式、見證狀態
-- 3. 系統目錄查詢
SELECT 
  db_name(database_id) AS DatabaseName,
  mirroring_state_desc,      -- SYNCHRONIZED / SUSPENDED / PENDING_FAILOVER
  mirroring_role_desc,       -- PRINCIPAL / MIRROR
  mirroring_safety_level_desc, -- FULL / OFF
  mirroring_witness_state_desc,
  mirroring_connection_timeout
FROM sys.database_mirroring
WHERE database_id = DB_ID('AdventureWorks');

常見失敗排查

錯誤原因對策
1418: 網路地址無法到達端口未開、防火牆、主機名解析失敗telnet 5022、hosts 檔/IP 直連、DNS
1416: 無法成為鏡像Mirror DB 不在 NORECOVERY / LSN 斷裂重新完整備份+NORECOVERY 還原、補齊日誌鏈
1456: 見證無法連接Witness 端點角色錯/防火牆/授權檢查 ROLE=WITNESS、GRANT CONNECT、端口

遷移至 AlwaysOn 可用性群組建議

SQL Server 2012+ 推薦使用 **AlwaysOn Availability Groups**:支援多副本、可讀次要、無見證單點、群組故障轉移、聽眾器自動導流。鏡像已進入維護模式,新架構請直接上 AG。

copyright © 萬盛學電腦網 all rights reserved