程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2000日志傳送功能(1)

SQL Server 2000日志傳送功能(1)

編輯:關於SqlServer
角色變更、角色互換、以及監控服務器所在位置

當線上數據庫停擺時(可能是計劃內維護工作,或是預期外的狀況),如果還有備援服務器上的數據庫可供存取,您可能會比較安心一點。一個設計良好的日志傳送系統(將數據庫交易日志文件從主要服務器傳送到備援服務器)即可給予您這樣的自信心。內建於 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 日志傳送數據庫從讀/寫模式更改成只讀備援模式,准備隨時接受交易日志之備份資料。該預存程序經由數個步驟後會在日志傳送計劃內刪除主要服務器數據庫。傳入的參數將告之預存程序需執行以下工作:備份最近一次的交易日志、結束數據庫內所有使用者聯機、將數據庫設定在備援狀態與多使用者存取層級。預存程序的回傳代碼將標示 BACKUP LOG 敘述句是否成功執行。
程序代碼列表1:將日志傳送數據庫從讀/寫模式降級成只讀模式之預存程序。
USE master
GO
EXEC msdb.dbo.sp_change_primary_role
@db_name = ’Pubscopy’,
@backup_log = 1,
@terminate = 1,
@final_state = 3,
@Access_level = 1

步驟 3: 升級次要服務器 下一個步驟是把目前次要服務器升級成復原狀態(recovered state),這樣它才能取代原先的線上數據庫,且變成潛在日志傳送主要服務器數據庫。在次要服務器上,如果您已確認無任何使用者繼續存取數據庫,就可以執行 sp_change_secondary_role 預存程序,

如程序代碼列表2所示:
程序代碼列表 2:將次要服務器數據庫升級成主要服務器數據庫之預存程序。
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 是在執行 sqlmaint.exe 時指定尚未文件化的 Forceload 選項;參數 @final_s


您正在看的SQLserver教程是:SQL Server 2000日志傳送功能(1)。tate=1 將新主要服務器數據庫設定為復原模式;參數 @Access_level 將存取方式設回先前多使用者狀態。參數 @terminate=1 則促使該預存程序中斷所有使用者的數據庫存取動作 — 方式是執行 ALTER DATABASE 配合 IMMEDIATE 選項。然而,如果執行此預存程序時,您自己的 Enterprise Manager 與數據庫間聯機處於開啟狀態,ALTER DATABASE 動作將會失敗。所以您必須以手動方式確認是否已將所有數據庫聯機予以中斷。最後,如果該數據庫被設定為數據庫復寫(replication)之出版者數據庫(publisher),那麼 @keep_replication=0 參數將依舊維持服務器上所有復寫設定。
假如您曾選擇讓次要服務器成為未來潛在的主要服務器,則數據庫維護計劃會在次要服務器上建置一個交易日志備份工作(SQL Server Agent 的transaction-log backup job)。該工作激活之後,交易日志備份文件就會開始出現在新主要服務器。您需要這些檔案去重新設定將日志傳送回新次要服務器。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved