http://www.microsoft.com/japan/technet/prodtechnol/sql/2000/book...
Microsoft SQL Server 2000 リソースキット : 7.6 Oracle データベースから SQL Server 2000 への移行
このページはどうでしょうか?
SQLでロック関連は使ったことがないので、的確なコメントができなくて心苦しいのですが...
回答ありがとうございます。
なんだかそれらしい内容が書かれてありそうですね。
明日ゆっくり時間をとって、みてみたいと思います。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...
MSDN ライブラリ サイト移行に関する重要なお知らせ
一般的に、SQLで複数の処理をまとめて保護するにはトランザクションを使います。
トランザクション分離レベルをserializableに設定すれば、トランザクションの有効区間内では他のユーザーから更新・挿入ができません。
下のサンプルで検証しました。クエリアナライザで2枚ウィンドウを開いて実行してみてください。
Aはinsert後に10秒待機するようにしてあります。Aを実行中に別ウィンドウ側で、Bのinsert/select/update/deleteのいずれを実行しても、処理はAが終了した後に行われます。
本来insertも止まるはずなのですが、試した限りではできてしまいました。
A側のinsert文にtablock(テーブル全体にロック)を指定したところ、insertもブロックできました。
なんかエエカゲンな気もしますがご参考になれば。
----
CREATE TABLE [test] (
[row_id] [int] IDENTITY (1, 1) NOT NULL ,
[person] [varchar] (50) NOT NULL
)
----
(A)
set transaction isolation level serializable
begin tran
insert into test with (tablock) (person) values (’aaa’)
waitfor delay ’00:00:10’
select * from test
commit tran
----
(B)
insert into test (person) values (’bbb’)
select * from test
update test set person=’ccc’ where row_id = 1
delete from test where row_id = 1
http://www.atmarkit.co.jp/fnetwork/rensai/sql27/sql1.html
@IT:トランザクションの一貫性を保証するロック
@ITの解説です
http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...
MSDN ライブラリ サイト移行に関する重要なお知らせ
ロックヒントの説明(MSDN)です
http://www.atmarkit.co.jp/fdotnet/entwebapp/entwebapp09/entwebap...
@IT:.NETエンタープライズWebアプリケーション開発技術大全 SQL Serverのロック管理
ロック機構そのものに関する説明です
http://www.atmarkit.co.jp/fnetwork/rensai/sql28/sql1.html
@IT:SQL Serverで「デッドロック」を回避する
serializableはテーブルを独占するため、同時実行性能が著しく落ちます。綿密な設計を行い、デッドロックには注意してください。
回答ありがとうございます。
明日時間をとって、これらのサイトを読んで生きたいと思います。
いちおう、ロックやトランザクションの概念は理解しているつもりなのですが、SQLServerでどうすればロックやトランザクション機能を実現できるのか、その実装方法がわかっていない状況なのです。
引き続き、回答を受け付けますので、よろしくお願いします。