SQL Server 2000/2005 ID列+レプリケーション
-
03-07-2019 - |
質問
すでにいくつかのリソースを見てきましたが、単に明確にして意見を聞きたいです。
まず、問題を完全に回避するために、主キーとしてID列を使用する代わりに、それらを自分自身で生成し、作成時に常に一意であると仮定して、両方の方法でそれらの値を複製することはできません。
この質問の目的のために、グローバルアクセスの問題を解決するための2つ以上の方法のレプリケーションについて説明していますが、ID列があります。
トランザクションレプリケーションを設定しています。両方のデータベースが相互にレプリケーションする必要があります。
理解しているように、各データベースサーバーにシード値の範囲を割り当て、それを使用するので、交差しない範囲を指定した固有の原因があることがわかります。これは、レプリケーション中にこれらの値がシード列に挿入されることを意味しますか?
各サーバーが10行を挿入した後、範囲1-10および11-20を2つのサーバーに割り当てると、両方のデータベースに1-20のシードがありますか?
解決
" NOT FOR REPLICATION " ID列(およびトリガーやその他の制約)に適用できます。
あなたの例では、 server1は1-10をシードしますが、複製された11-20を受け入れるだけです。
シードを設定するいくつかの方法:
いずれか:シード/増分を、NOT FOR REPLICATIONに設定します
- シード1、増分2
- シード2、増分2
- シード-1、増分-2
- シード-2、増分-2
- シード1000000001、増分2
- シード1000000002、増分2
- シード-1000000002、増分-2
- シード-1000000001、増分-2
これにより、8台のサーバーでサーバーごとに500,000,000が提供されます
または: ServerIDという2番目の列を追加して複合キーを指定し、ID列にNOT FOR REPLICATIONを使用します
これは、サーバーごとに2 ^ 32行のtinyintに対して、たとえば256サーバーまでスケールアップします
どちらの方法でも動作します...