
Обеспечивающий атомарность (или ее подобие), называется менеджером транзакций или диспетчером обработки транзакций (transaction processing monitor— TP-monitor), а ключевыми элементами в его выполнении служат операторы COMMIT и ROLLBACK.
Оператор COMMIT (зафиксировать) сигнализирует об успешном окончании транзакции. Он сообщает менеджеру транзакций, что логическая единица работы успешно завершена, база данных вновь находится (или будет находиться) в непротиворечивом состоянии, а все обновления, выполненные данной логической единицей работы, теперь могут быть "зафиксированы", т.е. сделаны постоянными.
Оператор ROLLBACK (откатить) сигнализирует о неудачном окончании транзакции. Он сообщает менеджеру транзакций, что произошла какая-то ошибка, база данных находится в противоречивом состоянии и следует выполнить "откат" всех проведенных при выполнении этой транзакции обновлений, т.е. они должны быть отменены.
Таким образом, в приведенном примере оператор COMMIT должен выполняться, если оба обновления прошли успешно, после чего выполненные в базе данных изменения станут постоянными. Если что-то не так, если обновление было прервано каким-либо условием ошибки, то выполняется оператор ROLLBACK и любые внесенные изменения отменяются.
Замечание. Даже если в последнем случае попытаться выполнить оператор COMMIT, то система, в принципе, все равно должна проверить соблюдение существующих ограничений целостности, обнаружить противоречивость возникшего состояния базы данных и принудительно выполнить откат. Однако следует быть реалистами и понимать, что система не всегда может знать обо всех уместных в каждой конкретной ситуации ограничениях, а потому выполнение оператора ROLLBACK по требованию пользователя следует считать необходимым. На момент написания этой книги коммерческие СУБД обладали лишь ограниченными возможностями проверки ограничений целостности в процессе фиксации транзакций.
Кстати, следует отметить, что реальные приложения могут не только модифицировать базу данных (или пытаться это сделать), но также отсылать пользователю некоторые сообщения о том, что произошло. В нашем примере можно отослать пользователю сообщение "Сведения о поставке введены" после выполнения операции COMMIT и сообщение "Ошибка — сведения о поставке не введены" в противном случае. Выдача сообщений, в свою очередь, имеет дополнительное значение для восстановления.