當主要伺服器停擺(計畫維護或意外故障),可將次要伺服器提升為新主要伺服器。此操作稱「角色變更」;若舊主要修復後重建雙向傳送,稱「角色互換」。次要伺服器需處於 非復原狀態 才能持續套用記錄檔。
建立 DTS 封裝執行 Transfer Logins Task(僅限 SQL Server 2000 DTS 設計師),透過 dtsrun.exe 設定 SQL Agent 作業定期執行(如每晚一次)。
關鍵補充:DTS 任務不解析 SID,需額外建立兩階段 Agent 作業:
bcp 原始模式匯出 syslogins 資料表至檔案sp_resolve_logins 使用執行 sp_change_primary_role 移除原有記錄傳送功能,將資料庫從讀寫模式改為唯讀備援模式:
USE master
GO
EXEC msdb.dbo.sp_change_primary_role
@db_name = 'Pubscopy',
@backup_log = 1, -- 備份最後一筆交易記錄
@terminate = 1, -- 終止所有使用者連線
@final_state = 3, -- 設為備援狀態
@access_level = 1 -- 多使用者存取層級
回傳碼指示 BACKUP LOG 是否成功。
確認無使用者存取後,執行 sp_change_secondary_role 將次要資料庫提升為復原狀態:
USE master
GO
EXEC msdb.dbo.sp_change_secondary_role
@db_name = 'Pubscopy',
@do_load = 1, -- 備份並載入所有剩餘記錄檔
@force_load = 1, -- 指定 FORCELOAD 選項
@final_state = 1, -- 設為復原模式(線上)
@access_level = 1,
@terminate = 1, -- 中斷所有連線 (ALTER DATABASE ... IMMEDIATE)
@keep_replication = 0, -- 保留複寫設定
@stopat = null
注意: 若 Enterprise Manager 仍有開啟連線,ALTER DATABASE 會失敗,需手動確認所有連線已中斷。升級後新主要伺服器將產生交易記錄備份檔案,供後續重建傳送關係使用。