Гарантируется ли фиксация/откат транзакций распределенной базы данных?

У меня есть код приложения, который вставляет запись в локальную базу данных и запись в удаленную базу данных (через Oracle Database Link). Когда я фиксирую эту распределенную транзакцию, гарантируется ли, что и локальная, и удаленная базы данных будут зафиксированы или обе будут откатываться, или есть вероятность того, что удаленная может зафиксировать, но локальная фиксация завершится ошибкой (или наоборот)?


person aw crud    schedule 07.02.2011    source источник
comment
В чем был бы смысл распределенных транзакций, если бы они действовали так же, как независимые транзакции по отношению к каждому серверу? (допуская несоответствие фиксации/отката, о котором вы беспокоитесь)   -  person Damien_The_Unbeliever    schedule 07.02.2011
comment
@Damien_The_Unbeliever: Я согласен, но я просто не понимал, как можно учесть каждую возможность. Ответ Джонатана имеет смысл - кажется, что все еще есть случаи, когда что-то может зависнуть, если в одной системе произойдет катастрофический сбой, но подавляющее большинство ситуаций обрабатываются.   -  person aw crud    schedule 07.02.2011
comment
@Renderln - если у вас произошел катастрофический сбой диска (ов), на котором находятся ваши журналы транзакций, вы можете подумать, что фиксация прошла успешно, хотя на самом деле транзакция невосстановима, поэтому даже без вызова распределенных транзакций всегда есть крайние случаи.   -  person Damien_The_Unbeliever    schedule 07.02.2011


Ответы (1)


Я был бы удивлен, если бы Oracle не использовал эквивалент двухэтапного подтверждения ( 2PC), который гарантирует либо фиксацию, либо откат.

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

Есть альтернативы 2PC; конечный результат один и тот же - все фиксации или все откаты.

person Jonathan Leffler    schedule 07.02.2011
comment
Отдайте должное ответу Джонатана, вот ссылка от Oracle о распределенных транзакциях для получения дополнительной информации: ="nofollow noreferrer">download.oracle.com/docs/cd/B19306_01/server.102/b14231/ - person tbone; 23.02.2011