0

基本的に同じセットアップの 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    |

できます:

  1. SERV2.DB2.dbo.Table を削除し、バックアップ SERV1.DB1.dbo.Table から SERV2 に復元します。

プラス: シンプル

マイナス: 大規模なデータベースでは遅い

  1. 各フィールドを比較して JOIN\UPDATE\INSERT または MERGE\UPDATE\INSERT 構造を使用する

プラス: シンプル

マイナス: 大きなテーブルでは遅い

マイナス:大量のデータ転送

  1. すべてのフィールドを使用して各行に HASH 列を追加して計算し、次に MERGE\UPDATE\INSERT を使用して差分行のみを更新します

プラス: すべての行と更新用の行のハッシュのみを転送する

マイナス: テーブルの変更

マイナス:計算中

マイナス: 多くのテーブルの作業が大幅に増える

  1. tablediff ユーティリティを使用する

プラスマイナス: ???この場合、それは役に立ちますか?遅い接続でどのように機能しましたか?

トラフィック転送を最小限に抑えて、あるサーバーから別のサーバーにデータをマージするより便利な方法はありますか?

UPD : 遅い接続チャネルがトラフィックを最適化する理由です。多数のレコードを持つテーブルの場合、両方のテーブルの各レコードを比較するか、完全なテーブル\データベースをコピーすると、多くの時間がかかります。

4

0 に答える 0