Распределенные транзакции

Сервер InterBase предоставляет возможность создавать и исполнять транзакции одновременно в нескольких базах данных как на одном сервере, так и на разных серверах. Например, первая часть транзакции исполняется в первой базе данных.

После успешного выполнения первой части транзакции база данных переходит в специально предусмотренное состояние Prepared, т. е. база данных готова к исполнению метода Commit (фиксации в базе данных сделанных изменений). Сама транзакция, частично выполненная, помечается на листе фиксации транзакций как Limbo (неопределенное состояние). Далее организуется выполнение второй (затем последующих) части транзакции в другой (следующей) базе данных. В случае успешного выполнения второй части транзакции вторая база данных переходит в состояние Prepared и т. д., до тех пор, пока вся транзакция не будет исполнена. После этого в том же порядке во всех базах данных исполняется метод Commit. Но если при выполнении любой части транзакции будет обнаружена ошибка (и возбуждена исключительная ситуация), то все ранее успешно выполненные части транзакции (в разных базах данных) будут откачены назад, и все базы данных вернутся в начальное целостное состояние.

Если во время выполнения распределенной транзакции произойдет разрыв соединения с любой из баз данных, задействованных в транзакции, то ранее выполненные части транзакции и помеченные как Limbo сохранят свои версии записей на соответствующих листах в своих базах данных и, тем самым, увеличат количество «мусора». Сведения об аварийно закончившейся транзакции также остаются на листе фиксации транзакций с пометкой Limbo. Разорванное соединение с базой данных восстанавливается, и распределенная транзакция в полном виде исполняется заново. Ранее произведенный «мусор» так и остается до очередной «уборки».

 
< Пред   СОДЕРЖАНИЕ     След >