Введение в дисциплину «Безопасность систем баз данных». Теоретические основы построения реляционных баз данных. Верификация баз данных и проведение аудита в СБД. Распределенные базы данных, страница 76

·  глобальный системный каталог – содержит сведения обо всей распределенной БД в целом, включая информацию о фактическом распределении данных и о связях между локальными СУБД; в отличие от локальных системных каталогов, глобальный может быть распределен;

·  координатор распределенных транзакций – управляет распределенными транзакциями клиентов.

Если в состав СУРБД входят локальные СУБД одного и того же типа (например, несколько серверов SQL Server одинаковой версии), система называется гомогенной. Гомогенные системы достаточно просто проектируются и сопровождаются. Кроме того, их можно легко наращивать, подключая к уже существующей распределенной системе новую СУБД.

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

Чтобы обеспечить единообразный, стандартизованный доступ к гетерогенному источнику данных, в распределенной системе поддерживаются специальные методы трансляции пользовательских запросов в нужный вид. Согласно позиции комитета Open Group, пользовательские запросы должны записываться на SQL, и их результаты – интерпретироваться, как реляционные наборы данных. При передаче запросов конкретному источнику данных происходит их трансляция в приемлемый для данного источника формат. На источнике данных происходит выполнение запроса, результат обработки отправляется клиенту и преобразуется по пути в реляционный вид.

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

Распределенная транзакция – это совокупность двух или более локальных транзакций (субтранзакций), выполняемых одновременно в различных БД. Сказанное относится и к БД, размещенным на одном и том же сервере. Частным случаем распределенной транзакции является распределенный запрос.

Каждая субтранзакция  выполняется самостоятельно и не подозревает о существовании других локальных транзакций и даже о том, что она является частью распределенной транзакции. Чтобы синхронизировать все действия, выполняемые субтранзакциями, СУБД используют специальный компонент-координатор. В Microsoft SQL Server  этот компонент представляет собой службу Windows, называемую координатором распределенных транзакций (Microsoft Distributed Transaction Coordinator, MSDTC).

Работу координатора распределенных транзакций можно рассмотреть на следующем примере (рис. 9.1). Имеется три сервера, на каждом из них – по координатору. Пересылка данных происходит только через компонент передачи (сами координаторы не взаимодействуют друг с другом напрямую).

Рисунок 9.1 – Схема координации выполнения распределенных транзакций

Пусть распределенная транзакция запускается на первом узле. Последовательность обработки будет следующая.

1. Координатор Узла 1 делит транзакцию на субтранзакции, исходя из данных, расположенных в глобальном системном каталоге.

2. Описания соответствующих субтранзакций отправляются узлам 2 и 3 через компонент передачи данных.

3. Координаторы организуют выполнение соответствующих субтранзакций.

4. Результаты выполнения субтранзакций на узлах 2 и 3 отправляются координатору узла 1.

Как и в случае с обычными транзакциями, существуют два пути завершения распределенных транзакций: фиксация и откат. При откате распределенной транзакции не возникает проблем с координацией: каждый узел распределенной системы рано или поздно получает команду на откат своей субтранзакции.

С фиксацией дела обстоят сложнее. Локальные СУБД не должны фиксировать субтранзакции до тех пор, пока не будет известно, что все субтранзакции можно фиксировать. В противном случае будет нарушена атомарность распределенной транзакции: часть субтранзакций будет принята, а часть – отменена. Чтобы не возникало данной проблемы, фиксация распределенных транзакций выполняется в соответствии с двухфазным протоколом фиксации (2PC, Two Phase Commit protocol).