ピア ツー ピア トポロジの管理 (レプリケーション Transact-SQL プログラミング)
ピア ツー ピア トポロジの管理は通常のトランザクション レプリケーション トポロジの管理と似ていますが、特別な考慮が必要な部分が数多くあります。 ピア ツー ピア トポロジの管理が通常のトポロジ管理と最も異なる点は、ある種の変更を行うときにシステムを停止する必要があることです。 システムを停止するときには、すべてのノードでパブリッシュ済みテーブルの利用を停止し、各ノードが他のすべてのノードの変更を受け取っていることを確認します。 詳細については、「レプリケーション トポロジの停止 (レプリケーション Transact-SQL プログラミング)」を参照してください。
注 |
---|
ピア ツー ピア トポロジでは、ディストリビューターはプル サブスクライバーより前の SQL Server のバージョンを使用できません。 |
既存の構成にアーティクルを追加するには
システムを停止します。
トポロジ内の各ノードでディストリビューション エージェントを停止します。 詳細については、「レプリケーション エージェント実行可能ファイルの概念」または「レプリケーション エージェントを起動および停止する (SQL Server Management Studio)」を参照してください。
CREATE TABLE ステートメントを実行して、トポロジ内の各ノードに新しいテーブルを追加します。
bcp ユーティリティ を使用して、全ノードの新しいテーブルにデータを一括コピーします。
sp_addarticle を実行して、トポロジ内の各ノードに新しいアーティクルを作成します。 詳細については、「アーティクルの定義」を参照してください。
注 sp_addarticle の実行後、レプリケーションによってトポロジ内のサブスクリプションにアーティクルが自動的に追加されます。
トポロジ内の各ノードでディストリビューション エージェントを再起動します。
パブリケーション データベースのスキーマを変更するには
システムを停止します。
データ定義言語 (DDL) ステートメントを実行して、パブリッシュ済みテーブルのスキーマを変更します。 サポートされるスキーマ変更の詳細については、「パブリケーション データベースでのスキーマの変更」を参照してください。
パブリッシュ済みテーブルの利用を再開する前に、再びシステムを停止します。 これにより、新しいデータ変更がレプリケートされる前に、すべてのノードでスキーマ変更が受け取られます。
使用例
次の例は、2 つのノードを持つ既存のピア ツー ピア レプリケーション トポロジに新しいテーブル アーティクルを追加する方法を示しています。
-- Create the new table at both nodes.
CREATE TABLE AdventureWorks2012.dbo.ProductTest (column1 int, Column2 int);
CREATE TABLE AdventureWorks2012Replica.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 AdventureWorks2012..ProductTest in NewTable.bcp �T �SMYPUBLISHER n/c
bcp AdventureWorks2012Replica..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 AdventureWorks2012
EXEC sp_addarticle
@publication = @publication,
@article = @newtable,
@source_table = @newtable,
@destination_table = @newtable,
@force_invalidate_snapshot = 0;
GO