1

I'm trying to figure out the best way to populated the staging database in a data warehouse. I will have a number of databases (identical schema, SQL Server 2005 Standard). Ideally I'd set up each as a publisher, with the same publication. There will be a single subscriber database (SQL Server 2005 Enterprise) that will subscribe to each of the publisher databases. Data in the publisher databases will be modified. The subscriber database will only be updated by its subscriptions, and therefore does not need to send changes back to any of the publishers. Publisher databases don't need to update each other. Replication will be occurring over the internet (although VPN could be used).

I'm not clear on what kind of replication I should be using for this. Can I do it with replication? what about Incremental fields?

4

2 に答える 2

2

レプリケーションは間違いなくこれを処理できます。異なるパブリッシャーのテーブル間にオーバーラップがない限り、ボグ標準のセットアップ以外に何もする必要はありません。つまり、パブリッシャとして pub_a と pub_b があり、どちらもテーブル tbl_a を持つ場合、サブスクライバで異なるテーブルにそれらをパブリッシュする必要があります (宛先テーブルは sp_addarticle への呼び出しで定義されます)、または保証する必要があります。異なるパブリッシャー間のデータが衝突することはありません。後者の場合、sp_addarticle への呼び出しで @pre_creation_cmd パラメータに指定する内容にも注意する必要があります。デフォルトでは、サブスクライバーでテーブルをドロップします。これは、ミックスに最後に追加されたパブリッシャーが勝ち、残りは壊れることを意味します。最初に追加したパブリッシャーには「drop」を指定し、残りのパブリッシャーには「none」を指定する必要があります。幸運を!

于 2011-04-20T11:54:23.990 に答える
1

これは可能だと思いますが、指定したのとは逆に設定します。中央データベースをパブリッシャーとして設定し、マージ レプリケーションを使用します。

マージ レプリケーションには、動的フィルターを許可するオプションが含まれています。そのため、各サブスクライバーが元の行のみを受け取るようにフィルターを設定する必要があります。おそらく、いくつかのテーブルに列を追加して HOST_NAME( ) 行が発生したサーバーの。すべてのテーブルに対してこれを行う必要はありません。1 つのテーブルをフィルター処理すると、結合を使用して追加のテーブルから行をフィルター処理するカスケード フィルターを使用できるためです。

「増分フィールド」については、ここで IDENTITY 列について話していると思いますか? 幸いなことに、これらについても考慮されています。基本的には、パブリッシャーが IDENTITY 範囲を管理し、各サブスクライバーにより小さい範囲 (デフォルトでは 1000 個の値) を配布します。

警告 - これらは一般的な原則ですが、私はこの種のセットアップを自分で試したことはありません。最初に「おもちゃ」データベースで試して、動作させることをお勧めします。

于 2011-04-20T09:40:18.323 に答える