SQL Serverレプリケーションでは、複製されたデータにソースdbidを含めることができますか?

StackOverflow https://stackoverflow.com/questions/421739

  •  05-07-2019
  •  | 
  •  

質問

TableAを含むDatabaseAと、Id、Nameというフィールドがあるとします。

別のデータベースDatabaseBには、DatabaseId、Id、Nameというフィールドを持つTableAがあります。

送信するレプリケーションパブリケーションをセットアップすることは可能ですか:

DatabaseA.dbid、DatabaseA.TableA.Id、DatabaseA.TableA.Name

DatabaseB.TableAに

編集: 私が求めている理由は、複数のデータベース(同一のスキーマ)を単一のデータベースに結合する必要があることです。複製は開始するのに適した場所のように思えました(ある場所から別の場所にデータを複製する必要があります)が、私はブレインストーミング段階にいます。レプリケーションを使用せずにこれを達成する方法については、私は間違いなく提案を受け入れます。

役に立ちましたか?

解決

もっと簡単な方法があるかもしれませんが、最初に考えたのは、ソースデータベースのインデックス付きビューでTableAをラップしてから、ビューをテーブルとして複製することです(つまり、type =" indexed view logbased" )。ただし、これはマージレプリケーションでは機能しないと思います。

だから、おおよそ次のようになります:

CREATE VIEW TableA_with_dbid WITH SCHEMABINDING AS
SELECT DatabaseA.dbid, Id, Name FROM TableA

CREATE UNIQUE CLUSTERED INDEX ON TableA_with_dbid (Id) -- or whatever your PK is

EXEC sp_addarticle ...,
    @source_object = 'TableA_with_dbid',
    @destination_table = 'TableA',
    @type = 'indexed view logbased',
    ...

大きな警告:インデックス付きビューには多くの要件がありますアプリケーションに適切でない場合があります。たとえば、ベーステーブルを更新するたびに特定のオプションを設定する必要があります。

(質問の編集に応じて...)これは、複数のソースを1つのテーブルに結合する場合には機能しません。 AFAIK、購読データベースのオブジェクトは、1つの公開された記事からのみ取得できます。また、UNIONはインデックス付きビューでは許可されないため、サブスクライブ側でインデックス付きビューを実行することはできません。 (ドキュメントでは、UNION ALLは禁止されていると明示されていませんが、私を驚かせることはありません。念のために試してみてください。)しかし、明示的な質問には答えます:dbidは複製されたテーブルにあります。

他のヒント

これらのイベントを複数のソースから1つの場所に集約していますか?複製は1つのソースからのみ行われます-1対1であるため、ソースIDはあまり意味がないようです。

複数のソースからデータを集約している場合は、リンクサーバーとトリガーが適切な選択肢であり、その場合は、必要なソースに関する情報を絶対に含めることができます。

目的を説明するために質問を明確にできれば、最善の解決策を見つけるのに役立ちます。

質問の新しい詳細から更新:

このソリューションは、必要なもののように聞こえますか?

  1. ソースデータベースでAFTERトリガーを設定し、変更された行を中央リポジトリデータベース(何らかの種類の保持テーブル)に送信します。これらの行には、" Source"、" Change type"などの追加の列を含めることができます。 (挿入、削除など)。
  2. 一部の中央プロセスはテーブルを監視し、新しい行を処理し(または定期的に-おそらく1分に1回)、中央データベースに組み込みます

必要に応じて、サーバーでcheck / mergeプロセスが実行される頻度を調整できます(テーブルをAFTERトリガーを使用して、表示される新しい行を処理するために絶えず実行することもできます)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top