0

2つのSQLServerインスタンスがあり、あるサーバー上のデータベースに対して別のサーバーから多くのリモートクエリを実行しています。server1.database1でのこのクエリのように:

select T1.id
from server1.database1.dbo.table1 T1
inner join server2.datbase2.dbo.table2 T2
on T1.id = T2.id

私はこのコードを他の誰かから継承しましたが、これを行うためのより良い(より速い)方法があるかどうか疑問に思っていましたか?つまり、server1.database1.dboにserver2.databse2.dbo.table2の正確なレプリカコピーを作成して、それ自体を更新し、リアルタイムで最新の状態に保つ方法はありますか?

Microsoft SQL Server Standard Edition(64ビット)バージョン10.0.4000.0

編集:実際、このシナリオで今行っていることは、可能であれば、オープンクエリとwith(nolock)を使用して、必要な最小のデータセットを取得し、それを一時テーブルに配置することです。また、「id」列を一意のクラスター化インデックスとして設定し、サーバー1で参加しているものにすばやく参加できるようにしました。

4

2 に答える 2

2

SQL Server では、シナリオに 3 つの主なオプションがあります (バージョンとエディションによって異なります)。

ログ配布: セットアップと保守が簡単。ただし、「レプリカ」データベースはリアルタイムではなく、元のサーバーからの最後のトランザクション ログ バックアップと同じくらい最新のものになります。

ミラーリング: リアルタイムに非常に近いですが、「レプリカ」データベースから直接読み取ることはできません。代わりに、スナップショットを定期的に作成する必要があります。

レプリケーション: 管理と維持が困難ですが、「レプリカ」データベースのデータの最もリアルタイムなバージョンが得られる可能性があります。

リンク サーバーでパフォーマンスや安定性の問題が発生していない限り、これら 3 つの方法のいずれかを実装するために多くの時間と労力を費やすつもりがない限り、この方法を使用します。

于 2011-12-22T21:40:42.793 に答える
0

テーブルのビューを作成することはできますが、編集することはできませんが、他のデータベースを常に参照しなくても、正確なテーブルを取得できます。ただし、他のテーブルは引き続き必要です。

于 2011-12-22T21:32:34.713 に答える