Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5820 / 381 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00

Лекция 25: Службы компонентов и Microsoft Distributed Transaction Coordinator

Microsoft Distributed Transaction Coordinator (MS DTC)

Как уже говорилось, MS DTC – это составная часть служб компонентов Windows 2000 Component Services. (Последняя версия MS DTC вошла в состав SQL Server 7.) В Component Services также включена технология COM+. COM+ используется при необходимости нетранзакционной передачи сообщений, а MS DTC – при необходимости транзакционной передачи.

MS DTC в основном используется для управления распределенными транзакциями. Распределенной называется транзакция, в которой используются данные из двух или более баз данных. Эти базы данных могут находиться в отдельных компьютерных системах или в одной системе. Транзакции между таблицами одной базы данных не считаются распределенными транзакциями. Транзакции между базами данных одной системы можно инициировать как стандартные (нераспределенные) транзакции; однако SQL Server выполняет их как распределенные транзакции.

Обзор MS DTC

Многим приложениям требуется координация транзакций, использующих несколько источников данных. Координация необходима, когда несколько источников данных включаются в одну транзакцию, поскольку это гарантирует выполнение данной транзакции с поддержкой свойства атомарности. Иными словами, координация обеспечивает успешное завершение всех отдельных транзакций (использующих свои источники данных), которые входят в одну большую транзакцию, либо невыполнение всех этих транзакций. Если одна часть транзакции успешно завершена, а другая не выполнена, это может привести к проблемам несогласованности и потерям данных. Служба MS DTC обеспечивает для вас эту координацию. (Без этой службы разработчикам пришлось бы заботиться об определенных схемах согласования распределенных транзакций в своих приложениях.) MS DTC делает это, выполняя двухфазное фиксирование транзакций.

Двухфазное фиксирование транзакций не является какой-то новой технологией и применяется не только для SQL Server. Технология двухфазного фиксирования транзакций известна уже много лет, но ее надежность и производительность были улучшены. Кроме того, повышена гибкость двухфазного фиксирования транзакций. Например, распределенную транзакцию, использующую двухфазное фиксирование, можно выполнять между базой данных SQL Server и базой данных Oracle. Возможность выполнения такой транзакции определяется тем, что в обеих базах данных поддерживается двухфазное фиксирование транзакций и такие протоколы доступа, как ODBC.

Двухфазное фиксирование – это операция фиксирования, разбитая на две части: первая часть – это фаза подготовки, после которой следует фаза фиксирования. Эти фазы инициируются из приложения командой COMMIT, которая указывает службе MS DTC, что нужно выполнить двухфазное фиксирование транзакций. MS DTC координирует эту операцию с системами, участвующими в этой распределенной транзакции, осуществляя взаимодействие с SQL Server в своей системе и с MS DTC в других системах. Компоненты MS DTC, управляющие двухфазным фиксированием, называются диспетчерами ресурсов (resource managers).

Передавая команду COMMIT, MS DTC указывает диспетчерам ресурсов, что нужно выполнить фазу подготовки операции двухфазного фиксирования. На фазе подготовки выполняются все функции, необходимые для того, чтобы произошло фиксирование, включая очистку буферов и внесение записей в журнал транзакций. Операции, выполняемые на этом этапе, аналогичны операциям, входящим в стандартную операцию фиксирования. Единственным отличием является то, что на фазе подготовки SQL Server не помечает транзакцию как фиксированную и не освобождает ресурсы и блокировки, используемые данной транзакцией. После завершения всех действий, необходимых для подготовки транзакции к фиксированию в источнике данных, диспетчер ресурсов для этого источника данных возвращает сигнал успешного завершения диспетчеру транзакций. После получения сигналов успешного завершения ото всех источников данных можно инициировать фазу фиксирования.

На фазе фиксирования происходит фактическое фиксирование в распределенных системах. Если все диспетчеры ресурсов сигнализируют об успешном завершении фазы фиксирования, в приложение отправляется соответствующее уведомление. Если один из диспетчеров ресурсов сообщает о неуспешном завершении, то остальным диспетчерам ресурсов отправляется уведомление о том, что нужно выполнить операцию отката. Затем сообщение об этом передается в приложение. В случае прерывания связи между системами в какой-то момент истекает время тайм-аута транзакции и тоже инициируется откат. При отказе любой системы, участвующей в распределенной транзакции, все системы, участвующие в этой транзакции, выполняют откат.