- PR -

原因を教えてください

1
投稿者投稿内容
NEO
大ベテラン
会議室デビュー日: 2005/10/02
投稿数: 104
投稿日時: 2006-07-01 17:59
SQL Server2000でストアドプロシージャを作っています。

大量のデータをUPDATEするプロシージャです。
ロジックは以下のようになっています。

(1) トランザクション開始。

(2) UPDATEしたいデータが入っているテーブルからデータをSELECT。

(3) UPDATE対象のテーブルをWITH XLOCKでSELECT。

(4) UPDATE対象のテーブルをUPDATE。

(5) UPDATEの履歴を取るため、履歴用のテーブルにレコードを追加。

(6) コミット。

(3)〜(5)をデータ件数分繰り返しています。

このストアドプロシージャを使って、2000件程度のデータの更新をしようとしたところ、
「ネットワークの一般エラーです。ネットワークのドキュメントを確認してください。」のエラーになりました。

(3)と(5)をやめたら出なくなったのですが、本当の原因は何なのかがいまいちわかりません。

(5)の処理は必要なので、削除するわけにはいきません。
(3)についても、排他をかけたい(後で実行した方がエラーになるようにしたい)ので残したいです。
1件ずつコミットすればいいかもしれないと思っているのですが、ループの途中で何らかのエラーが起こったときには、UPDATE全体をロールバックしたいので、コミットのタイミングを変えることは出来ません。

どなたか良い対策を教えてください。
TLC
大ベテラン
会議室デビュー日: 2005/05/31
投稿数: 152
お住まい・勤務地: 東京都
投稿日時: 2006-07-02 01:24
お疲れ様です。
TimberLandChapel です。

当該のエラーが発生する際に,
サーバーの物理マシンの再起動が発生していませんか?

・2000 SP3a
・統計情報の破損したデータテーブル

に複数の JOIN をかける負荷の高いクエリを発行した場合に,
同様のエラーで不具合(この場合サーバーの再起動と言う致命的な)が発生した経験があります。

・2000 SP4 にあげる
・データをフラットファイルにフルダンプして,新しくきれいなデータベースとしてロードしなおす

という対応で再現しなくなったことがあります。

直接の解決策にならないかもしれませんが,
もし試せるようでしたら,試してみてください。

----------
TimberLandChapel
http://blogs.timberlandchapel.com/blogs/timberlandchapel/
1

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