熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

SQL Server 2000之日志傳送功能 - 描述

2022-06-13   來源: SQL Server 

  當線上數據庫停擺時(可能是計劃內維護工作或是預期外的狀況)如果還有備援服務器上的數據庫可供存取您可能會比較安心一點一個設計良好的日志傳送系統(將數據庫交易日志文件從主要服務器傳送到備援服務器)即可給予您這樣的自信心內建於 SQL Serve 企業版與開發版的 Enterprise Manager 工具程序即支持日志傳送功能

  角色變更

  將日志從主要服務器傳送到次要服務器之後您可在必要時以次要服務器置換掉主要服務器如果主要服務器發生問題或是計劃性停擺(例如升級硬件或安裝修正程序)線上數據庫就必須停止服務一段期間此時您可以變更次要服務器上數據庫之角色讓它取代主要服務器之後進而成為線上數據庫SQL Server 線上手冊(Books OnlineBOL)將此項操作稱為日志傳送角色變更(log shipping role change)在日志傳送過程裡次要服務器需設定在無法復原(nonrecovered)狀態因此交易日志才能從主要服務器回存到次要服務器(一但您將數據庫復原就不能再回存交易記錄)變更角色時您需將次要服務器的數據庫予以復原並標示其為新主要服務器數據庫您也可以將舊主要服務器數據庫設定為新次要服務器數據庫如果舊主要服務器數據庫並未損壞那麼就可以在新主要服務器與舊主要服務器(已變成新次要服務器)之間重新建置日志傳送功能這種切換方式我們稱為角色互換(role reversal)

  這些操作指引可修訂為六個基本步驟分別為 轉移與匯出登入帳號降級(demote)主要服務器升級(promote)次要服務器通知監控服務器角色已變更在次要服務器上解析登入帳號以及連結數據庫存取與權限

  步驟 : 轉移與匯出登入帳號 首先BOL 建議您建立一個SQL Server DTS封裝(package)用來將主要服務器的登入帳號轉移到次要服務器且執行各服務器間登入帳號SID之解析動作轉移登入帳號所用的 DTS Transfer Logins Task只能在 SQL Server DTS Designer內使用您可在主要服務器上建立與儲存 DTS 封裝然後呼叫 dtsrunexe 設定該封裝的執行方式 — 透過主要服務器 SQL Server Agent 的工作(job)該封裝執行時會將登入帳號從某服務器傳送到另一服務器但是它並不會解析其登入帳號的SID(在稍後步驟中會說明為何需解析登入帳號)然而為了在稍後能順利解析登入帳號您必須先建立一個檔案其內包含主要服務器 syslogins 資料表的匯出資料

  匯出登入帳號到次要服務器時BOL建議您建立一個兩階段的SQL Server Agent工作使用bcp匯出以及復制登入帳號在第一個步驟您將使用原始模式的bcp將登入帳號匯出至某個檔案而在第二個步驟裡您必須將登入帳號復制到次要服務器的某個檔案以便稍後進行角色變更時可用來解析登入帳號在步驟您將使用 sp_resolve_logins 預存程序去解析次要服務器上登入帳號的SID該工作建立完成後就可以定期地執行(例如每晚執行一次)如此一來次要服務器上將隨時保留最新的登入帳號匯出文件以便進行日志傳送角色變更

  步驟 : 降級主要服務器 為了讓主要服務器不再是日志傳送系統的資料來源您必須將它降級您可以降級主要服務器的來源數據庫讓它變成潛在的次要服務器然後在主要服務器上執行sp_change_primary_role 預存程序目的是移除原有日志傳送功能程序代碼列表顯示該預存程序如何把 Pubscopy 日志傳送數據庫從讀/寫模式更改成只讀備援模式准備隨時接受交易日志之備份資料該預存程序經由數個步驟後會在日志傳送計劃內刪除主要服務器數據庫傳入的參數將告之預存程序需執行以下工作備份最近一次的交易日志結束數據庫內所有使用者聯機將數據庫設定在備援狀態與多使用者存取層級預存程序的回傳代碼將標示 BACKUP LOG 敘述句是否成功執行

  程序代碼列表將日志傳送數據庫從讀/寫模式降級成只讀模式之預存程序

  USE master

  GO

  EXEC msdbdbosp_change_primary_role

  @db_name = Pubscopy

  @backup_log =

  @terminate =

  @final_state =

  @access_level =

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

  程序代碼列表 將次要服務器數據庫升級成主要服務器數據庫之預存程序

  USE master

  GO

  EXEC msdbdbosp_change_secondary_role

  @db_name = Pubscopy

  @do_load =

  @force_load =

  @final_state =

  @access_level =

  @terminate =

  @keep_replication =

  @stopat = null

  這些參數將促使該預存程序嘗試將所有剩余的交易日志文件從原先主要服務器復制到次要服務器並將這些日志文件加載次要服務器數據庫參數 @do_load= 會進行最近一次備份並加載所有交易日志文件;參數 @force_load= 是在執行 sqlmaintexe 時指定尚未文件化的 Forceload 選項;參數 @final_state= 將新主要服務器數據庫設定為復原模式;參數 @access_level 將存取方式設回先前多使用者狀態參數 @terminate= 則促使該預存程序中斷所有使用者的數據庫存取動作 — 方式是執行 ALTER DATABASE 配合 IMMEDIATE 選項然而如果執行此預存程序時您自己的 Enterprise Manager 與數據庫間聯機處於開啟狀態ALTER DATABASE 動作將會失敗所以您必須以手動方式確認是否已將所有數據庫聯機予以中斷最後如果該數據庫被設定為數據庫復寫(replication)之出版者數據庫(publisher)那麼 @keep_replication= 參數將依舊維持服務器上所有復寫設定

  假如您曾選擇讓次要服務器成為未來潛在的主要服務器則數據庫維護計劃會在次要服務器上建置一個交易日志備份工作(SQL Server Agent 的transactionlog backup job)該工作激活之後交易日志備份文件就會開始出現在新主要服務器您需要這些檔案去重新設定將日志傳送回新次要服務器

  Step : 通知監控服務器角色已變更 SQL Server 的日志傳送會在監控服務器上安裝監控工具程序;最好是在第三台服務器為了通知監控服務器日志傳送的角色已經過變更您必須在監控服務器上執行 sp_change_monitor_role 預存程序如程序代碼列表所示盡管名稱內含有 change 字眼但它並不會變更監控服務器的角色相反地此預存程序會變更主要/次要服務器內檔案分享所參照(reference)的位置意思是說監控服務器 log_shipping_secondaries 資料表內原先參照舊次要服務器的資料會被刪除而在 log_shipping_primaries 資料表內則是將舊主要服務器名稱更改為新主要服務器名稱此預存程序並不會將資料新增到 log_shipping_secondaries 資料表因為新的配對服務器目前尚未建置

  程序代碼列表 將角色互換結果通知監控服務器之預存程序

  USE master

  GO

  EXEC msdbdbosp_change_monitor_role

  @primary_server = oahu\sqlk_

  @secondary_server = oahu\sqlk_

  @database = Pubscopy

  @new_source = oahu\sqlk_

  步驟 : 在次要服務器上解析登入帳號 您必須先在新主要服務器上解析舊主要服務器登入帳號使用者才可以存取新主要服務器;方式是使用步驟所匯出之登入帳號檔案此匯出檔案可被 sp_resolve_logins 預存程序所讀取然後解析各服務器間 SID 的差異舉例來說程序代碼列表示范如何在新復原的 Pubscopy 數據庫上執行 sp_resolve_logins 預存程序去解析原來的登入帳號BOL文章曾教導您必須在目的數據庫內才能執行該預存程序事實上sp_resolve_logins 使用了非完整式參照(unqualified reference)指向 syslogins 視觀表所以您必須在 master 數據庫內才能執行此預存程序!

  程序代碼列表 在次要服務器上解析登入帳號的預存程序

  USE master

  GO

  EXEC sp_resolve_logins

  @dest_db = Pubscopy

  @dest_path = d:\

  @filename = sysloginsdat

  步驟 : 連結數據庫存取與權限 BOL 對於角色變更的相關討論僅止於步驟但是它忽略一個重要步驟數據庫存取權限轉移後登入帳號 之間進行協調動作為了在新主要服務器內線上數據庫將移轉後已解析的登入帳號連結至相對應的數據庫使用者及其權限您必須執行針對每個登入帳號執行一次 sp_change_users_login 預存程序

  USE pubscopy

  GO

  EXEC sp_change_users_login Update_One UserName LoginName

  執行該預存程序可確保 SQL Server 登入帳號能夠正確地連結相對應的數據庫使用者名稱

  到此為止您已經成功地將次要服務器升級為新的角色而舊主要服務器也早已變成次要服務器然而您仍然尚未建置新的日志傳送關系您完成的只是角色變更而不是角色互換

  角色互換

  為了達成完整的日志傳送角色互換您只需在新主要服務器與新次要服務器之間重新設定一次日志傳送即可因為新主要服務器已內含嶄新的數據庫維護計劃您將會傾向在維護計劃內直接加入新次要服務器做為目的服務器然而經過多次嘗試之後我發現新主要服務器的 交易日志備份工作 總是會失敗<
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22536.html

    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.