こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

1つの表に複数のクライアントから一括登録

Oracle9i 9.2.0
ある1つの受注テーブルにバッチ系の一括登録(4000件程度)を複数のクライアントから同時に実行したとしたら待機する処理時間が増えたりするのでしょうか?
複数のクライアントの受注データが重複することはないです。
単純に4000件程度を1つのテーブルに同時実行するだけです。
メンバーの1人が過去に同時実行でタイムアウト?かなにかになって処理が止まってしまったと言っています。
私は問題ないと思っていますが、根拠のある説明ができなくて困っています。
どなたかアドバイスお願いいたします。

投稿日時 - 2006-08-15 22:45:44

QNo.2341680

困ってます

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

各接続セッション毎にトランザクションすればOKです。
(1)BeginTran-->Insert-->Commit
(2)BeginTran-->Select-->Update-->Commit
SelectではNoWaitを指定して同じレコード参照の場合
は処理を取消す。
あと4000件のインサートはロールバックセグメントの容量を確認してください。
(1)の場合待機は発生しません。
(2)の場合同一レコードを参照した場合はNoWaitを
指定しないSelectはOracleの排他により待ちとなります。この場合タイムアウトは発生しません。
NoWaitでOracleエラー番号を判断し「他の端末で更新中…」で再実行。
以上です。

投稿日時 - 2006-08-16 09:31:22

補足

回答ありがとうございます。
物理削除(前日分)の処理はありますが、更新処理は全くないです。
開発はVB6で実装しています。
当日分の受注データを一括で登録しており、
接続セッションごとにトランザクションは行っています。
BeginTran-->各テーブル参照-->一括登録(Insert)-->Commit
上記を複数のセッションで実行しています。
質問ですが、
ロールバックセグメントの容量はOEM等で参照できるのでしょうか?
また、確認するのは実行しているタイミングで容量が超えていないかを確認とればOKですか?(基本的な質問で申し訳ありません。)

ロールバックセグメントの容量さえクリアされていれば上記処理だと絶対に問題ないと思ってよろしいでしょうか?

投稿日時 - 2006-08-16 21:09:56

あなたにオススメの質問