Пакетная транзакция - PullRequest
       18

Пакетная транзакция

0 голосов
/ 12 октября 2011

Допустим, в базе данных есть 100 записей для пакетного задания, когда пакетное задание запускается и берет эти 100 записей и затем начинает обработку. Если во время процесса возникает ошибка в 10-й записи, я должен откатить все 9 записей, которые уже были обработаны.

Как мы можем разработать этот сценарий ??? Ваши предложения приветствуются.

Ответы [ 3 ]

0 голосов
/ 03 ноября 2011

Я полагаю, что вы спрашиваете , если , вы должны откатить успешные записи, если ошибка происходит в процессе пакетной обработки.

Вы хотите, чтобы обновления вашей БД происходили в транзакциях вспособ, который делает записи базы данных непротиворечивыми и законными (в отношении БД и бизнес-правил) после того, как каждая транзакция зафиксирована или откатана.

Если каждый элемент в вашем списке из 100 записей может быть обработан и записан индивидуально, то яРекомендуется использовать какой-нибудь флаг (это также может быть поле состояния), чтобы указать, была ли обработана каждая запись, а затем просмотреть все записи, чтобы обновить каждую.Если вы столкнулись с ошибкой, обратите внимание, что где-то (файл журнала, исключение, таблица ошибок ... ваш вызов) и двигаться дальше.Когда вы закончите, вы запишете, какие записи были успешными, а какие - нет.После этого вы сможете вернуться и исправить все, что вызвало проблему (-и) на плохих записях, и повторно обработать пропущенные записи.

Если все 100 ваших записей будут успешными или неуспешными вместе, то вынужно обернуть ваши обновления в транзакцию, чтобы все они успешно выполнялись или терпели неудачу как единое целое.Это будет работать для десятков записей или (может быть) сотен записей, но попытка масштабирования до тысячи записей в одной транзакции может создать проблемы с масштабируемостью (проблемы с производительностью и конфликтами), поэтому вам нужно другое решение для шаблонавот так.

0 голосов
/ 08 января 2012

Взгляните на SAVEPOINTS - они в основном допускают транзакции внутри транзакций.Таким образом, вы можете сделать довольно много работы, сделать SAVEPOINT и сделать больше работы, только откатившись до последней точки сохранения.Если что-то пойдет не так, вы можете просто откатить всю транзакцию назад.

0 голосов
/ 12 октября 2011

Возможна разная степень детализации транзакции. Java (JTA) допускает несколько записей в одном коммите.

  1. Открытая транзакция
  2. запись записи
  3. запись записи
  4. запись записи
  5. ошибка
  6. откат

Большинство баз данных также поддерживают транзакции, которые могут обрабатывать несколько строк или записей.

Это очень часто встречается.

...