共用方式為


資料庫鏡像和復寫 (SQL Server)

資料庫鏡像可以與復寫搭配使用,以改善發行集資料庫的可用性。 資料庫鏡像牽涉到一般位於不同計算機上的單一資料庫兩個複本。 在任何指定時間,用戶端目前只能使用一份資料庫複本。 此復本稱為主體資料庫。 用戶端對主體資料庫的更新會套用至資料庫的其他複本,稱為鏡像資料庫。 涉及將在主要資料庫上每次插入、更新或刪除所產生的事務日誌應用到鏡像資料庫。

發行集資料庫完全支持容錯移轉至鏡像資料庫,但對訂閱資料庫的支援則有限度。 分發資料庫不支援資料庫鏡像。 如需復原散發資料庫或訂閱資料庫的相關信息,而不需要重新設定複寫,請參閱 備份和還原復寫的資料庫。 如需鏡像訂閱資料庫的相關資訊,請參閱

備註

故障轉移之後,鏡像會變成主體。 在本主題中,「主體」和「鏡像」一律參考原始主體和鏡像。

搭配資料庫鏡像使用復寫的需求和考慮

使用資料庫鏡像進行複寫時,請注意以下要求和注意事項:

  • 主系統和鏡像必須共用分發者。 我們推薦將其設置為遠端分散系統,這將在發行者遭遇非計劃性故障轉移時提供更大的容錯能力。

  • 復寫支援鏡像發行集資料庫進行合併式複寫,以及使用只讀訂閱者或佇列更新訂閱者進行事務複製。 不支援立即更新訂閱者、Oracle 發行者、點對點拓撲中的發行者,以及重新發佈。

  • 存在於資料庫外部的元數據和物件不會複製到鏡像,包括登入、作業、鏈接的伺服器等等。 如果您需要鏡像上的元數據和物件,則必須手動複製它們。 如需詳細資訊,請參閱角色切換后登入和作業的管理(SQL Server)。

使用資料庫鏡像設定複寫

設定複寫和資料庫鏡像牽涉到五個步驟。 下一節會詳細說明每個步驟。

  1. 設定發行者。

  2. 設定資料庫鏡像。

  3. 配置鏡像以使用與主伺服器相同的發行者。

  4. 設定故障轉移的復寫代理程式。

  5. 將主體和鏡像新增至復寫監視器。

步驟 1 和 2 也可以以相反的順序執行。

設定發行集資料庫的資料庫鏡像

  1. 設定發行者:

    1. 我們建議使用遠端分銷商。 如需設定散發的詳細資訊,請參閱 設定散發

    2. 您可以啟用用於快照式發行集、交易式發行集或合併式發行集的資料庫。 對於將包含多種類型發行集的鏡像資料庫,您必須在相同節點使用 sp_replicationdboption 啟用這兩種類型的資料庫。 例如,您可以在主體上執行下列預存程式呼叫:

      exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='publish', @value=true;  
      exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='mergepublish', @value=true;  
      

      如需建立發行集的詳細資訊,請參閱 發行數據和資料庫物件

  2. 設定資料庫鏡像。 如需詳細資訊,請參閱 使用 Windows 驗證建立資料庫鏡像工作階段 (SQL Server Management Studio)設定資料庫鏡像 (SQL Server)

  3. 設定鏡像的散發。 將鏡像名稱指定為發行者,並指定與主要伺服器使用相同的發佈者和快照資料夾。 例如,如果您要使用預存程式設定複寫,請在散發者端執行 sp_adddistpublisher ;然後在鏡像上執行 sp_adddistributor 。 針對 sp_adddistpublisher

    • @publisher 參數的值設定為鏡像的網路名稱。

    • @working_directory 參數的值設定為主體所使用的快照集資料夾。

  4. 指定 -PublisherFailoverPartner 代理程序參數的鏡像名稱。 代理程式 故障轉移之後,下列代理程序必須有此參數,才能識別鏡像:

    • 快照代理程式(適用於所有發行集)

    • 日誌讀取代理程式(適用於所有交易性出版物)

    • 佇列讀取器代理程式(適用於支援佇列更新訂閱的交易式發行集)

    • 合併代理程式(適用於合併式訂閱)

    • SQL Server 複寫接聽程式(replisapi.dll:針對使用 Web 同步進行同步化的合併訂閱)

    • SQL Merge ActiveX 控制項(適用於與此控制項同步的合併訂閱)

    散發代理程式和散發 ActiveX 控制件沒有此參數,因為它們不會連線到發行者。

    代理程序參數變更會在下次啟動代理程式時生效。 如果代理程序持續執行,您必須停止並重新啟動代理程式。 您可以在代理程式設定檔和命令提示字元中指定參數。 如需詳細資訊,請參閱:

    我們建議將 -PublisherFailoverPartner 新增至代理程式配置檔,然後在配置檔中指定鏡像名稱。 例如,如果您要使用預存程式設定複寫:

    -- Execute sp_help_agent_profile in the context of the distribution database to get the list of profiles.  
    -- Select the profile id of the profile that needs to be updated from the result set.  
    -- In the agent_type column returned by sp_help_agent_profile:   
    -- 1 = Snapshot Agent; 2 = Log Reader Agent; 3 = Distribution Agent; 4 = Merge Agent; 9 = Queue Reader Agent.  
    
    exec sp_help_agent_profile;  
    
    -- Setting the -PublisherFailoverPartner parameter in the default Snapshot Agent profile (profile 1).  
    -- Execute sp_add_agent_parameter in the context of the distribution database.  
    exec sp_add_agent_parameter @profile_id = 1, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'<Failover Partner Name>';  
    
    -- Setting the -PublisherFailoverPartner parameter in the default Merge Agent profile (profile 6).  
    -- Execute sp_add_agent_parameter in the context of the distribution database.  
    exec sp_add_agent_parameter @profile_id = 6, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'<Failover Partner Name>';  
    
  5. 將主伺服器和鏡像伺服器新增至複寫監視器。 如需詳細資訊,請參閱 從複寫監視器加入及移除發行者

維護鏡像出版物資料庫

維護鏡像的出版資料庫基本上與維護非鏡像的資料庫相同,但需注意以下幾點:

  • 管理與監視必須發生在使用中的伺服器。 在 SQL Server Management Studio 中,發行集只會出現在使用中伺服器的 [ 本機發行集 ] 資料夾底下。 例如,如果您故障轉移至鏡像伺服器,發行集會顯示在鏡像伺服器上,而且不再顯示在主伺服器上。 如果資料庫切換至鏡像伺服器,您可能需要手動重新整理 Management Studio 和 Replication Monitor,以便反映變更。

  • 復寫監視器會在主體和鏡像的物件樹狀結構中顯示發行者節點。 如果主伺服器是主要使用中的伺服器,則發佈資訊只會顯示在複寫監視器的主伺服器節點下。

    如果鏡像伺服器是主動伺服器:

    • 如果代理程式發生錯誤,則錯誤只會在主體節點上指出,而不是在鏡像節點上。

    • 如果主節點無法取得,則主節點和鏡像節點會顯示相同的出版物清單。 應該監控鏡像節點下的出版物。

  • 使用預存程式或復寫管理物件 (RMO) 在鏡像上管理複寫時,針對您指定發行者名稱的情況,您必須指定資料庫啟用複寫的實例名稱。 若要判斷適當的名稱,請使用 函式 publishingservername

    當發行集資料庫被鏡像時,儲存在鏡像資料庫中的複製元數據與儲存在主資料庫中的元數據相同。 因此,針對在主體上啟用複寫功能的發行資料庫,儲存在鏡像之系統資料表中的發行者實例名稱是主體的名稱,而不是鏡像。 如果發行資料庫故障轉移至鏡像,這會對複寫的配置和維護造成影響。 例如,如果您在故障轉移後使用鏡像上的預存程序設定複寫,並且希望將提取訂閱新增至在主體上啟用的發行資料庫,您必須指定主體名稱,而非@publisher參數中的鏡像名稱,無論是sp_addpullsubscriptionsp_addmergepullsubscription

    如果您在故障轉移至鏡像之後在鏡像上啟用發行集資料庫,則儲存在系統數據表中的發行者實例名稱是鏡像的名稱;在此情況下,您會針對 @publisher 參數使用鏡像的名稱。

    備註

    在某些情況下,例如 sp_addpublication,只有非 SQL Server 發行者才支援 @publisher 參數;在這些情況下,它與 SQL Server 資料庫鏡像無關。

  • 若要在故障轉移之後同步處理Management Studio中的訂閱:同步處理訂閱者中的提取訂閱;並從使用中發行者同步處理發送訂閱。

如果鏡像被移除,則複製行為

如果從已發佈的資料庫中移除資料庫鏡像,請記住下列問題:

  • 如果主要資料庫上的出版資料庫不再被鏡像,複寫仍會繼續不變地針對原始主要資料庫運作。

  • 如果發行資料庫在故障切換時從主資料庫切換到鏡像,且隨後鏡像關係被停用或移除,則複製代理程式將無法對鏡像進行運作。 如果主體永久遺失,請停用,然後使用指定為發行者的鏡像重新設定複寫。

  • 如果完全移除資料庫鏡像,鏡像資料庫會處於復原狀態,而且必須還原才能運作。 與複寫相關的復原資料庫行為取決於是否已指定KEEP_REPLICATION選項。 此選項會強制還原作業,在將已發佈的資料庫還原至建立備份之伺服器以外的伺服器時,保留複寫設定。 只有當其他發行集資料庫無法使用時,才使用 KEEP_REPLICATION 選項。 如果另一個發行資料庫仍然保持完整且正在進行複寫,則不支援此選項。 如需KEEP_REPLICATION的詳細資訊,請參閱 RESTORE (Transact-SQL)

日誌讀取代理程式行為

下表說明資料庫鏡像的各種作業模式的記錄讀取器代理程序行為。

作業模式 如果鏡像無法使用,則記錄讀取器代理程序行為
具有自動故障轉移的高安全性模式 如果鏡像伺服器無法使用,記錄讀取器代理程式會將命令傳播至發佈資料庫。 在備援伺服器重新上線並獲得所有來自主伺服器的交易之前,主伺服器無法故障轉移至備援伺服器。
高效能模式 如果鏡像無法使用,主體資料庫就會暴露在外(也就是未鏡像)。 不過,記錄讀取代理程式只會複製鏡像上已確認的交易。 如果服務被強制執行,而鏡像伺服器擔任主伺服器的角色,記錄讀取器代理程式將基於鏡像運行,並開始擷取新的交易記錄。

請注意,如果鏡像落後於主體,復寫延遲將會增加。
不具有自動容錯移轉的高安全性模式 所有認可的交易都保證會寫入至鏡像磁碟。 記錄讀取器代理程式只會複製在鏡像上已寫入的交易。 如果資料庫鏡像無法使用,主要伺服器不允許資料庫中的進一步活動,因此,日誌讀取器代理程序沒有要復寫的交易。

另請參閱

SQL Server 複寫
記錄傳送和複寫 (SQL Server)