JdbcTemplate удаляет запись пакетами и фиксирует транзакцию

#java #database #transactions #db2 #batch-processing

Вопрос:

Я удаляю записи из таблицы, используемой JDBCTemplate в DB2, которая заполняет журналы транзакций, выдающие ошибку.

Удалить запрос:

 delete from table  where col = 'A' and not exist (  select 1 from table2 )  

Исключение:

 The transaction log for the database is full.. SQLCODE=-964, SQLSTATE=57011, DRIVER=4.21.29  

Это приведет к удалению 2,5 миллионов записей из таблицы.

Каков наилучший способ обработки этого исключения из кода.

Я подумываю о том, чтобы выбрать записи в объект на java, затем удалить их пакетами и зафиксировать транзакцию после каждого выполнения пакета удаления.

Комментарии:

1. Вы делаете это в производственной среде или во время разработки?

2. Если вы разделяете удаление на куски, вполне вероятно, что размер журнала не будет изменен. Обычно вам нужно сделать резервную копию после некоторых удалений, поэтому журнал будет пустым. Или увеличьте размер файла журнала, если это возможно.

3. сначала мы сделаем это в DEV, если получится.. мы запустим его в PROD

4. Я думаю, что файл журнала транзакций заполняется, потому что все удаления происходят в 1 транзакции. Если я буду делать это по частям после каждой пакетной фиксации или отката, это очистит журнал транзакций.

5. Я не думаю, что журнал работает именно так. Он должен содержать все изменения после последнего резервного копирования, чтобы его можно было «воспроизвести». В противном случае вы потеряете изменения.