當線上數據庫停擺時(可能是計劃內維護工作,或是預期外的狀況),如果還有備援服務器上的數據庫可供存取,您可能會比較安心一點。一個設計良好的日志傳送系統(將數據庫交易日志文件從主要服務器傳送到備援服務器)即可給予您這樣的自信心。內建於 SQL Serve 2000 企業板與開發版的 Enterprise Manager 工具程序即支持日志傳送功能。
角色變更
將日志從主要服務器傳送到次要服務器之後,您可在必要時以次要服務器置換掉主要服務器。如果主要服務器發生問題,或是計劃性停擺(例如升級硬件或安裝修正程序),線上數據庫就必須停止服務一段期間。此時您可以變更次要服務器上數據庫之角色,讓它取代主要服務器之後進而成為線上數據庫。SQL Server 2000 線上手冊(Books Online,BOL)將此項操作稱為日志傳送角色變更(log shipping role change)。在日志傳送過程裡,次要服務器需設定在無法復原(nonrecovered)狀態,因此交易日志才能從主要服務器回存到次要服務器(一但您將數據庫復原,就不能再回存交易記錄)。變更角色時,您需將次要服務器的數據庫予以復原,並標示其為新主要服務器數據庫。您也可以將舊主要服務器數據庫設定為新次要服務器數據庫。如果舊主要服務器數據庫並未損壞,那麼就可以在新主要服務器與舊主要服務器(已變成新次要服務器)之間重新建置日志傳送功能。這種切換方式我們稱為角色互換(role reversal)。
這些操作指引可修訂為六個基本步驟,分別為: 1、轉移與匯出登入帳號,2、降級(demote)主要服務器,3、升級(promote)次要服務器,4、通知監控服務器角色已變更,5、在次要服務器上解析登入帳號,6、以及連結數據庫存取與權限。
步驟 1: 轉移與匯出登入帳號 首先,BOL 建議您建立一個SQL Server 2000 DTS封裝(package),用來將主要服務器的登入帳號轉移到次要服務器,且執行各服務器間登入帳號SID之解析動作。轉移登入帳號所用的 DTS Transfer Logins Task只能在 SQL Server 2000 DTS Designer內使用。您可在主要服務器上建立與儲存 DTS 封裝,然後呼叫 dtsrun.exe 設定該封裝的執行方式 — 透過主要服務器 SQL Server Agent 的工作(job)。該封裝執行時會將登入帳號從某服務器傳送到另一服務器,但是它並不會解析其登入帳號的SID(在稍後步驟中會說明為何需解析登入帳號)。然而,為了在稍後能順利解析登入帳號,您必須先建立一個檔案,其內包含主要服務器 syslogins 資料表的匯出資料。
匯出登入帳號到次要服務器時,BOL建議您建立一個兩階段的SQL Server Agent工作:使用bcp匯出,以及復制登入帳號。在第一個步驟,您將使用原始模式的bcp將登入帳號匯出至某個檔案。而在第二個步驟裡,您必須將登入帳號復制到次要服務器的某個檔案,以便稍後進行角色變更時可用來解析登入帳號。在步驟5您將使用 sp_resolve_logins 預存程序去解析次要服務器上登入帳號的SID。該工作建立完成後,就可以定期地執行(例如每晚執行一次)。如此一來次要服務器上將隨時保留最新的登入帳號匯出文件,以便進行日志傳送角色變更。
步驟 2: 降級主要服務器 為了讓主要服務器不再是日志傳送系統的資料來源,您必須將它”降級”。您可以降級主要服務器的來源數據庫,讓它變成潛在的次要服務器。然後在主要服務器上執行sp_change_primary_role 預存程序,目的是移除原有日志傳送功能。程序代碼列表1顯示該預存程序如何把 Pubscopy 日志傳送數據庫從讀/寫模式更改成只讀備援模式,准備隨時接受交易日志之備份資料。