Механизм транзакций

Механизм транзакций является частью СУБД ЛИНТЕР. Он позволяет обеспечить целостность БД, как в случае нештатных ситуаций, так и в случае многопользовательской работы. Для обеспечения надежной работы клиентских приложений необходимо понимание работы этого механизма и принципов его использования.

Под транзакцией понимается группа операций, выполняющихся как неделимое целое. В некоторых источниках транзакцией называют не группу операций, а эффект, который они производят. Транзакции являются составной частью любой информационной системы, к которой предъявляются требования надежности и являются ее основными строительными блоками. Эти требования обеспечиваются следующими свойствами транзакций:

  • атомарность (неделимость). Гарантируется выполнение всей группы операций в случае удачного завершения транзакции и откат к состоянию до выполнения транзакции в случае сбоя или явного отката транзакции;

  • целостность (непротиворечивость). Транзакция переводит БД из одного непротиворечивого состояние в другое. При этом подразумевается, что клиентское приложение является правильно написанным;

  • изолированность. Для клиентского приложения создается иллюзия, что все остальные транзакции выполняются либо до, либо после его транзакции, что обеспечивает прозрачную работу в многопользовательском режиме;

  • устойчивость. При удачном завершении транзакции гарантируется сохранение результатов ее работы даже в случае последующего сбоя в работе СУБД.

Для управления транзакциями в СУБД ЛИНТЕР служат специальные команды CALL-интерфейса и SQL-запросы. Любая транзакция должна заканчиваться выполнением оператора COMMIT или ROLLBACK, которые соответственно производят окончательные действия по выполнению транзакции, с сообщением в случае логической ошибки, или производят откат всех действий, которые транзакция произвела. В случае сбоя в работе СУБД (например, отключение питания) после перезапуска СУБД для всех не завершившихся транзакций команда ROLLBACK подается автоматически. Во время выполнения транзакции производимые ею в БД изменения, как правило, не должны быть доступны другим транзакциям (клиентским приложениям), т.к. это может привести к проблеме использования данных, которые не являются окончательными («грязные» данные).