レプリケートされたデータベースのアップグレードまたは修正プログラム

適用対象:SQL Server - Windows のみ

SQL Server では、レプリケートされたデータベースを以前のバージョンの SQL Serverからアップグレードすることができます。ノードのアップグレード中は、その他のノードでの操作を停止する必要はありません。 トポロジでサポートされるバージョンに関して、以下の規則が守られていることを確認してください。

  • ディストリビューターは、パブリッシャーのバージョン以上であればどのバージョンでも使用できます (多くの場合、ディストリビューターはパブリッシャーと同じインスタンスです)。
  • パブリッシャーは、ディストリビューターのバージョン以下であればどのバージョンでも使用できます。
  • サブスクライバーのバージョンは、次のように、パブリケーションの種類によって異なります。
    • トランザクション パブリケーションのサブスクライバーは、2 つのパブリッシャー バージョンのうちどちらでも使用できます。 例: 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 では、2 つの一般的なアップグレード パスが提供されています。

  • サイド バイ サイド: 並列環境を配置し、ログインやジョブなどの関連付けられたインスタンス レベル オブジェクトと共に、データベースを新しい環境に移動します。
  • インプレース アップグレード: SQL Server のインストール メディアを使用して、SQL Server のビットを置き換え、データベース オブジェクトをアップグレードすることにより、既存の SQL Server のインストールをアップグレードできます。 Always On 可用性グループまたはフェールオーバー クラスター インスタンスを実行している環境の場合、インプレース アップグレードとローリング アップグレードを組み合わせると、ダウンタイムが最小限になります。

レプリケーション トポロジのサイド バイ サイド アップグレードに対して採用されてきた一般的なアプローチは、トポロジ全体を移動するのではなく、パブリッシャーとサブスクライバーのペアを個別に新しいサイド バイ サイド環境に移動するというものです。 この段階的アプローチは、ダウンタイムを管理し、レプリケーションに依存するビジネスの特定の範囲に影響を最小限に抑えるのに役立ちます。

この記事の多くは、SQL Server のバージョンのアップグレードを対象としています。 ただし、Service Pack または累積更新プログラムで SQL Server を修正するときには、インプレース アップグレード プロセスも同様に使用する必要があります。

警告

レプリケーション トポロジのアップグレードは、複数のステップから成るプロセスです。 テスト環境でレプリケーション トポロジのレプリカをアップグレードしてみてから、実際の運用環境でアップグレードを実行することをお勧めします。 これは、実際のアップグレード プロセス中に高価で長いダウンタイムを発生させずに、アップグレードを円滑に処理するために必要な運用ドキュメントの問題を解決するのに役立ちます。 レプリケーション トポロジをアップグレードするときに、運用環境で Always On 可用性グループや SQL Server フェールオーバー クラスター インスタンスを使用することで、ダウンタイムが大幅に減った事例があります。 また、アップグレードを試みる前に、MSDB、マスター、ディストリビューション データベースと、レプリケーションに参加しているユーザー データベースを含む、すべてのデータベースのバックアップを行うことをお勧めします。

フェールオーバー クラスター インスタンスにディストリビューション データベースがある場合は、参加しているすべてのノードが同じビルドを使用するようにしてください。 あるノードが SQL Server 2016 SP2-CU3 または SQL Server 2017 CU6 より前の SQL Server バージョンで、もう一方のノードが SQL Server 2016 SP2-CU3 または SQL Server 2017 CU6 より後の SQL Server バージョンであるような設定はお勧めしません。 SQL Server 2016 SP2-CU3 および SQL Server 2017 CU6 から、Always On 可用性グループ内のディストリビューション データベースの使用と、ディストリビューション データベースの新しいオブジェクト (テーブル、ストアド プロシージャ) のサポートが追加されました。 ディストリビューション データベースがフェールオーバー クラスター インスタンス内にあり、段階的な移行を行っている (そして、すべてのノードを同じバージョンの SQL Server にアップグレードできない) 場合に、移行期間を短くするには、新しいサブスクライバー、サブスクリプション、パブリッシャー、またはパブリケーションを、新しいバージョンの SQL Server を持つノードに追加するなどのアカウント タスクを実行することをお勧めします。

レプリケーションのマトリックス

トランザクションおよびスナップショット レプリケーションの互換性マトリックス

発行元 ディストリビューター サブスクライバー
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 2019 (15.x) SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
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)
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)

マージ レプリケーションの互換性マトリックス

発行元 ディストリビューター サブスクライバー
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 をアップグレードする前に、パブリッシュされたテーブルからコミットされたすべてのトランザクションが、ログ リーダー エージェントによって処理されているかどうかを確認する必要があります。 すべてのトランザクションが処理されたことを確認するには、トランザクション パブリケーションを含んだ各データベースに対して次の手順を実行します。

  1. データベースのログ リーダー エージェントが実行されていることを確認します。 既定では、エージェントは継続的に実行されています。
  2. パブリッシュされたテーブル上のユーザー アクティビティを停止します。
  3. トランザクションをディストリビューション データベースにコピーする時間をログ リーダー エージェントに与えてから、エージェントを停止します。
  4. sp_replcmds を実行し、すべてのトランザクションが処理されたことを確認します。 この手順の結果セットを空にする必要があります。
  5. sp_replflush を実行し、sp_replcmds から接続を閉じます。
  6. 最新バージョンの SQL Server へのサーバー アップグレードを実行します。
  7. SQL Server エージェントとログ リーダー エージェントがアップグレードの後に自動的に起動しない場合は、これらを再起動します。

アップグレード後のマージ レプリケーション用エージェントの実行

アップグレード後は、マージ パブリケーションごとにスナップショット エージェントを実行し、サブスクリプションごとにマージ エージェントを実行して、レプリケーション メタデータを更新します。 サブスクリプションを再初期化する必要がないので、新しいスナップショットを適用する必要はありません。 サブスクリプション メタデータは、アップグレード後に最初にマージ エージェントを実行したときに更新されます。 そのため、サブスクリプション データベースは、パブリッシャーのアップグレード中にオンライン状態でアクティブなままにすることができます。

マージ レプリケーションでは、パブリケーション データベースおよびサブスクリプション データベース内の多数のシステム テーブルに、パブリケーション メタデータおよびサブスクリプション メタデータが格納されます。 スナップショット エージェントを実行すると、パブリケーション メタデータが更新され、マージ エージェントを実行すると、サブスクリプション メタデータが更新されます。 生成が必要なのはパブリケーション スナップショットのみです。 パラメーター化されたフィルターがマージ パブリケーションで使用される場合は、各パーティションにもスナップショットが必要です。 これらのパーティション スナップショットを更新する必要はありません

SQL Server Management Studio、レプリケーション モニター、またはコマンド ラインで各エージェントを実行します。 スナップショット エージェントの実行について詳しくは、次の記事をご覧ください。

マージ エージェントの実行について詳しくは、次の記事をご覧ください。

マージ レプリケーションを使用するトポロジで SQL Server をアップグレードした後に、新しい機能を使用する場合は、すべてのパブリケーションのパブリケーション互換性レベルを変更します。

Standard Edition、Workgroup Edition、または Express Edition へのアップグレード

SQL Server のいずれかのエディションから別のエディションへアップグレードする前に、現在使用している機能がアップグレード先のエディションでサポートされているかどうかを確認します。 詳細情報については、SQL Server 2022 の各エディションとサポートされる機能に関するページのレプリケーションのセクションをご覧ください。

レプリケーション トポロジをアップグレードする手順

以下の手順では、レプリケーション トポロジ内のサーバーをアップグレードする順序の概要を示します。 トランザクション レプリケーションまたはマージ レプリケーションのどちらを実行している場合でも、同じ手順が適用されます。 ただし、以下の手順は、ピア ツー ピア レプリケーション、キュー更新サブスクリプション、または即時更新サブスクリプションには適用されません。

一括アップグレード

  1. ディストリビューターを更新します。
  2. パブリッシャーとサブスクライバーを更新します。 これらは、任意の順序でアップグレードできます。

Note

SQL 2008 および 2008 R2 では、レプリケーション トポロジのマトリックスと一致するように、パブリッシャーとサブスクライバーのアップグレードを同時に行う必要があります。 SQL 2008 または 2008 R2 のパブリッシャーまたはサブスクライバーでは、SQL 2016 (またはそれ以降) のパブリッシャーまたはサブスクライバーを使用できません。 同時にアップグレードできない場合は、中間アップグレードを使用して SQL インスタンスを SQL 2014 にアップグレードした後、再度 SQL 2016 (またはそれ以降) にアップグレードします。

サイド バイ サイド アップグレード

  1. ディストリビューターを更新します。
  2. 新しい SQL Server インスタンスでディストリビューションを再構成します。
  3. パブリッシャーをアップグレードします。
  4. サブスクライバーをアップグレードします。
  5. サブスクライバーの再初期化を含めて、すべてのパブリッシャーとサブスクライバーのペアを再構成します。

Windows Server 2012 R2 へのディストリビューターのサイド バイ サイド移行の手順

SQL Server インスタンスを SQL Server 2016 (またはそれ以降) にアップグレードしようとしていて、現在の OS が Windows 2008 (または 2008 R2) である場合は、Windows Server R2 以降への OS のサイド バイ サイド アップグレードを実行する必要があります。 この中間 OS アップグレードの理由は、SQL Server 2016 は Windows Server 2008/2008 R2 にインストールできず、Windows Server 2008/20008 R2 では Windows Server 2016 に直接インプレース アップグレードできないためです。 Windows Server 2008/2008 R2 から Windows server 2012 へのインプレース アップグレードを実行してから、Windows Server 2016 にアップグレードすることは可能ですが、ダウンタイムが発生し、複雑さが増してロールバック パスが容易にならないため、通常は推奨されません。 フェールオーバー クラスターに参加している SQL Server インスタンスで使用できるアップグレード パスは、サイド バイ サイド アップグレードだけです。 以下の手順は、スタンドアロン SQL Server インスタンス上、または Always On フェールオーバー クラスター インスタンス (FCI) 内のいずれかで実行できます。

  1. Windows Server 2012 R2/2016 上のディストリビューターとして、新しい SQL Server インスタンス (スタンドアロンまたは Always On フェールオーバー クラスター)、エディション、およびバージョンを、異なる Windows クラスターと SQL Server FCI 名またはスタンドアロン ホスト名で設定します。 レプリケーション エージェントの実行可能ファイル、レプリケーション フォルダー、およびデータベース ファイルのパスが、新しい環境でも同じパスで見つかるように、ディレクトリ構造を古いディストリビューターと同じにする必要があります。 これにより、移行/アップグレード後に必要な手順が減ります。
  2. レプリケーションが同期されていることを確認した後、すべてのレプリケーション エージェントをシャットダウンします。
  3. 現在の SQL Server ディストリビューター インスタンスをシャットダウンします。 スタンドアロン インスタンスの場合は、サーバーをシャットダウンします。 SQL FCI の場合は、ネットワーク名を含む SQL Server ロール全体を、クラスター マネージャーでオフラインにします。
  4. 古い (現在のディストリビューター インスタンス) 環境用の DNS および AD コンピューター オブジェクトのエントリを削除します。
  5. 古いサーバーと一致するように、新しいサーバーのホスト名を変更します。
    1. SQL FCI の場合は、新しい SQL FCI の名前を古いインスタンスと同じ仮想サーバー名に変更します。
  6. SAN リダイレクト、ストレージ コピー、またはファイル コピーを使用して、以前のインスタンスからデータベース ファイルをコピーします。
  7. 新しい SQL Server インスタンスをオンラインにします。
  8. すべてのレプリケーション エージェントを再起動し、エージェントが正常に動作していることを確認します。
  9. アプリケーションが予期したとおりに動作していることを確認します。
  10. SQL Server のセットアップ メディアを使用して、SQL Server の新しいバージョンへの SQL Server インスタンスのインプレース アップグレードを実行します。

注意

ダウンタイムを減らすため、ディストリビューターの "サイド バイ サイド移行" と、"SQL Server 2016 へのインプレース アップグレード" を、別のアクティビティとして実行することをお勧めします。 これにより、段階的なアプローチを採用して、リスクを軽減し、ダウンタイムを最小限に抑えることができます。

マージ レプリケーションの Web 同期

マージ レプリケーションの Web 同期オプションでは、 SQL Server レプリケーション リスナー (replisapi.dll) を、同期に使用するインターネット インフォメーション サービス (IIS) サーバーの仮想ディレクトリにコピーする必要があります。 Web 同期を構成すると、Web 同期の構成ウィザードにより、ファイルが仮想ディレクトリにコピーされます。 IIS サーバーにインストールされた SQL Server コンポーネントをアップグレードする場合、replisapi.dll を COM ディレクトリから IIS サーバーの仮想ディレクトリへ手動でコピーする必要があります。 Web 同期の構成の詳細については、「 Web 同期の構成」を参照してください。

以前のバージョンからレプリケートされたデータベースの復元

以前のバージョンからレプリケートされたデータベースのバックアップを復元するときにレプリケーション設定が保持されるようにするには、バックアップが作成されたサーバーおよびデータベースと同じ名前のサーバーおよびデータベースに復元します。

参照

SQL Server レプリケーション
レプリケーション管理に関する FAQ
レプリケーションの旧バージョンとの互換性
サポートされているバージョンとエディションのアップグレード
SQL Server のアップグレード
SQL Server 2016 へのレプリケーション トポロジのアップグレード