DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DBに書き込めない

環境/言語:[NET Framework1.1 VB.net 2003]
分類:[.NET]

お世話になります。
オラクルのDBからデータを10000万件位読んで、メモリ上で比較して
違う場合は別のテーブルにインサートしようとしますが、そのところで
なにも言わなくなります。(エラー表示はなし)
ステップで追うとExecuteNonQueryのところで黄色いラインがなくなって
しまいます。(どっかいった?)
送っているSQLはオブジェクトブラウザーからだと登録されます。
不思議なのは起動直後の一回はうまくいくときがあります。
メモリが足りなくなっているのでしょうか?
よろしくお願いします。
  • 題名: Re[1]: DBに書き込めない
  • 著者: オショウ
  • 日時: 2009/10/27 17:35:11
  • ID: 25685
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No25684に返信(どんどんさんの記事)
> オラクルのDBからデータを10000万件位読んで、メモリ上で比較して

  この時点で、無茶ですネ!

> 違う場合は別のテーブルにインサートしようとしますが、そのところで
> なにも言わなくなります。(エラー表示はなし)

  読み込まないで、SQL文だけで差異をインサートするように
  しないと・・・

> メモリが足りなくなっているのでしょうか?

  その通りです。

以上。
■No25684に返信(どんどんさんの記事)
> ステップで追うとExecuteNonQueryのところで黄色いラインがなくなって

  ここで、少々引っかかりました・・・

  ExecuteNonQueryなので、一旦読み込むという動作はせず
  SQL文の条件判定で、差異分を別テーブルに一括インサート
  するSQL文になっていると推測できます。

  では、ハングアップしたかのようになっているのは・・・
  おそらく差異分のデータが、10000万件(これだと1億件)
  中かなりの件数がヒットしたことになり・・・

  トランザクションを含め、処理が終わるまで相当な時間を
  要してしまっていると思います。

  一括ではなく、別の何か条件を付与して、もう少し少ない
  件数毎に繰り返して行うような方法がよいように思います。

※ OracleとSQL Serverで、若干特性が違うので、適切な方法
  かは、Oracle使いさんにお願い!突っ込みよろしく!

以上。参考まで
オショウ様、コメントありがとうございます。

申し訳ありません。

データ数の個数を間違えていました。

10000万ではなく
100個の配列があってそれぞれに10000データ位あります。
それをいったん全て読み込みます。(2分くらい)
配列同士を比較し違いがあればフラグを立てます。
そのフラグをもとに配列のデータの一部を使って、読みこんだテーブルとは
別のテーブルにレコードを追加したいと思っています。
比較したとき違いがない場合はレコードを作りません。

よろしくお願いします。
■No25689に返信(どんどんさんの記事)
> そのフラグをもとに配列のデータの一部を使って、読みこんだテーブルとは
> 別のテーブルにレコードを追加したいと思っています。
もし、コードに問題があったとしても、これだけの情報では何とも言えません。
現状の ExecuteNonQuery 近辺のコードを提示できないでしょうか。

また、それが件数に依存しているのか(依存するなら、何件以上だと再現しやすいのか)、
それとも、特定のテーブルのみで発生し、実験用の小規模テーブルでは再現しないのかなど、
問題点の切り分けも行ってみてください。


>>>> なにも言わなくなります。(エラー表示はなし)
外部のツール(Access ODBC接続、Object Browser、Visual Studioデータ接続等)で
そのテーブルが編集ロックされていたりはしませんか? 念のため、
他のツールが起動していたら、それらは切断/終了させておいてみてください。
  • 題名: Re[4]: DBに書き込めない
  • 著者: どんどん
  • 日時: 2009/10/28 17:59:17
  • ID: 25694
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
魔界の仮面弁士 様

コメントありがとうございます。

>そのテーブルが編集ロックされていたりはしませんか?
「Object Browser」が起動していたのがいけなかったようです。
終了したら書き込みにいきました。
それでも小さなテーブルを作ってインサートはできたので、まさかとは
思いました。
ありがとうございました。
12時間かかっていた作業が数分で終わるメドがたって助かりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板