2009-04-24 10 views
6

環境: SQL Server 2005のSP2(9.0.3077) トランザクションパブリケーション(生産とベータ版)SQL Server 2005のレプリケーション

私は同じ記事の一部を使用する2つの異なるレプリケーションパブリケーションを設定している状況があります。これらの出版物のそれぞれは、別のマシン上で加入者にフィードします。これらの共有記事の1つは表です。一定の時間間隔で、この表のレコードの多くは老化し、もはや必要なくなります。この時点で、レコードを削除するストアドプロシージャが呼び出されます。

リソースを節約し、サブスクライバの待ち時間を改善するために、このストアドプロシージャのレプリケートプロパティをデフォルトの「ストアドプロシージャ定義のみ」ではなく「ストアドプロシージャの実行」に設定しました。これにより、ストアドプロシージャが2,000,000件以上のレコードを削除するときに、これらのレコードはサブスクライバに複製されません。代わりに、ストアド・プロシージャの実行がレプリケートされ、サブスクライバ上の同じレプリケート・ストアド・プロシージャが実行され、同じ2,000,000以上の行が削除されます。

私が持っている問題は、私の2番目の出版です。このタイプの動作は必要ありませんでしたので、ストアドプロシージャのアーティクルプロパティを「ストアドプロシージャ定義のみ」に設定し、他のサブスクライバの行を削除するためのレプリケーションを期待していましたが、そうではありませんでした。加入者のテーブルはレコードを取得し続けていました。だから、それを修正するために、私は記事プロパティを "Execution ..."に設定し、それを良いと呼んだ。これはおそらくベータ版がプロダクションにマッチする最高のソリューションですが、出版物のプロパティが互いに独立して動作する必要があるため、まだまだ気になります。

質問:他の出版物の「ストアドプロシージャ定義のみ」に設定されていても、「ストアドプロシージャの実行」アーティクルプロパティが優先され、他のパブリケーションに適用されるのはなぜですか?

+4

ここでStackoverlfowを再生したくないのですが、この質問は高度なSQL Serverレプリケーションクエリです。 Microsoft SQL Serverレプリケーションフォーラムに投稿してからこの投稿を再投稿することをお勧めします。 –

+2

私は現在、いくつかのレプリケーション作業に取り組んでいますが、私はJohnに同意します。これはかなり難しい質問です。がんばろう。 :)誰かがquerytimeout.comを作るまで待たなければならないかもしれない。 –

+3

ヒラリー・コッターはよく知られているレプリケーションエキスパートであり、SQL Serverレプリケーションフォーラムを見ている。http://social.msdn.microsoft.com/Forums/en-US/sqlreplication –

答えて

2

我々が持っているように私たちは私たちの会社で広くレプリケーションを使用しますいくつかの国の38の倉庫はすべてロンドンのプライマリサーバーに複製されています。

まず、レプリケーションフィルタは、単純なものであってもビューを使用する必要があります。このように、フィルタを調整する必要がある場合(WHERE句を読み込む)、ビューと変更を変更するだけで済みます。それ以外の場合は、データを再公開し、本当に苦痛になる可能性のある人をすべて再購読する必要があります。

サブスクライバとパブリッシャの両方で同じ削除を実行して、同期を維持することに言及しました。これは私の背骨の下に震えを送ります。 1つの場所でそれらを削除して、サーバーが変更を加えた内容をサブスクライバーにレプリケートする方がはるかに優れています。 SQL Server 2005以降、レプリケーションは非常に高速かつ効率的です。 SQL 2000は、複製にはかなり時間がかかりました。SQL 2005/2008を使用している場合、互換性レベル(db、プロパティ、オプションを右クリック)が90(2005)または100(2008)に設定されていることを確認してください。これにより、SQL Serverが迅速かつ効率的なレプリケーション方法に切り替わります。

もう1つの方法は、データを削除しないで、データを保持し、パブリケーションのwhere句を使用してフィルタリングすることです。

0

私は積極的に複製を管理して以来、長い時間が経ちましたが、その答えはログリーダーのアーキテクチャと関係があり、出版物の間で記事を共有していると思われます。私の理解は、ログリーダーがログをたどって、複製されたアイテムの操作を探します。アーティクルの設定によっては、データの個々の変更がディストリビューションデータベースのテーブルにポストされたり、プロシージャ呼び出しのレコードがポストされたりすることがあります。いずれにしても、これは記事のプロパティであり、記事がメンバーである刊行物ではありません。私は、同じデータベースオブジェクトの上に複数の記事を作成し、@ type = 'logbased'と@ type = 'proc exec'で複製できると仮定します(ただし、テストして検証していません)。

塩の大ピンチにこのすべてを取る:私は今、SQL 2008での開発が、私はレプリケーションで何をした最後の時間をされたSQL 7.

pjjH

関連する問題