2011-07-01 20 views
0

ビューの上にあるレポートがあります。テーブルの基礎となるビューは15分ごとに更新され、更新サイクルには約1〜2分かかります。この間にレポートを実行すると、レポートに間違った値が表示されます。何らかのロックを適用できる方法があります私は更新が行われたら、レポートを取得し、この問題の他の解決策があるなら、私はSQL Serverの同時実行の問題

感謝を知っている私のreport.Please上のダーティデータを避けることができるようにビューに、 ラヴィ

答えて

-1

はあなたをしました反復可能な読み取りモードまたは直列化分離モードでレポートデータを取得することを検討してください。

+0

シリアル化可能かどうかはわかりません。私はOPが同時性を増やそうとしていると思っています。:-) –

1

基礎となるテーブルを更新するために別の方法を使用することを検討します。これらのテーブルを1〜2分間更新する代わりに、別のスキーマに「シャドウ」テーブルを作成します。 (そして、一時的な保持のための第3のスキーマを持っています。)これにより、ユーザーが見ることのできないテーブルで作業し、単純にメタデータ操作を使用してテーブルを切り替えることができます。そして、あなたはこれを行うことができます。

  1. TRUNCATEを/(競合なし2分、または多分それ以下)
  2. トランザクションを開始(ミリ秒)
  3. 移動主テーブルには、シャドウテーブルを移入再
  4. がDBOスキーマにシャドウテーブル(ミリ秒)シャドウ・スキーマにプライマリ・テーブル(ミリ秒)
  5. 移動を移動ALTER SCHEMA ... TRANSFER(ミリ秒)を使用して保持スキーマ、
  6. トランザクションをコミットします(サブミリ秒このソリューションのecond)
  7. (オプション)いくつかの領域(サブ秒を回復するために、シャドウテーブルを切り捨てる)

一つの欠点は、あなたが維持するために、統計、インデックスなどの2セットを持っているということです。統計については、データが単純に増加していて、それ以外は実質的に変化していなければOKです。

http://jahaines.blogspot.com/2009/10/locking-table-while-it-is-being-loaded.html

+0

こんにちはAaron、ソリューションのおかげで感謝しますが、私はデータベースにこの種のアプローチに従うことはありません。 "select文"を使って達成できる他のapprochがあります。データベース。ありがとう – SRK

1

アーロン・ベルトランの答えが、使用して同義語と同様の方法:

アダムヘインズは、ここでは(私は数年前に彼を示した)この方法については本当に徹底し、ライトアップを持っています

「照会するテーブル」

様々なCREATE文は権限をエスカレートするEXECUTE AS OWNERを持つストアドプロシージャでラップできるため、「ロードするテーブル」の1と1:この場合は

は、あなたは2つの同義語を持っています。

Aaronの回答に対するあなたのコメントに基づいて、には、何らかの切り替え方法があるがあります。並行性を高める唯一の方法は、複数の表を使用することです。