人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLServer2000で、テーブル全体にロックをかけて、『Insert文→select文』を実現するためのSQL文の書式を教えてください。
上の『』内の2つのSQL処理を行っている間、他のプロセスからは一切該当のテーブルにさわれない(select文も許可しない)ようにしたいのです(※1)
( with(XLOCK)句は、該当行をロックするための記述ですよね?そうだと思っています・・ )

また、SQLServer2000に関して、ロックの種類やロックの範囲、ロックをかける際の注意点などについてまとめられた書籍またはWEBサイトがあれば教えてください。
こちらにもご回答いただければ、ポイントを多めに配分します。

よろしくお願いします。


※1
下記の例のような一連の処理。この間、他のプロセスにtableAに対するSQL文を実行させたくない。
insert into tableA 〜〜〜〜〜〜 where ID=100
select * from tableA where ID=100

●質問者: xml-document1
●カテゴリ:コンピュータ
✍キーワード:SELECT SQL webサイト プロセス ポイント
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● saoyama
●15ポイント

http://www.microsoft.com/japan/technet/prodtechnol/sql/2000/book...

Microsoft SQL Server 2000 リソースキット : 7.6 Oracle データベースから SQL Server 2000 への移行

このページはどうでしょうか?

SQLでロック関連は使ったことがないので、的確なコメントができなくて心苦しいのですが...

◎質問者からの返答

回答ありがとうございます。

なんだかそれらしい内容が書かれてありそうですね。

明日ゆっくり時間をとって、みてみたいと思います。


2 ● rowlock
●35ポイント

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でどうすればロックやトランザクション機能を実現できるのか、その実装方法がわかっていない状況なのです。

引き続き、回答を受け付けますので、よろしくお願いします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ