共用方式為


維護 AlwaysOn 發行資料庫(SQL Server)

本主題討論在使用 AlwaysOn 可用性群組時維護發行集資料庫的特殊考慮。

維護可用性群組中的已發佈資料庫

維護 AlwaysOn 發行集資料庫基本上與維護標準發行集資料庫相同,但有下列考慮:

  • 系統管理必須發生在主要複本主機上。 在 SQL Server Management Studio 中,發行集會出現在主複本主機的 本機發行集 資料夾下,也會出現在可讀取的次要複本下。 故障轉移之後,您可能需要手動重新整理 Management Studio,才能反映升級至主要複本的次要複本無法讀取的變更。

  • 復寫監視器會持續顯示原始發行者下的出版資訊。 不過,您可以從任何復本的複寫監視器中檢視這項資訊,方法是將原始發行者新增為伺服器。

  • 使用預存程序或復寫管理物件(RMO)管理當前主屬伺服器的復寫時,若需要指定發行者名稱,必須指出資料庫已啟用複寫的實例名稱(即原始發行者)。 若要判斷適當的名稱,請使用 函式 PUBLISHINGSERVERNAME 。 當發行資料庫聯結可用性群組時,儲存在輔助資料庫複本中的復寫元數據與主要複本上的元數據相同。 因此,對於已啟用復寫的發行資料庫,儲存在次要系統資料表中的發行實例名稱是主要資料庫的名稱,而不是次要資料庫。 如果發行資料庫故障轉移至輔助資料庫,這會影響複寫配置和維護。 例如,如果您要在故障轉移之後,在次要副本中使用預存程序設定複寫,而且您希望對在其他副本上啟用的發行集資料庫建立提取訂閱,您必須指定原始發行者的名稱,而不是目前發行者的名稱作為@publisher參數的sp_addpullsubscriptionsp_addmergepulllsubscription。 不過,如果您在故障轉移後啟用發行資料庫,則儲存在系統數據表中的發行實例名稱是當前主機的名稱。 在此情況下,您會針對 @publisher 參數使用目前主要複本的主機名。

    備註

    對於某些程式,例如 sp_addpublication,只有不是 SQL Server 實例的發行者才支援 @publisher 參數;在這些情況下,它與 SQL Server AlwaysOn 無關。

  • 若要在故障轉移後於 Management Studio 中同步訂閱,請從訂閱者同步拉取訂閱,並從作用中發行者同步推送訂閱。

從可用性群組移除已發佈的資料庫

如果已發行的資料庫已從可用性群組中移除,或卸載具有已發行成員資料庫的可用性群組,請考慮下列問題。

  • 如果原出版者的出版資料庫已從可用性群組主要副本中移除,您必須執行 sp_redirect_publisher 而不指定 @redirected_publisher 參數的值,才能移除出版者與資料庫配對的重新導向。

    EXEC sys.sp_redirect_publisher   
        @original_publisher = 'MyPublisher',  
        @published_database = 'MyPublishedDB';  
    

    資料庫將保持在主伺服器的復原狀態,並且必須進行還原。 執行此動作之後,複製應該能夠正常運作且不變,並適用於原始發行者。

  • 如果發行集資料庫從原始發行者故障轉移至一個複本,並且資料庫已從可用性群組的主要複本中移除,請使用預存程序 sp_redirect_publisher 明確地將原始發行者重新導向至新的發行者。 資料庫將被留在復原狀態,並且必須復原。 一旦您這樣做,複製應該會像在可用性群組中的情況下一樣繼續運作。

    EXEC sys.sp_redirect_publisher   
        @original_publisher = 'MyPublisher',  
        @published_database = 'MyPublishedDB',  
        @redirected_publisher = 'MyNewPublisher';  
    

    請勿從散發者中移除原始發行者的遠端伺服器,即使無法再存取伺服器也一樣。 散發者需要原始出版者的伺服器元資料,以便滿足出版元資料查詢。

  • 如果移除完整的可用性群組,則與從可用性群組移除已發佈資料庫時,與成員復寫資料庫相關的行為相同。 一旦資料庫已還原且重新導向已被修改,複製即可從最後一個主伺服器繼續進行。 如果資料庫在原始發行者端還原,則應該移除重新導向。 如果資料庫還原在不同的主機上,應該清楚地將重新導向至新的主機。

    備註

    移除已發行成員資料庫的可用性群組,或從可用性群組中移除已發行的資料庫時,所有已發行資料庫複本都會處於復原狀態。 如果還原,每個都會顯示為已發佈的資料庫。 應保留的只有一個與出版中繼資料相關的複本。 若要停用發佈的資料庫副本的複寫,請先從資料庫刪除所有訂閱和發行集。

    執行 sp_dropsubscription 以移除發行集訂閱。 請務必將參數 @ignore_distributributor 設為 1,以保留在發行者端活躍發行資料庫的元數據。

    USE MyDBName;  
    GO  
    
    EXEC sys.sp_dropsubscription   
        @subscriber = 'MySubscriber',  
        @publication = 'MyPublication',  
        @article = 'all',  
        @ignore_distributor = 1;  
    

    執行 sp_droppublication 以移除所有出版物。 再次將參數 @ignore_distributor 設為1,以在發行者那端保留作用中發行資料庫的元數據。

    EXEC sys.sp_droppublication   
        @publication = 'MyPublication',  
        @ignore_distributor = 1;  
    

    執行 sp_replicationdboption 以停用資料庫的複寫。

    EXEC sys.sp_replicationdboption  
        @dbname = 'MyDBName',  
        @optname = 'publish',  
        @value = 'false';  
    

    此時,可以保留或卸除已發佈資料庫的複本。

相關工作

另請參閱

AlwaysOn 可用性群組的必要條件、限制和建議 (SQL Server)
AlwaysOn 可用性群組概觀 (SQL Server)
AlwaysOn 可用性群組:互作性 (SQL Server)
SQL Server 複寫