Db2でDELETEのSQL文を実行し、削除対象の件数が多すぎると、以下のエラーが発生してしまう。
DB21034E コマンドが、有効なコマンド行プロセッサー・コマンドでないため、 SQL
ステートメントとして処理されました。 SQL 処理中に、次のエラーが返されました。
SQL0964C データベースのトランザクション・ログがいっぱいです。 SQLSTATE=57011
インターネットで対策を調べた。
参考URL:
対策1ではテーブルの全データ削除、対策2-aではDb2の設定変更なので、今回は対策2-bを実施。
$ db2 "DELETE FROM (SELECT * FROM 表名 WHERE 条件 FETCH FIRST 件数 ROWS ONLY)"
元のSQLに上記の赤字を追加するだけで削除処理ができた。後シェルのループを使えば、一気に削除することが可能になる。