Db2で大量のデータを削除する

Db2でDELETEのSQL文を実行し、削除対象の件数が多すぎると、以下のエラーが発生してしまう。

DB21034E コマンドが、有効なコマンド行プロセッサー・コマンドでないため、 SQL
ステートメントとして処理されました。 SQL 処理中に、次のエラーが返されました。
SQL0964C データベースのトランザクション・ログがいっぱいです。 SQLSTATE=57011

インターネットで対策を調べた。

参考URL:

www-01.ibm.com

対策1ではテーブルの全データ削除、対策2-aではDb2の設定変更なので、今回は対策2-bを実施。

$ db2 "DELETE FROM (SELECT * FROM 表名 WHERE 条件 FETCH FIRST 件数 ROWS ONLY)"

元のSQLに上記の赤字を追加するだけで削除処理ができた。後シェルのループを使えば、一気に削除することが可能になる。