C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

DBサーバにINSERTするときにデッドロックを起こしてしまう(いまさら VB6で申し訳ないのですが・・・・)


(過去ログ 4 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■4292 / inTopicNo.1)  DBサーバにINSERTするときにデッドロックを起こしてしまう(いまさら VB6で申し訳ないのですが・・・・)
  
□投稿者/ ABI 二等兵(1回)-(2006/06/14(Wed) 16:47:43)

分類:[VB6以前] 


分類:[VB6以前] 

初投稿です、どうかご教授ください
VB6のSP6で作成を行っているのですが

rdoResultset型の変数にrdOpenForwardOnlyで
SELECTした結果を入力しているのですが、
INSERTのときにデットロックを起こしてるのです。
このデットロックの回避法はないものかご存知の方は居られませんでしょうか?
RDOを使用してるので、ほか使えといわれそうですが、RDOを使用してとの
仕様なのでよろしくお願いします

0
引用返信 編集キー/
■4293 / inTopicNo.2)  Re[1]: いまさら VB6で申し訳ないのですが・・・・
□投稿者/ 名無しぃシャープ 准尉(112回)-(2006/06/14(Wed) 17:00:42)

分類:[VB6以前] 

No4292に返信(ABIさんの記事)
> 初投稿です、どうかご教授ください
> VB6のSP6で作成を行っているのですが
>
> rdoResultset型の変数にrdOpenForwardOnlyで
> SELECTした結果を入力しているのですが、
> INSERTのときにデットロックを起こしてるのです。
> このデットロックの回避法はないものかご存知の方は居られませんでしょうか?
> RDOを使用してるので、ほか使えといわれそうですが、RDOを使用してとの
> 仕様なのでよろしくお願いします

これだけじゃ答えられなくない?原因もよくわかんないw

0
引用返信 編集キー/
■4294 / inTopicNo.3)  Re[1]: いまさら VB6で申し訳ないのですが・・・・
□投稿者/ ABI 二等兵(2回)-(2006/06/14(Wed) 17:01:27)

分類:[VB6以前] 

すみません、追記で、INSERTの前にトランザクションは切っていません、
一時退避させるためなので・・・DBには今現在1ユーザしか接続されていません
その他の場所でトランザクションは確実に切られていません

0
引用返信 編集キー/
■4295 / inTopicNo.4)  Re[2]: いまさら VB6で申し訳ないのですが・・・・
□投稿者/ ABI 二等兵(3回)-(2006/06/14(Wed) 17:20:48)

分類:[VB6以前] 

>これだけじゃ答えられなくない?原因もよくわかんないw

すみません
SQLとか一連の処理を書けばいいのかもしれないのですが・・・
ものすごく長くコピー&ペーストすると・・・それこそ悲惨なことに・・・
後、ソースの中に企業秘密まであって。。。書き込める情報が少ないのです、、
簡単に言えばこれからデータをinsertしにいくDBがロックの状態であるという情報の取得ができるかどうかのみでも十分切り抜けれそうなのですが。。。
取得できるものでしょうか?


0
引用返信 編集キー/
■4297 / inTopicNo.5)  Re[3]: いまさら VB6で申し訳ないのですが・・・・
□投稿者/ 中博俊 神(508回)-(2006/06/14(Wed) 17:57:15)
中博俊 さんの Web サイト

分類:[VB6以前] 

視点が間違っています。
まずはどのSELECTされているか、INSERTされているかなどをプロファイラで現状分析してください。
そしてロックされているかどうかは管理ツールで確認できるので、確認してください。
プログラムのセッションを適切に最小限になるように短く設計してください。


0
引用返信 編集キー/
■4300 / inTopicNo.6)  Re[4]: いまさら VB6で申し訳ないのですが・・・・
□投稿者/ ABI 二等兵(4回)-(2006/06/14(Wed) 19:49:40)

分類:[VB6以前] 

つまり、
コーディング内ではロックを取得するすべがないということですね・・・
中博俊さんの
>視点が間違っています。
>まずはどのSELECTされているか、INSERTされているかなどをプロファイラで現状>分析してください。
>そしてロックされているかどうかは管理ツールで確認できるので、確認してください。
>プログラムのセッションを適切に最小限になるように短く設計してください。

できるだけ短くなるように組みなおすようにしてみます

何とか、rdConn.OpenResultset(strSql, rdOpenDynamic)
でデットロック状態にならずにINSERTできましたのでこれでいってみます。
質問にお答えいただきありがとうございました

解決済み
引用返信 編集キー/
■4304 / inTopicNo.7)  Re[5]: いまさら VB6で申し訳ないのですが・・・・
□投稿者/ 中博俊 神(509回)-(2006/06/14(Wed) 23:19:41)
中博俊 さんの Web サイト

分類:[VB6以前] 

>コーディング内ではロックを取得するすべがないということですね・・・

違います。
管理ツールSql Server Management Studio(SQL Server 2000ならEnterprise Manager)などが取得できているので、それと同じ方法を取れば取得できます。
ただし取得したところで何の価値もありません。
状況を把握していないところにアドホックな対応は何の意味も無く解決策にならないということです。

#状況を把握した上でアドホックな対応には意味があるでしょう。

厳しいことかもしれませんがDBを扱うプログラムの一番重要な設計はセッション設計です。
SQLServer 2000までの場合にはSELECTでもロック待ちが発生しますので(2005では回避策あり)、自身で読んで書いて読んでなんてすると自分自身ではまれます。

とにもかくにも現状把握あるのみです。


0
引用返信 編集キー/
■4307 / inTopicNo.8)  Re[3]: いまさら VB6で申し訳ないのですが・・・・
□投稿者/ 魔界の仮面弁士 准尉(107回)-(2006/06/15(Thu) 01:02:46)

分類:[VB6以前] 

> ものすごく長くコピー&ペーストすると・・・それこそ悲惨なことに・・・

せめて、データソースが何であるのかぐらいは示す事ができますよね。
(SQL Server 7.0 とか、Oracle 8i とか、どのODBCドライバであるとか)


たとえば、下記のような点は認識されていますか?
http://www.unisys.co.jp/club/net_view/20030129.html
http://www2p.biglobe.ne.jp/~sakurait/cstrue/chap5main.htm

0
引用返信 編集キー/
■4308 / inTopicNo.9)  Re[4]: いまさら VB6で申し訳ないのですが・・・・
□投稿者/ 中博俊 神(511回)-(2006/06/15(Thu) 09:12:57)
中博俊 さんの Web サイト

分類:[VB6以前] 

あまりにも意味が通らないのでタイトルを変更しました。

0
引用返信 編集キー/
■4310 / inTopicNo.10)  Re[5]: いまさら VB6で申し訳ないのですが・・・・
□投稿者/ ABI 二等兵(5回)-(2006/06/15(Thu) 09:45:13)

分類:[VB6以前] 

使用していたDBはMSDE2000SP3です、

VB6のRDOを使用していました、
また、読み込んできたテーブルに書き込みをしたわけではなかったのですが・・・
(Aというテーブルから読み出して、そのままBというテーブルに書き込みを行う処理だったのです)
根本的な解決ではないのですが、うまくいったため一応解決にしています。
問題が山のように出そうなのですが・・・・

PG自体だけでなくDBプログラム自体初めてだったのでどのように質問をすればいいのかもよくわからず、すみませんでした。



0
引用返信 編集キー/
■4318 / inTopicNo.11)  Re[6]: いまさら VB6で申し訳ないのですが・・・・
□投稿者/ Exige 二等兵(6回)-(2006/06/15(Thu) 12:06:48)

分類:[VB6以前] 

的外れなこと言ってたらごめんなさい。

INSERT SELECT文を飛ばせばよかったんじゃないです?

0
引用返信 編集キー/
■4327 / inTopicNo.12)  Re[7]: いまさら VB6で申し訳ないのですが・・・・
□投稿者/ ABI 二等兵(6回)-(2006/06/15(Thu) 15:15:41)

分類:[VB6以前] 

No4318に返信(Exigeさんの記事)
> 的外れなこと言ってたらごめんなさい。
>
> INSERT SELECT文を飛ばせばよかったんじゃないです?


>>(Aというテーブルから読み出して、そのままBというテーブルに書き込みを行う処理だったのです)

主なデータとしてはこの流れです。
ですが、たまにSELECTした後にいろいろと処理(主に算数計算)があり
SELECTした情報を持ったままどうしても
INSERTしなければならないのです・・・・


0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -