SQL Server 2000 的日誌傳送會在監控伺服器上安裝監控工具程式,最好部署在第三台伺服器上。為了通知監控伺服器日誌傳送的角色已變更,必須在監控伺服器上執行 sp_change_monitor_role 預存程序(如程式碼清單 3 所示)。雖然名稱含有「change」,但它不會變更監控伺服器的角色,而是變更主要/次要伺服器內檔案共享所參照的位置。具體而言:log_shipping_secondaries 資料表中原本參照舊次要伺服器的資料會被刪除;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'
程式碼清單 3:通知監控伺服器角色互換結果的預存程序
必須先在新主要伺服器上解析舊主要伺服器的登入帳號,使用者才能存取新主要伺服器;方式是使用步驟 1 匯出的登入帳號檔案。此匯出檔案可被 sp_resolve_logins 預存程序讀取,進而解析各伺服器間 SID 的差異。程式碼清單 4 示範如何在新復原的 Pubscopy 資料庫上執行 sp_resolve_logins 解析原登入帳號。注意:BOL 文件曾說明必須在目的資料庫內執行該程序,但實際上 sp_resolve_logins 使用非完整參照指向 syslogins 檢視表,所以必須在 master 資料庫內執行才有效!
USE master
GO
EXEC sp_resolve_logins
@dest_db = 'Pubscopy',
@dest_path = 'd:\',
@filename = 'syslogins.dat'
程式碼清單 4:在次要伺服器上解析登入帳號的預存程序
BOL 對角色變更的討論止於步驟 5,但忽略一個重要步驟:在「資料庫存取權限」與「轉移後登入帳號」間進行協調。為了在新主要伺服器的線上資料庫中,將已解析的登入帳號連結至對應的資料庫使用者及其權限,必須對每個登入帳號執行一次 sp_change_users_login 預存程序。
USE pubscopy
GO
EXEC sp_change_users_login 'Update_One', 'UserName', 'LoginName'
執行此程序可確保 SQL Server 登入帳號正確連結對應的資料庫使用者名稱。
到此,您已成功將次要伺服器升級為新角色,舊主要伺服器也變為次要伺服器。但您尚未建立新的日誌傳送關係——完成的只是角色變更,而非角色互換。
為達成完整的日誌傳送角色互換,只需在新主要與新次要伺服器間重新設定一次日誌傳送。因新主要伺服器已含全新的資料庫維護計畫,您可能傾向在維護計畫中直接加入新次要伺服器作為目的伺服器。但經多次嘗試發現,新主要伺服器的「交易記錄備份工作」總是失敗,記錄也無法傳送到新次要伺服器。
因此需要另一種方法:在執行完日誌傳送角色變更預存程序及上述步驟後,可直接在新主要與新次要伺服器間建立一份新的日誌傳送計畫。建置步驟如下: