Распределенные транзакции
Транзакции, охватывающие несколько баз данных, называют Распределенными. Такие транзакции по своей природе достаточно сложны и требуют дополнительных знаний и навыков.
В Oracle 11g детали обработки транзакций скрыты посредством Связей базы данных, полностью квалифицирующих объекты. Сервер СУБД управляет этими транзакциями и полностью отвечает за целостность данных. Специальная инструкция advise определяет, должна ли транзакция откатываться или подтверждаться, если ее состояние в базе данных становится сомнительным. В IBM DB2 9.5 распределенные транзакции маркируются как DUOW (Distributed Unit Of Work — распределенная единица работы), при этом их координированием занимается диспетчер базы данных (Database Manager).
Распределенные транзакции предполагают двухэтапное выполнение инструкции commit, основанное на стандартном протоколе X/Open XA координации обработки DUOW. Это позволяет участвовать в транзакции гетерогенным источникам данных. К примеру, пакетный запрос может модифицировать таблицы в Oracle 11g, DB2 9.5 и Microsoft SQL Server 2008 в контексте одной транзакции. В Microsoft SQL Server 2008 задача управления распределенными транзакциями возлагается на координатор распределенных транзакций (MSDTC). (Могут быть задействованы и другие диспетчеры транзакций, совместимые с протоколом X/Open XA.) Распределенная транзакция должна начинаться явно инструкцией begin distributed transaction] . Распределенные транзакции должны минимизировать риск потери данных в случае сетевого сбоя. Реализация двухэтапного выполнения инструкции commit отличается в разных реализациях, однако имеет следующие общие черты. Подготовительный этап. Когда координатор транзакций получает инструкцию commit, он направляет ее всем диспетчерам ресурсов, вовлеченным в транзакцию, и те выполняют подготовку к подтверждению транзакции. Этап подтверждения. На этом этапе выполняется реальная фиксация изменений в базах данных; отчет об успешном подтверждении направляется диспетчеру транзакций. Когда все подтверждения получены, координатор отправляет уведомление клиентскому приложению. Если какой-либо из диспетчеров ресурсов не уведомил координатора об успешной фиксации изменений в своей базе, всем диспетчерам ресурсов отправляется команда rollback. Для выполнения отката после подтверждения транзакции диспетчеры ресурсов обычно используют журнал транзакций.