マージ レプリケーションに関する注意点

マージ レプリケーションには、次のようなさまざまな注意点があります。

  • パブリッシュされたテーブルへの uniqueidentifier 列の追加。

  • timestamp 列。

  • Large Object (LOB) データ型。

  • パブリッシュされたテーブルへのデータの一括挿入。

  • パブリケーションの互換性レベル。詳細については、「レプリケーション トポロジにおける複数バージョンの SQL Server の使用」の「マージ パブリケーションの互換性レベル」を参照してください。

uniqueidentifier 列の追加

マージ レプリケーションではグローバル一意識別子 (GUID) 列を使用して、マージ レプリケーション処理中に各行を識別します。パブリッシュされたテーブルに ROWGUIDCOL プロパティと一意のインデックスが指定された uniqueidentifier 列がない場合は、レプリケーションによってこの列が追加されます。パブリッシュされたテーブルを参照する SELECT ステートメントおよび INSERT ステートメントが、列リストを使用していることを確認してください。テーブルがパブリッシュされなくなったのにレプリケーションによって列が追加された場合、その列は削除されます。既に存在していた列は、削除されません。

timestamp 列

マージ レプリケーションは timestamp 列をサポートします。timestamp 列はレプリケートされますが、リテラルの timestamp 値はレプリケートされません。timestamp 値は、サブスクライバでスナップショットが適用されると再生成されます。timestamp 値はサブスクライバで再生成されるので、timestamp 列はアーティクルの検証の実行時にフィルタにより抽出されます。

Large Object (LOB) データ型

パブリッシュされたテーブルに LOB が格納されている場合、sp_addmergearticle (Transact-SQL)@stream_blob_columns パラメータに対して TRUE の値を指定することをお勧めします。TRUE を指定しない場合は、LOB 全体をパブリッシャ側のメモリに作成する必要があるため、LOB が非常に大きくなるとパブリッシャの RAM が不足する場合があります。

重要な注意事項重要

このメモリの最適化を有効にすると、同期中のマージ エージェントのパフォーマンスが低下する場合があります。このオプションは、メガバイト単位のデータを含む列をレプリケートする場合にのみ、使用するようにします。

text 列、ntext 列、および image 列の更新は、その列が UPDATE ステートメントで明示的に更新された場合に限りレプリケートされます。この更新ではメタデータを更新するトリガが起動され、トランザクションが他のサブスクライバに反映されます。WRITETEXT および UPDATETEXT 操作だけでは、他のサイトに変更は反映されません。アプリケーションが WRITETEXT と UPDATETEXT を使用して text 列または ntext 列を更新する場合は、同じトランザクション内の WRITETEXT または UPDATETEXT 操作の後に、ダミーの UPDATE ステートメントを明示的に追加して、トリガを起動し、変更が他のサイトに確実に反映されるようにします。これらのデータ型の詳細については、「ntext 型、text 型、image 型 (Transact-SQL)」を参照してください。

注意

text、ntext、image の各データ型ではなく、データ型 varchar(max)、nvarchar(max)、および varbinary(max) を使用することをお勧めします。

パブリッシュされたテーブルへのデータの一括挿入

マージ レプリケーションでは、トリガおよびシステム テーブルを使用してパブリッシュされたテーブルの変更を追跡します。bcp ユーティリティまたは BULK INSERT コマンドを使用してデータの一括挿入を実行しても、既定ではトリガは起動されません。トリガが起動されないと、挿入は追跡されず、他のノードへも反映されません。変更が確実に追跡されるようにするには、一括挿入の実行時に以下のいずれかの方法を使用することをお勧めします。

  • bcp ユーティリティまたは BULK INSERT コマンドで FIRE_TRIGGERS オプションを使用します。このオプションを指定すると、一般的な挿入操作の場合と同じようにトリガが起動されます。詳細については、「bcp ユーティリティ」および「BULK INSERT (Transact-SQL)」を参照してください。

  • 一括挿入の実行後にストアド プロシージャ sp_addtabletocontents を実行します。このプロシージャは、システムテーブルに現在含まれていないソース テーブルの行の参照を挿入します。詳細については、「sp_addtabletocontents (Transact-SQL)」を参照してください。