當線上資料庫停擺(計畫維護或預期外狀況),備援伺服器資料庫可供存取將大幅降低風險。設計良好的日誌傳送系統(將交易日誌從主要伺服器傳送至備援伺服器)即能提供此信心。SQL Server 2000 企業版與開發版內建的 Enterprise Manager 完整支援日誌傳送功能。
將日誌從主要傳送至次要伺服器後,必要時可讓次要伺服器取代主要伺服器。主要伺服器發生問題或計畫停擺(硬體升級、安裝修正)時,線上資料庫必須停止服務一段期間。此時可變更次要伺服器資料庫角色,使其成為新線上資料庫。SQL Server 2000 線上叢書 (BOL) 稱此操作為「日誌傳送角色變更」。
日誌傳送過程中,次要伺服器須設為不可復原狀態,才能接收主要伺服器的交易日誌備份(一旦復原資料庫,無法再還原交易記錄)。角色變更時,需復原次要伺服器資料庫並標記為新主要資料庫;舊主要資料庫可設為新次要資料庫。若舊主要未損壞,可在新舊主要之間重建日誌傳送,稱為「角色互換」。
bcp 匯出 syslogins 資料表資料至檔案,定期執行(如每晚)保持次要伺服器擁有最新帳號匯出檔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
sp_change_secondary_role 將次要資料庫升級為復原狀態,接管線上服務
USE master
GO
EXEC msdb.dbo.sp_change_secondary_role
@db_name = 'Pubscopy',
@do_load = 1,
@force_load = 1,
@final_state = 1,
@Access_level = 1,
@terminate = 1,
@keep_replication = 0,
@stopat = null
參數說明:@do_load=1 備份並載入所有日誌;@force_load=1 強制載入;@final_state=1 設為復原模式;@terminate=1 中斷所有連線;@keep_replication=0 維持複寫設定
sp_change_monitor_role,更新 log_shipping_primaries 與 log_shipping_secondaries 資料表參照位置
USE master
GO
EXEC msdb.dbo.sp_change_monitor_role
@primary_server = 'oahu\sql2k_1',
@secondary_server = 'oahu\sql2k_2',
@database = 'Pubscopy',
@new_source = 'oahu\sql2k_2'
sp_resolve_logins 解析 SID 差異。**注意:必須在 master 資料庫執行**,非目的資料庫
USE master
GO
EXEC sp_resolve_logins
@dest_db = 'Pubscopy',
@dest_path = 'd:\',
@filename = 'syslogins.dat'
sp_change_users_login 將解析後帳號連結至對應資料庫使用者與權限
USE pubscopy
GO
EXEC sp_change_users_login 'Update_One', 'UserName', 'LoginName'
完成角色變更後,尚未建立新日誌傳送關係。需在新主要與新次要伺服器間重新設定日誌傳送。實測發現新主要伺服器的「交易日誌備份工作」常失敗,日誌無法傳送至新次要伺服器,需採用替代方案重新配置。