
SQLServerにおける、排他制御に関して質問です。
環境:
SQLサーバ
・Windows 2003 Server SP2
・SQL Server 2005 Standard Edition SP3
SQLクライアント
・WindowsXP SP3
・.NET Framework 3.5 SP1 VB.NET アプリ
DBアクセサ
・ADO.NETを利用
----------------------------------------------------------------------
1.DBとのコネクションを確立
・
・
・
2.データベーストランザクションを開始(レベルはSerializable)
3.テーブルAに対してINSERTを実行
(テーブルAの主キーはオートインクリメント設定されている。)
4.3の結果、追加された主キーを取得するため、MAX()関数にて主キーの最大値(つまり、3で追加した行のはず)を取得
5.テーブルAを外部参照しているテーブルに対して、4で取得したテーブルAのキーを利用して、行を追加・更新などを行う。
6.コミットを行う。
(コネクションは、アプリケーションが終了するまで保持する・・・)
----------------------------------------------------------------------
この処理フローで実行していたシステムですが、
二つのクライアント(X,Y)から、同時に2からの処理が行われた際に排他されず、
Xが、Yが作成したレコードの主キー値を元に、5の更新を行ってしまいました。
ログを見ると、
2→成功
3→成功(別のレコードが作成された)
4→XがMAX関数にて、Yが作成したレコードの主キーを取得
※処理そのものは成功しているが、論理的におかしい
となっています。
論理的には、トランザクションをかけているので、3からの処理が同時に行われるはずはなく、
4で取得される番号も、それぞれが作成した行の主キー番号になるはずなのですが・・・。
論理的に見落としている点や、環境的な要因などで、考えられる原因はありますでしょうか・・・?
No.1ベストアンサー
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じSELECT文同士でのデ...
-
詳しい方、ご教授ください。お...
-
SQLServerにおける、排他制御に...
-
stored procedureの引数について
-
行ロックされているROWID
-
UPDATE がうまくいかない
-
sysdateの使い方
-
同一レコード更新時の排他制御
-
一時表 を表単位で
-
処理が終わったり終わらなかっ...
-
テーブル名を指定してCsv出力
-
C#でトランザクション開始後参...
-
PL/SQLでmdb(Access)ファイルへ...
-
oracleのupdateについて
-
処理速度の見積もり時間について。
-
年度毎にシーケンスの初期化?
-
データファイルの縮小
-
Data Pump で大量データインポ...
-
Oracleはどの程度まで巨大なテ...
-
SQLite C/C++ でのテーブル数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DELETE文でFROM句を省略した場合
-
他の処理でselectさせないよう...
-
object browser で処理を中断す...
-
RDBのテーブル種類の違い
-
同じSELECT文同士でのデ...
-
PL/SQLの平行処理について
-
年度毎にシーケンスの初期化?
-
[性能改善]AccessのDBに大量の...
-
accessでイベントを中止するよ...
-
C#でトランザクション開始後参...
-
処理速度の見積もり時間について。
-
Oracleから見たOracleの優位性(...
-
チューニング対象のSQLの見つけ...
-
カーソルについて
-
統計情報の取得=コミットですか?
-
Access2013で操作ログを残した...
-
ロングトランザクションについて
-
処理が終わったり終わらなかっ...
-
同一レコード更新時の排他制御
-
トランザクションのデータ件数...
おすすめ情報