13

2 つのデータベース間でマージ レプリケーションを設定しており、両方で ID 範囲を使用しています。

パブリッシャーでマージされたテーブルに特定の行を追加したい (ID 値を ID 範囲外に設定する)。これを試すと、次のエラーが表示されます。

挿入に失敗しました。データベース 'xxx'、レプリケートされたテーブル 'dbo.yyy'、列 'yyy_id' の ID 範囲チェック制約と競合しました。ID 列がレプリケーションによって自動的に管理される場合は、範囲を次のように更新します。パブリッシャーの場合、sp_adjustpublisheridentityrange を実行します。サブスクライバーの場合は、ディストリビューション エージェントまたはマージ エージェントを実行します。

ID 範囲管理を使用しているマージ レプリケート テーブルに特定の ID 値を強制する方法はありますか?

4

2 に答える 2

3

1 つの方法は、複製トポロジー内の各ノードが異なる範囲の ID 値を使用していることを確認して、重複が発生しないようにすることです。

たとえば、パブリッシャーに 1 ~ 100 の範囲、サブスクライバー A に 101 ~ 200 の範囲、サブスクライバー B に 201 ~ 300 の範囲を割り当てることができます。パブリッシャーで行が挿入され、ID 値がたとえば 65 の場合、その値は各サブスクライバーにレプリケートされます。レプリケーションによって各サブスクライバーにデータが挿入されるとき、サブスクライバー テーブルの ID 列の値はインクリメントされません。代わりに、リテラル値 65 が挿入されます。ID 列の値がインクリメントされるのは、ユーザーの挿入のみであり、レプリケーション エージェントの挿入では増加しません。

参考文献 ID 列の複製

于 2009-03-12T14:10:39.237 に答える
0

20000 行を増やして自動挿入を増やすことで解決しました。 ここに役立つブログが追加されました

于 2020-02-29T15:03:26.903 に答える