升級或修補複寫的資料庫
適用於:SQL Server - 僅限 Windows
SQL Server 支援從舊版 SQL Server 升級複寫的資料庫;升級節點時,不需要停止其他節點的活動。
先決條件
請確定您遵守有關拓撲中支援之版本的規則:
只要分發者版本大於或等於發行者版本,分發者可以是任何版本(在許多情況下,分發者與發行者是同一個實例)。
發行者可以是任何版本,只要它小於或等於散發者版本即可。
發行者和散發者必須是相同的產品。 兩者都是 SQL Server,或兩者都是 Azure SQL 受控實例。
訂閱者版本取決於發行集的類型:
交易式發行集的訂閱者可以是兩個發行者版本內的任何版本。 例如:SQL Server 2012 (11.x) 發行者可以有 SQL Server 2014 (12.x) 和 SQL Server 2016 (13.x) 訂閱者,而 SQL Server 2016 (13.x) 發行者可以有 SQL Server 2014 (12.x) 和 SQL Server 2012 (11.x) 訂閱者。
訂閱合併發行的使用者所使用的版本可以是等於或低於發行者版本的任何版本,只要該版本在版本生命週期支援週期內被支援即可。
升級路徑
SQL Server 的升級路徑視部署模式而有所不同。 SQL Server 在一般情況下會提供兩種升級路徑:
並存:部署平行環境,並將資料庫及相關聯的執行個體層級物件 (例如登入、作業等) 移到新環境。
就地升級:允許 SQL Server 安裝媒體透過取代 SQL Server 位元並升級資料庫物件,將現有的 SQL Server 安裝升級。 針對執行可用性群組 (AG) 或故障轉移叢集實例 (FCI) 的環境,就地升級會與 滾動升級結合,以將停機時間降到最低。
在進行複寫拓撲的並行升級時,一種常見的方法是將部分發行者與訂閱者配對遷移至新的並行環境,而非移動整個拓撲。 這個階段式方法可協助控制停機時間,並將對相依於複寫的企業影響降到最低。
本文大部分的範圍是升級 SQL Server 版本。 不過,使用 Service Pack 或累積更新修補 SQL Server 時,應該也會使用就地升級程序。
備註
升級複寫拓樸是多步驟程序。 建議您先在測試環境中嘗試升級複寫拓撲的複本,再於實際生產環境上執行升級。 這有助於理清處理升級所需的任何操作文件,確保在實際升級過程中不會造成昂貴且長時間的停機。 在升級他們的複寫拓撲時,您可以在其生產環境中使用 AG 和/或 FCI 來大幅減少停機時間。 此外,建議您先備份所有資料庫,包括 msdb
、master
、散發資料庫,以及參與複寫的用戶資料庫,再嘗試升級。
當在容錯移轉叢集實例中使用發佈資料庫時,請確保所有參與節點使用相同的版本。 不建議安裝其中一個節點是 SQL Server 2016 (13.x) SP2-CU3 或 SQL Server 2017 (14.x) CU6 之前的 SQL Server 版本,另一個節點是比 SQL Server 2016 (13.x) SP2-CU3 或 SQL Server 2017 (14.x) CU6 更新的 SQL Server 版本。 從 SQL Server 2016 (13.x) SP2-CU3 和 SQL Server 2017 (14.x) CU6 開始,支援在可用性群組 (AG) 中使用分佈式資料庫,以及用於分佈式資料庫中的新物件(資料表、預存程式)。 如果您的散發資料庫位於容錯移轉叢集的執行個體中,而且您正在進行階段式移轉 (且無法將所有節點升級至相同版本的 SQL Server),在移轉時間有限的情況下,我們建議您在較新版本的 SQL Server 節點上執行帳戶相關工作,例如新增訂閱者、訂閱、發行者或發行集。
複寫矩陣
事務性及快照式複寫相容性矩陣
發行者 | 經銷商 | 訂用帳戶 |
---|---|---|
Azure SQL 受控實例AUTD | Azure SQL 受控實例AUTD | Azure SQL Database Azure SQL 受控實例AUTD Azure SQL 受控實例2022 SQL Server 2022 (16.x) SQL Server 2019 (15.x) |
Azure SQL 受控實例2022 | Azure SQL 受控實例AUTD Azure SQL 受控實例2022 |
Azure SQL Database Azure SQL 受控實例AUTD Azure SQL 受控實例2022 SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) |
SQL Server 2022 (16.x) | SQL Server 2022 (16.x) | Azure SQL Database Azure SQL 受控實例AUTD Azure SQL 受控實例2022 SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) |
SQL Server 2019 (15.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) |
Azure SQL Database Azure SQL 受控實例AUTD Azure SQL 受控實例2022 SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) |
SQL Server 2017 (14.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) |
Azure SQL 受控實例2022 SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) |
SQL Server 2016 (13.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) |
SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) |
SQL Server 2014 (12.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) |
SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2012 (11.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) |
SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
2022 適用於使用 SQL Server 2022 更新原則設定的 Azure SQL 受控實例。
AUTD 適用於使用 Always-up-to-date 更新原則設定的 Azure SQL 受控實例。
合併複寫相容性矩陣
發行者 | 經銷商 | 訂用帳戶 |
---|---|---|
SQL Server 2022 (16.x) | SQL Server 2022 (16.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2019 (15.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) |
SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2017 (14.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) |
SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2016 (13.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) |
SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2014 (12.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) |
SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2012 (11.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) |
SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
升級時的考量
在升級之前,執行交易式複寫的記錄閱讀器代理程式
升級 SQL Server 之前,您必須確定已發行數據表中的所有認可交易都由記錄讀取器代理程序處理。 若要確定已處理所有交易,請針對包含交易式發行集的每個資料庫執行下列步驟:
請確保記錄讀取器代理程式正在為資料庫運行。 依預設,代理程式會持續執行。
停止在已發行資料表上的使用者活動。
提供時間讓記錄讀取器代理程式將交易複製到散發資料庫,然後再停止代理程式。
執行 sp_replcmds 以確認已處理所有交易。 這個程序中所產生的結果集應該是空的。
執行 sp_replflush 以關閉
sp_replcmds
的連線將伺服器升級至最新版本的 SQL Server。
如果 SQL Server Agent 和記錄讀取器代理程式在升級之後未自動啟動,請重新啟動它們。
升級後執行合併複寫代理程式
升級之後,請為每一個合併發行執行快照代理程式,並為每一個訂閱執行合併代理程式以更新複寫中繼資料。 您不需要套用新的快照,因為不需要重新初始化訂閱。 升級之後,第一次執行合併代理程式時會更新訂閱中繼資料。 這表示在發行者升級時,訂閱資料庫可以持續在線上運作並保持使用中狀態。
合併式複寫會將發行集和訂閱元數據儲存在發行集和訂閱資料庫的數個系統數據表中。 執行快照集代理程式會更新發行集中繼資料,而執行合併代理程式會更新訂閱中繼資料。 只需產生出版物快照。 如果合併發行使用參數化篩選,則每個資料分割也有快照。 不需要更新這些分割的快照集。
您可以從 SQL Server Management Studio、複寫監視器或命令列執行代理程式。 如需如何執行快照集代理程式的詳細資訊,請參閱下列文章:
如需如何執行合併代理程式的詳細資訊,請參閱下列文章:
在使用合併式複寫的拓撲中升級 SQL Server 後,如果您想要使用新功能,請變更任何發行集的發行集相容性層級。
升級至 Standard、Workgroup 或 Express 版本
從一個 SQL Server 版本升級至另一個版本之前,請確認您要升級的版本支援您目前使用的功能。 如需詳細資訊,請參閱 SQL Server 2022 版本和支援的功能中的<複寫>一節。
升級複寫拓撲的步驟
這些步驟概述升級複寫拓撲中伺服器時應該採用的順序。 無論您執行的是交易式或合併式複寫,都適用相同的步驟。 不過,這些步驟不會涵蓋點對點複寫、佇列更新訂閱,或立即更新訂閱。
就地升級
- 升級分銷商。
- 升級發行者和訂閱者。 可以以任意順序進行升級。
注意
針對 SQL Server 2008 (10.0.x) 和 SQL Server 2008 R2 (10.50.x),發行者和訂閱者的升級必須同時完成,才能與複製拓撲矩陣一致。 SQL Server 2008 (10.0.x) 和 SQL Server 2008 R2 (10.50.x) 發行者或訂閱者不能有 SQL Server 2016 (13.x) (或更新版本) 發行者或訂閱者。 如果無法同時升級,請使用中繼升級將 SQL Server 實例升級至 SQL Server 2014 (12.x),然後再次升級至 SQL Server 2016 (13.x) (或更新版本)。
並行升級
將資料分發者的並行遷移至 Windows Server 的步驟
在參與故障移轉叢集的 SQL Server 實例中,併排升級是唯一可用的升級路徑。 下列步驟可以在獨立 SQL Server 實例或故障轉移叢集實例 (FCI) 內執行。
在 Windows Server 上建立新的 SQL Server 實例(可以是獨立或 FCI),並設定版本和版次,作為您的散發者。確保其位於不同的 Windows 叢集,並使用不同的 SQL Server FCI 名稱或獨立主機名。 您需要維持目錄結構與舊分發者相同,以便在新環境中,複寫代理的執行檔、複寫資料夾和資料庫檔案路徑能夠在相同路徑中找到。 這樣可減少任何所需的移轉/升級後步驟。
請確定您的複寫已同步,然後關閉所有的複寫代理程式。
關閉目前的 SQL Server 發行者執行個體。 如果這是獨立執行個體,請關閉伺服器。 如果這是 SQL Server FCI,請在叢集管理員中讓整個 SQL Server 角色離線,包括網路名稱。
移除舊環境(即目前的分發者實例)的 DNS 和 Active Directory 電腦物件條目。
變更新伺服器的主機名稱,以符合舊伺服器的主機名稱。
- 如果這是 SQL Server FCI,請使用與舊實例相同的虛擬伺服器名稱重新命名新的 SQL Server FCI。
使用 SAN 重新導向、儲存體複製或檔案複製,從前一個執行個體中複製資料庫檔案。
將新的 SQL Server 執行個體上線。
重新啟動所有的複寫代理程式,並確認代理程式都成功執行。
驗證複製是否如預期運作。
使用 SQL Server 安裝媒體,將您的 SQL Server 執行個體就地升級至新版 SQL Server。
注意
若要減少停機時間,建議您將發行者的 並存移轉的方式 當做一個活動執行,並將 就地升級至 SQL Server 做為另一個活動。 這可讓您採取階段式方法、降低風險,並將停機時間降到最低。
合併式複寫的 Web 同步處理
合併式複寫的 Web 同步處理選項需要您將 SQL Server 複寫接聽程式 (replisapi.dll
) 複製到用於同步處理的 Internet Information Services (IIS) 伺服器上的虛擬目錄。 當您設定 Web 同步處理時,[設定 Web 同步處理精靈] 會將檔案複製到虛擬目錄。 如果您升級安裝在 IIS 伺服器上的 SQL Server 元件,就必須將 replisapi.dll 從 COM 目錄手動複製到 IIS 伺服器上的虛擬目錄。 如需設定 Web 同步處理的詳細資訊,請參閱 設定 Web 同步處理。
從較早版本恢復複製的資料庫
若要確保還原來自舊版的複寫資料庫備份時能保留複寫設定,請將備份還原到名稱與原伺服器和資料庫相同的伺服器和資料庫。
相關內容
- SQL Server 複寫
- 複寫管理常見問題集
- 復寫向下相容性
- 支援的版本和版本類型升級(SQL Server 2022)
- 升級 SQL Server
- Upgrading a Replication Topology to SQL Server 2016 (將複寫拓撲升級至 SQL Server 2016)