基本的に同じセットアップの 2 つの (リンクされた) Microsoft SQL サーバーがありますが、内容が異なります。サーバーとの接続が遅い。一部のテーブルには多くの行が含まれています。一部のレコードはフィールドが異なります。各サーバーのデータは 99% 一致します
トラフィック転送を最小限に抑えて、あるサーバーから別のサーバーにデータをマージする必要があります。
例えば:
SERV1.DB1.dbo.Table:
| fname | count |
----------------------
| 'file1.txt' | 10 |
| 'file2.txt' | 5 |
| 'file3.txt' | 35 |
SERV2.DB2.dbo.Table:
| fname | count |
----------------------
| 'file1.txt' | 40 |
| 'file2.txt' | 150 |
And I want to update SERV2.DB2.dbo.Table to:
| fname | count |
----------------------
| 'file1.txt' | 10 |
| 'file2.txt' | 5 |
| 'file3.txt' | 35 |
できます:
- SERV2.DB2.dbo.Table を削除し、バックアップ SERV1.DB1.dbo.Table から SERV2 に復元します。
プラス: シンプル
マイナス: 大規模なデータベースでは遅い
- 各フィールドを比較して JOIN\UPDATE\INSERT または MERGE\UPDATE\INSERT 構造を使用する
プラス: シンプル
マイナス: 大きなテーブルでは遅い
マイナス:大量のデータ転送
- すべてのフィールドを使用して各行に HASH 列を追加して計算し、次に MERGE\UPDATE\INSERT を使用して差分行のみを更新します
プラス: すべての行と更新用の行のハッシュのみを転送する
マイナス: テーブルの変更
マイナス:計算中
マイナス: 多くのテーブルの作業が大幅に増える
- tablediff ユーティリティを使用する
プラスマイナス: ???この場合、それは役に立ちますか?遅い接続でどのように機能しましたか?
トラフィック転送を最小限に抑えて、あるサーバーから別のサーバーにデータをマージするより便利な方法はありますか?
UPD : 遅い接続チャネルがトラフィックを最適化する理由です。多数のレコードを持つテーブルの場合、両方のテーブルの各レコードを比較するか、完全なテーブル\データベースをコピーすると、多くの時間がかかります。