ピアツーピア トポロジの管理 (レプリケーション Transact-SQL プログラミング)

適用対象: SQL Server

ピア ツー ピア トポロジの管理は通常のトランザクション レプリケーション トポロジの管理と似ていますが、特別な考慮が必要な部分が数多くあります。 ピア ツー ピア トポロジの管理が通常のトポロジ管理と最も異なる点は、ある種の変更を行うときにシステムを 停止する必要があることです。 システムの停止を実行するには、すべてのノードのパブリッシュされたテーブルで処理を停止し、他のすべてのノードからのすべての変更を各ノードが受信しているかどうかを確認します。 詳細については、「レプリケーション トポロジの停止 (レプリケーション Transact-SQL プログラミング)」を参照してください。

Note

ピア ツー ピア トポロジでは、ディストリビューターはプル サブスクライバーより前の SQL Server のバージョンを使用できません。

既存の構成にアーティクルを追加するには

  1. システムを停止します。

  2. トポロジ内の各ノードでディストリビューション エージェントを停止します。 詳細については、「レプリケーション エージェント実行可能ファイルの概念」または「レプリケーション エージェントを起動および停止する (SQL Server Management Studio)」を参照してください。

  3. CREATE TABLE ステートメントを実行して、トポロジ内の各ノードに新しいテーブルを追加します。

  4. bcp ユーティリティを使用して、全ノードの新しいテーブルにデータを一括コピーします。

  5. sp_addarticle を実行して、トポロジ内の各ノードに新しいアーティクルを作成します。 詳しくは、「 アーティクルを定義」をご覧ください。

    Note

    sp_addarticle の実行後、レプリケーションによってトポロジ内のサブスクリプションにアーティクルが自動的に追加されます。

  6. トポロジ内の各ノードでディストリビューション エージェントを再起動します。

パブリケーション データベースのスキーマを変更するには

  1. システムを停止します。

  2. データ定義言語 (DDL) ステートメントを実行して、パブリッシュ済みテーブルのスキーマを変更します。 サポートされるスキーマ変更の詳細については、「パブリケーション データベースでのスキーマの変更」を参照してください。

  3. パブリッシュ済みテーブルの利用を再開する前に、再びシステムを停止します。 これにより、新しいデータ変更がレプリケートされる前に、すべてのノードでスキーマ変更が受け取られます。

次の例は、2 つのノードを持つ既存のピア ツー ピア レプリケーション トポロジに新しいテーブル アーティクルを追加する方法を示しています。

-- Create the new table at both nodes.
CREATE TABLE AdventureWorks2022.dbo.ProductTest (column1 int, Column2 int);
CREATE TABLE AdventureWorks2022Replica.dbo.ProductTest (column1 int, Column2 int);
GO
REM Bulk insert data into both the publication and subscription databases.
REM The BCP format depends on the snapshot format (native or character).
REM Execute at the command prompt.

bcp AdventureWorks2022..ProductTest in NewTable.bcp -T -SMYPUBLISHER n/c
bcp AdventureWorks2022Replica..ProductTest in NewTable.bcp -T -SMYPUBLISHER n/c
--- Add the article to the publication.
DECLARE @publication AS sysname;
DECLARE @newtable AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @newtable = N'ProductTest';

USE AdventureWorks2022;

EXEC sp_addarticle 
  @publication = @publication,
  @article = @newtable,
  @source_object = @newtable,
  @destination_table = @newtable,
  @force_invalidate_snapshot = 0;
GO