トップ回答者
NOLOCKヒントを使わないダーティーリードの強制について

質問
-
お世話になっております。
現在、使用中のSQL2005からユーザーAがデータを参照しています。
この参照におけるロックを避けるため、ユーザーAからの参照は
すべてダーティーリードで行うようにする予定ですが
クエリにNOLOCKヒントを付ける以外にこれを可能にする方法が無いか、
現在調査中です。
例えば、ログイン「ユーザーA」からのデータ参照は常にダーティーリードを
強制させるようサーバー側で設定することは出来ないのでしょうか?
サーバー側で対応可能な他の解決策でも構いませんので
情報をお持ちの方がいらっしゃいましたらご教授願えますでしょうか?
もしNOLOCKヒントつける以外に方法が無い場合はその旨
助言頂きたく、よろしくお願い致します。
(その場合は速やかにあきらめます)
どうぞよろしくお願い致します。
回答
-
>ストアドを使えばコントロール可能ということですね。
ただ、現在使用中のクエリをすべてストアドに置き換えるのは難しいかもしれません。。すみません。私の書き方が悪かったですね。ストアドでなくても、以下のようにSqlConnectionで分離レベルを指定できますので、ユーザー毎にここを制御すれば実現できるのではないかと思います。
SqlConnection.BeginTransaction メソッド (IsolationLevel)
http://msdn.microsoft.com/ja-jp/library/5ha4240h(v=vs.110).aspx★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク 星 睦美 2014年6月9日 3:01
すべての返信
-
>ストアドを使えばコントロール可能ということですね。
ただ、現在使用中のクエリをすべてストアドに置き換えるのは難しいかもしれません。。すみません。私の書き方が悪かったですね。ストアドでなくても、以下のようにSqlConnectionで分離レベルを指定できますので、ユーザー毎にここを制御すれば実現できるのではないかと思います。
SqlConnection.BeginTransaction メソッド (IsolationLevel)
http://msdn.microsoft.com/ja-jp/library/5ha4240h(v=vs.110).aspx★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク 星 睦美 2014年6月9日 3:01
-
>このメソッドはクライアント側のアプリケーションで指定するものですよね?
その通りです。
>今回、クライアント側のアプリには手を入れずサーバー側だけで出来る手法が無いかと調査しておりましたが
やはりアプリ改修無しでは難しいということでしょうか。。。アプリケーションでSQL文を発行して読んでいるんでしたよね。そこを改修しないとなると、SQL Server自体の機能に頼ることになると思いますが、前にも書いた通り、SQL Serverがログインユーザーもしくはデータベースユーザーで判断して、分離レベルを変更したり、ロックヒントを変更したりするような機能は、普通に考えて無いと思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/