お世話になります。初めて質問させて頂きます。
あるテーブルに大量のデータがあるのですが、
「営業日」という列が「削除基準日」以下に該当すれば
削除しようとしています。
営業日の条件だけでは数百万件が該当するため、
ROWNUMを用いて1回のDELETE文で削除するのは最大3万件とし、
3万件削除の都度COMMITしています。
DELETE FROM 削除対象テーブル
WHERE 営業日<=削除基準日 AND ROWNUM<=30000;
COMMIT;
上記SQLで削除された件数が3万件未満になるまで、ループして発行するイメージです。
1回の処理(DELETE発行からCOMMIT完了までの処理)は、調子が良ければ数秒で終了します。
ところが上記SQLを何度も繰り返すと、途中で結果が戻ってこなくなります。
(1)削除対象テーブルは、別のセッションからはアクセスしておらず、別セッションでLOCK等は行っていません。
(2)結果が戻って来なくなったセッションを強制終了(alter system kill session 'sid,serial#';)後、10分程度何もせず、再開すると、削除は可能です。
(3)但し、(2)で再開しても再び何度目かのループで、結果が戻ってこなくなります。
上記のような問題には、どのように対応すれば良いでしょうか?
ご存知の方がおられたらアドバイスを頂ければと存じます。
なお環境はLinux版Oracle11.2.0.4.0です。
以上よろしくお願いします。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/19 16:26