- PR -

DB2のロックについて

1
投稿者投稿内容
ふくま〜る
会議室デビュー日: 2008/09/04
投稿数: 2
投稿日時: 2008-09-04 11:18
初めて投稿いたします。
DB2のロックについて苦慮してます。
よろしくお願いします。

環境:DB2 v9.1

主キーが「列1、列2、列3」というテーブルAがあります。

コマンド・エディター(事前にSQLステートメントの自動コミットを行わない設定)にて
このテーブルAに対し以下の INSERT を実行します。

INSERT INTO テーブルA (列1,列2,列3...) VALUES (23,1,1, ...)

その後、以下の SELECT を実行します。

SELECT * FROM テーブルA WHERE 列1 = 1 AND 列2 = 1

すると、ロック(エラーコード:-952)がかかります。
テーブルAにトリガーは設定していません。
DB2を再起動後、上記の手順を実施してもロックがかかります。
また、他の環境に関連データを全て持っていって実行すると再現しません。

理屈的にはロックするはずは無いと思うのですが、
ロックする可能性はあるのでしょうか?

解決策があれば一番良いのですが、
そもそも、理屈的に有り得るのかが知りたいところです。

ご存知の方、よろしくお願い致します。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2008-09-04 12:00
そのINSERTとSELECTは、同一トランザクションから実行しているのですか?

また、テーブルAにはそのSELECT文が利用できるようなインデックスは定義されていますか?
ふくま〜る
会議室デビュー日: 2008/09/04
投稿数: 2
投稿日時: 2008-09-04 12:44
カーニーさん、書き込みありがとうございます。

> そのINSERTとSELECTは、同一トランザクションから実行しているのですか?

 はい。同一のトランザクションからの実行です。

> また、テーブルAにはそのSELECT文が利用できるようなインデックスは定義されていますか?

 はい。主キーが「列1、列2、列3」となっており、
 SELECT文の条件式に「列1、列2」を指定していますので。

 本件は問題のデータ(テーブル内全て)をエクスポートし、
 他のサーバーに同じ環境を作成し、インポートして試してみると問題が発生しません。

 索引が壊れているとか。。。
 (本番稼動機な為、索引の再作成がなかなか出来ず困っています)
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2008-09-04 13:48
そうですか。ごめんなさい、分かりません。
ところで、
引用:

ふくま〜るさんの書き込み (2008-09-04 11:18) より:
すると、ロック(エラーコード:-952)がかかります。


-952って、これですか?
http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.msg.doc/doc/sql0952.htm
1

スキルアップ/キャリアアップ(JOB@IT)