Организация удаленного доступа к распределенным базам данных
1. Необходимо, чтобы база данных в любой момент времени правильно
отражала состояние предметной области - данные должны быть взаимно
непротиворечивыми.
2. База данных должна отражать некоторые правила предметной области,
законы, по которым она функционирует (business rules).
3. Необходим постоянный контроль за состоянием базы данных,
отслеживание всех изменений, и адекватная реакция на них.
4. Необходимо, чтобы возникновение некоторой ситуации в базе данных
четко и оперативно влияло на ход выполнения прикладной программы.
Многие программы требуют оперативного оповещения о всех происходящих
в базе данных изменениях.
Важная проблема СУБД - контроль типов данных. Тип данных определяется
при создании таблицы. Каждому столбцу присваивается один из стандартных
типов данных, разрешенных в СУБД. Как правило, это данные стандартных типов
- числа, целые и вещественные, строки символов, а также данные типа "дата",
"время" и "денежная единица".
Идеи, реализованные в СУБД третьего поколения, заключаются в том, что
знания выносятся за рамки прикладных программ и оформляются как объекты
базы данных. Функции применения знаний начинает выполнять непосредственно
сервер баз данных.
Такая архитектура является воплощением концепции активного сервера.
Она реализуется четырьмя сущностями:
. процедурами базы данных;
. правилами (триггерами);
. событиями в базе данных;
. типами данных, определяемыми пользователем;
1.2.3 Хранимые процедуры
В различных СУБД они носят название хранимых (stored), присоединенных,
разделяемых и т.д. Ниже будем пользоваться терминологией, принятой в СУБД
InterBase.
Использование процедур базы данных преследует четыре цели:
. Обеспечивается новый независимый уровень централизованного контроля
доступа к данным, осуществляемый администратором базы данных.
. Одна процедура может использоваться несколькими прикладными
программами - это позволяет существенно сократить время написания
программ за счет оформления их общих частей в виде процедур базы
данных. Процедура компилируется и помещается в базу данных,
становясь доступной для многократных вызовов. Так как план ее
выполнения определяется единожды при компиляции, то при последующих
вызовах процедуры фаза оптимизации пропускается, что существенно
экономит вычислительные ресурсы системы.
. Использование процедур баз данных позволяет значительно снизить
трафик сети в системах с архитектурой "клиент-сервер". Прикладная
программа, вызывающая процедуру, передает серверу лишь ее имя и
параметры. В процедуре, как правило, концентрируются повторяющиеся
фрагменты из нескольких прикладных программ. Если бы эти фрагменты
остались частью программы, они загружали бы сеть посылкой полных SQL-
запросов.
. Процедуры базы данных в сочетании с правилами, предоставляют
администратору мощные средства поддержки целостности базы данных.
В современных СУБД процедура хранится непосредственно в базе данных и
контролируется ее администратором. Она имеет параметры и возвращает
значение. Процедура базы данных создается оператором CREATE PROCEDURE
(СОЗДАТЬ ПРОЦЕДУРУ) и содержит определения переменных, операторы SQL
(например, SELECT, INSERT), операторы проверки условий (IF/THEN/ ELSE)
операторы цикла (FOR, WHILE), а также некоторые другие.
1.2.4 Правила (триггеры)
Механизм правил (триггеров) позволяет программировать обработку
ситуаций, возникающих при любых изменениях в базе данных. Правило придается
таблице базы данных и применяется при выполнении над таблицей операций
включения, удаления или обновления строк.
Применение правила заключается в проверке сформулированных в нем
условий, при выполнении которых происходит вызов специфицированной внутри
правила процедуры базы данных. Важно, что правило может быть применено как
до, так и после выполнения обновления, следовательно, возможна отмена
операции.
Таким образом, правило позволяет определить реакцию сервера на любое
изменение состояния базы данных. Правила (так же, как и процедуры) хранятся
непосредственно в базе данных независимо от прикладных программ. Одна из
целей механизма правил - отражение некоторых внешних правил деятельности
организации.
Важнейшая цель механизма правил - обеспечение целостности базы данных. Один
из аспектов целостности - целостность по ссылкам (referential integrity) -
относится к связи двух таблиц между собой. Эта связь поддерживается
внешними ключами. Механизм правил позволяет реализовать и более общие
ограничения целостности.
1.2.5 Механизм событий
Механизм событий в базе данных (database events) позволяет прикладным
программам и серверу базы данных уведомлять другие программы о наступлении
в базе данных определенного события и тем самым синхронизировать их работу.
Операторы языка SQL, обеспечивающие уведомление, называют сигнализаторами
событий в базе данных (database event alerters). Функции управления
событиями целиком ложатся на сервер базы данных.
Механизм событий используется следующим образом. Вначале в базе данных
для каждого события создается флажок, состояние которого будет оповещать
прикладные программы о том, что некоторое событие имело место (оператор
CREATE DBEVENT - СОЗДАТЬ СОБЫТИЕ). Далее, во все прикладные программы, на
ход выполнения которых может повлиять это событие, включается оператор
REGISTER DBEVENT (ЗАРЕГИСТРИРОВАТЬ СОБЫТИЕ), который оповещает сервер базы
данных, что программа заинтересована в получении сообщения о наступлении
события. Теперь любая прикладная программа или процедура базы данных может
вызвать событие оператором RAISE DBEVENT (ВЫЗВАТЬ СОБЫТИЕ). Как только
событие произошло, каждая зарегистрированная программа может получить его,
для чего она должна запросить очередное сообщение из очереди событий
(оператор GET DBEVENT - ПОЛУЧИТЬ СОБЫТИЕ) и запросить информацию о событии,
в частности, его имя (оператор SQL INQUIRE_SQL).
1.3 Обработка распределенных данных
Одна из главных особенностей современных информационных систем -
распределенный характер. Возрастает их масштаб, они охватывают все больше
число точек по всему миру. Современный уровень принятия решений,
оперативное управление информационными ресурсами требует все большей их
децентрализации. Информационные системы находятся в постоянном развитии - в
них добавляются новые сегменты, расширяется диапазон функций уже
действующих.
Главная проблема таких систем - организация обработки распределенных
данных. Данные находятся на компьютерах различных моделей и производителей,
функционирующих под управлением различных операционных систем, а доступ к
данным осуществляется разнородным программным обеспечением. Сами компьютеры
территориально удалены друг от друга и находятся в различных географических
точках планеты.
Ответом на задачи реальной жизни стали две технологии: технология
распределенных баз данных (Distributed Database) и технология тиражирования
данных (Data Replication).
Под распределенной базой данных подразумевают базу, включающую
фрагменты из нескольких баз данных, которые располагаются на различных
узлах сети компьютеров, и, возможно, управляются различными СУБД.
Распределенная база данных выглядит с точки зрения пользователей и
прикладных программ как обычная локальная база. В этом смысле слово
"распределенная" отражает способ организации базы данных, но не внешнюю ее
характеристику ("распределенность" базы не должна быть видна извне).
В отличие от распределенных баз, тиражирование данных предполагает
отказ от их физического распределения и опирается на идею дублирования
данных в различных узлах сети компьютеров.
Ранее были рассмотрены четыре модели технологии "клиент-сервер".
Традиционной и наиболее популярной является модель доступа к удаленным
данным (RDA-модель). В соответствии с этой моделью, имеется компьютер, на
котором запускаются программы переднего плана (в которых реализованы как
функции интерфейса с пользователем, так и прикладные функции) - клиент
(называемый обычно локальным узлом - local node), соединенный в сети с
компьютером, на котором выполняется сервер базы данных и находится сама
база данных (обычно его называют удаленным узлом - remote node). Все
проблемы, возникающие при взаимодействии клиента и сервера, должен решать
специальный компонент СУБД, называемый коммуникационным сервером
(Communication Server, DBMS Server Net). Для поддержки взаимодействия
клиента и сервера он должен функционировать на удаленном узле; в то же
время на локальном узле должна выполняться программа связи,
взаимодействующая с коммуникационным сервером (DBMS Client Net).
В основу взаимодействия прикладных программ - клиентов и сервера базы
данных, положен ряд фундаментальных принципов, определяющих функциональные
возможности современных СУБД в части, касающейся сетевого взаимодействия и
распределенной обработки данных, среди которых:
. Прозрачность расположения;
. Прозрачность сети;
. Автоматическое преобразование форматов данных;
. Автоматическая трансляция кодов;
. Межоперабельность;
. Прозрачность расположения.
Прозрачный (для пользователя) доступ к удаленным данным предполагает
использование в прикладных программах такого интерфейса с сервером БД,
который позволяет переносить данные в сети с одного узла на другой, не
требуя при этом модификации текста программы. Иными словами, доступ к
информационным ресурсам должен быть полностью прозрачен относительно
расположения данных.
Любой пользователь или любая прикладная программа оперирует с одной
или несколькими базами данных. В том случае, когда прикладная программа и
сервер БД выполняются на одном и том же узле, проблемы расположения не
возникает. Для получения доступа к базе данных, пользователю или программе
достаточно указать имя базы.
Однако в том случае, когда прикладная программа запускается на
локальном узле, а база данных находится на удаленном, возникает проблема
идентификации удаленного узла. Для того, чтобы получить доступ к базе
данных на удаленном узле, необходимо указать имя удаленного узла и имя базы
данных. Если использовать жестко фиксированное имя узла в паре "имя_узла,
имя_БД", то прикладная программа становится зависимой от расположения БД.
Например, обращение к БД "host::stock", где первый компонент есть имя узла,
будет зависимым от расположения.
Одно из возможных решений этой проблемы состоит в использовании
виртуальных имен узлов. Управление ими обеспечивается специальным
программным компонентом СУБД - сервером имен (Name Server), который
адресует запросы клиентов к серверам.
При установке компонентов DBMS Client Net на локальных узлах
выполняется процедура идентификации узлов, когда реальному имени удаленного
узла ставится в соответствие виртуальное имя, которое затем используется
при обращении к базе данных. Если база данных перенесена на другой узел, то
никаких изменений в прикладную программу вносить не нужно - достаточно лишь
поставить в соответствие виртуальному имени имя нового узла.
Клиент и сервер взаимодействуют по сети с конкретной топологией; для
поддержки взаимодействия всегда используется определенный протокол.
Следовательно, оно должно быть организовано таким образом, чтобы
обеспечивать независимость как от используемого сетевого аппаратного
обеспечения, так и от протоколов сетевого обмена. Чтобы обеспечить
прозрачный доступ пользователей и программ к удаленным данным в сети,
объединяющей разнородные компьютеры, коммуникационный сервер должен
поддерживать как можно более широкий диапазон сетевых протоколов (TCP/IP,
DECnet, SNA, SPX/IPX, NetBIOS, AppleTalk, и др.).
Как только несколько компьютеров различных моделей под управлением
различных операционных систем соединяются в сеть, сразу возникает вопрос о
согласовании форматов представления данных. Действительно, в сети могут
быть компьютеры, отличающиеся разрядностью (16-ти, 32-х и 64-х разрядные
процессоры), порядком следования байт в слове, представлением чисел с
плавающей точкой и т.д. Задача коммуникационного сервера состоит в том,
чтобы на уровне обмена данными обеспечить согласование форматов между
удаленным и локальным узлами с тем, чтобы данные, извлеченные сервером из
базы на удаленном узле и переданные по сети, были правильно истолкованы
прикладной программой на локальном узле.
В неоднородной компьютерной среде при взаимодействии клиента и сервера
возникает также задача трансляции кодов. Сервер может работать с одной
кодовой таблицей (например, EBCDIC), клиент - с другой (например, ASCII),
при этом происходит рассогласование трактовки кодов символов. Поэтому, если
на локальном узле используется одна кодовая таблица, а на удаленном -
другая, то при передаче запросов по сети и при получении ответов на них
необходимо обеспечить трансляцию кодов. Решение этой задачи также ложится
на коммуникационный сервер.
В реальной жизни сервер базы данных должен обслуживать одновременно
множество запросов от клиентов - следовательно, в один момент времени таких
пар «клиент-сервер» может быть несколько. Таким образом, все проблемы
взаимодействия должны решаться коммуникационным сервером для всех этих
взаимодействующих пар.
Системы с архитектурой "один-к-одному" для обслуживания сервером базы
данных одновременно множества клиентов вынуждены загружать отдельный
коммуникационный сервер для каждой пары "клиент-сервер". В результате
нагрузка на операционную систему увеличивается, резко возрастает общее
число ее процессов, расходующих вычислительные ресурсы. Это - один из
недостатков архитектуры "один-к-одному".
Именно поэтому для современных распределенных СУБД важно иметь
многопотоковый коммуникационный сервер, который берет на себя задачи
сетевой поддержки множества клиентов, одновременно обращающихся к серверу.
На каждом узле сети он поддерживает множество пар соединений "клиент-
сервер" и позволяет существовать одновременно множеству независимых сеансов
работы с базами данных.
С точки зрения клиента доступ к распределенной базе данных должен
выглядеть точно так же, как доступ к централизованной БД. При организации
прозрачного доступа к распределенной базе данных возникают следующие
задачи:
. Управление именами в распределенной среде;
. Оптимизация распределенных запросов;
. Управление распределенными транзакциями.
Первая решается путем использования глобального словаря данных. Он
хранит информацию о распределенной базе: расположение данных, возможности
других СУБД (если используется шлюз), сведения о скорости передачи по сети
с различной топологией и т.д.
Глобальный словарь данных - это механизм отслеживания расположения
объектов в распределенной БД. Данные могут храниться на локальном узле, на
удаленном узле, или на обоих узлах - их расположение должно оставаться
прозрачным как для конечного пользователя, так и для программ. Не нужно
явным образом указывать место расположения данных - программа должна быть
полностью независима от того, на каких узлах размещаются данные, с которыми
она оперирует.
Что касается второй задачи, то она требует интеллектуального решения.
Распределенный запрос затрагивает несколько баз данных на различных узлах,
причем объемы выборки могут быть весьма различными. Возможны ситуации,
когда результирующая таблица запроса представляет собой объединение (join)
двух таблиц, причем одна из них находится на локальном узле, а другая - на
удаленном. Данный запрос - распределенный, так как затрагивает таблицы,
принадлежащие различным базам данных. Для его нормального выполнения
необходимо иметь обе исходные таблицы на одном узле. Следовательно, одна из
таблиц должна быть передана по сети. Очевидно, что это должна быть таблица
меньшего размера. Поэтому оптимизатор распределенных запросов обязательно
должен учитывать размеры таблиц. В противном случае запрос будет
выполняться непредсказуемо долго.
Помимо размера таблиц, оптимизатор распределенных запросов должен
учитывать также множество дополнительных параметров, в том числе статистику
распределения данных по узлам, объем данных, передаваемых между узлами,
скорость коммуникационных линий, структуры хранения данных, соотношение
производительности процессоров на разных узлах и т.д. Все эти данные как
раз и содержатся в глобальном словаре данных.
Решение всех трех задач, возложено на специальный компонент СУБД -
сервер распределенных баз данных (Distributed Database Server).
Если база данных расположена на одном узле, а сервер БД и прикладная
программа выполняются там же, то не требуется ни коммуникационный сервер,
ни сервер распределенной БД. Когда же прикладная программа выполняется на
локальном узле, БД находится на удаленном узле и там же выполняется сервер
БД, то на удаленном узле необходим коммуникационный сервер, а на локальном
- сервисная коммуникационная программа.
Если локальные БД расположены на нескольких узлах, то для доступа к
распределенной БД необходим и сервер распределенной БД, и коммуникационный
сервер.
Важнейшее требование к современным СУБД - межоперабельность (или
интероперабельность). Это качество можно трактовать как открытость системы,
позволяющую встраивать ее как компонент в сложную разнородную
распределенную среду. Межоперабельность достигается как за счет
использования интерфейсов, соответствующих международным, национальным и
промышленным стандартам, так и за счет специальных решений.
Для СУБД это качество означает следующее:
. способность приложений, созданных средствами разработки данной СУБД,
оперировать над базами данных в "чужом" формате так, как будто это
собственные базы данных;
. свойство СУБД, позволяющее ей служить в качестве поставщика данных
для любых приложений, созданных средствами разработки третьих фирм,
поддерживающих некоторый стандарт обращения к базам данных.
Первое достигается использованием шлюзов, второе - использованием
интерфейсов ODBC (Open Database Connectivity) и BDE (Borland Database
Engine).
Современные информационные системы требуют доступа к разнородным базам
данных. Это означает, что в прикладной программе для реализации запросов к
базам данных должны быть использованы такие средства, чтобы запросы были
понятны различным СУБД, как реляционным, так и опирающимся на другие модели
данных. Одним из возможных путей является обобщенный набор различных
диалектов языка SQL.
Существует альтернатива технологии распределенных БД - тиражирование
данных. Принципиальное отличие технологии тиражирования данных от
технологии распределенных баз данных (которую часто для краткости называют
технологией STAR) заключается в отказе от распределенных данных. Ее суть
состоит в том, что любая БД (как для СУБД, так и для работающих с ней
пользователей) всегда является локальной; данные всегда размещаются
локально на том узле сети, где они обрабатываются; все транзакции в системе
завершаются локально.
Тиражирование данных - это асинхронный перенос изменений объектов
исходной базы данных (source database) в БД, принадлежащие различным узлам
распределенной системы. Функции тиражирования данных выполняет специальный
модуль СУБД - сервер тиражирования данных, называемый репликатором
(replicator). Его задача - поддержка идентичности данных в принимающих
базах данных (target database) данным в исходной БД. Сигналом для запуска
репликатора служит срабатывание триггера, перехватывающего любые изменения
тиражируемого объекта БД. Возможно и программное управление репликатором
посредством сигнализаторов о событиях в базе данных.
В качестве базиса для тиражирования выступает транзакция к БД. В то же
время возможен перенос изменений группами транзакций, периодически или в
некоторый момент времени, что дает возможность исследовать состояние
принимающей БД на определенный момент времени.
Детали тиражирования данных полностью скрыты от прикладной программы;
ее функционирование никак не зависит от работы репликатора, который целиком
находится в ведении администратора БД. Следовательно, для переноса
программы в распределенную среду с тиражируемыми данными не требуется ее
модифицировать.
Особенность технологии распределенных БД - синхронное завершение
транзакций одновременно на нескольких узлах распределенной системы, то есть
синхронная фиксация изменений в распределенной БД. Недостаток технологии
STAR - жесткие требования к производительности и надежности каналов связи.
Если БД распределена по нескольким территориально удаленным узлам,
объединенным медленными и ненадежными каналами связи, а число одновременно
работающих пользователей составляет десятки и выше, то вероятность того,
что распределенная транзакция будет зафиксирована в обозримом временном
интервале, становится чрезвычайно малой. В таких условиях обработка
распределенных данных практически невозможна.
Реальной альтернативой технологии STAR является технология
тиражирования данных, не требующая синхронной фиксации изменений. В
действительности далеко не во всех задачах требуется обеспечение
идентичности БД на различных узлах в любое время. Достаточно поддерживать
тождественность данных лишь в определенные критичные моменты времени.
Следовательно, можно накапливать изменения в данных в виде транзакций в
одном узле и периодически копировать эти изменения на другие узлы.
Преимущества технологии тиражирования данных:
1. Данные всегда расположены там, где они обрабатываются -
следовательно, скорость доступа к ним существенно увеличивается.
2. Передача только операций, изменяющих данные (а не всех операций
доступа к удаленным данным, как в технологии STAR), и к тому же в
асинхронном режиме позволяет значительно уменьшить трафик.
3. Со стороны исходной БД для принимающих БД репликатор выступает как
процесс, инициированный одним пользователем, в то время как в
физически распределенной среде с каждым локальным сервером работают
все пользователи распределенной системы, конкурирующие за ресурсы
друг с другом.
4. Никакой продолжительный сбой связи не в состоянии нарушить передачу
изменений. Дело в том, что тиражирование предполагает буферизацию
потока изменений (транзакций); после восстановления связи передача
возобновляется с той транзакции, на которой тиражирование было
прервано.
Технология тиражирования данных имеет и недостатки, вытекающие из ее
специфики. Например, невозможно полностью исключить конфликты между двумя
версиями одной и той же записи. Они могут возникнуть, когда вследствие
асинхронности передачи данных два пользователя на разных узлах исправят
одну и ту же запись в тот момент, пока изменения в данных из первой базы
данных еще не были перенесены во вторую. Следовательно, при проектировании
распределенной среды с использованием технологии тиражирования данных
необходимо предусмотреть конфликтные ситуации и запрограммировать
репликатор на какой-либо вариант их разрешения.
1.4 Взаимодействие с PC-ориентированными СУБД
Первоначально профессиональные СУБД создавались для мощных
высокопроизводительных платформ - IBM, DEC, Helwett-Packard, Sun. Но затем,
учитывая все возрастающую популярность и широкое распространение
персональных компьютеров, разработчики приступили к переносу (портированию)
СУБД в операционные среды desktop-компьютеров (OS/2, NetWare, UnixWare, SCO
UNIX).
В настоящее время большинство компаний - поставщиков СУБД развивает
три направления своих систем. Во-первых, совершенствование СУБД для
корпоративных информационных систем, которые характеризуются большим числом
пользователей (от 100 и выше), базами данных огромного объема (их часто
называют сверхбольшими базами данных - Very Large Data Base - VLDB),
смешанным характером обработки данных (решение задач оперативной обработки
транзакций и поддержки принятия решений) и т.д. Это - традиционная область
mainframe-систем и приближающихся к ним по производительности RISC-
компьютеров.
Другое направление - СУБД, поддерживающие так называемые рабочие
группы. Это направление характеризуется относительно небольшим количеством
пользователей с сохранением, тем не менее, всех "многопользовательских"
качеств. Системы этого класса ориентированы преимущественно на "офисные"
применения, не требующие специальных возможностей. Так, большинство
современных многопользовательских СУБД имеют версии системы,
функционирующие в сетевой операционной системе Novell NetWare. Ядро СУБД
оформлено здесь как загружаемый модуль NetWare (NetWare Loadable Module -
NLM), выполняющийся на файловом сервере. База данных также располагается на
файловом сервере. SQL-запросы поступают к ядру СУБД от прикладных программ,
которые запускаются на станциях сети - персональных компьютерах (отметим,
что, несмотря на использование файлового сервера, здесь мы имеем дело с RDA-
моделью).
Наконец, новый импульс в развитии получило направление настольных
(desktop) версий СУБД, ориентированных на персональное использование -
преимущественно в операционной среде MS Windows (системы этого класса
получили неформальное определение "light" или "local").
Стремление компаний - поставщиков СУБД иметь фактически по три
варианта своих систем, покрывающих весь спектр возможных применений,
выглядит для пользователей чрезвычайно привлекательно. Действительно, для
специалиста исключительно удобно иметь на своем портативном компьютере
локальную базу данных (постоянно используемую во время командировок) в том
же формате и обрабатываемую по тем же правилам, что и стационарную
корпоративную базу фирмы, куда собранные данные могут быть без труда
доставлены.
В последние годы (1987-94) в нашей стране было разработано множество
программ, ориентированных на использование СУБД типа PARADOX, FoxPRO, dBASE
IV, Clipper. При переходе на более мощную многопользовательскую СУБД у
пользователей возникает естественное желание интегрировать уже существующие
разработки в эту среду. Например, может возникнуть потребность хранить
локальные данные на персональном компьютере и осуществлять к ним доступ с
помощью системы FoxPRO, и одновременно иметь доступ к глобальной базе
данных под управлением СУБД Oracle. Организация такого доступа, когда
программа может одновременно работать и с персональной, и с
многопользовательской СУБД, представляет собой сложную проблему по
следующей причине.
Как известно, разработчики PC-ориентированных СУБД первоначально
использовали свой собственный интерфейс к базам данных, никак не учитывая
требования стандарта языка SQL. Лишь впоследствии они стали постепенно
включать в свои системы возможности работы с базой данных при помощи SQL. В
то же время для истинно многопользовательских СУБД интерфейс SQL -
фактический стандарт. При этом возникла задача согласования интерфейсов
СУБД различных классов. Она может решаться несколькими способами, но
большинство из них имеют частный характер. Рассмотрим наиболее общее
решение этой задачи.
Специалисты фирмы Microsoft разработали стандарт Open Database
Connectivity (ODBC). Он представляет собой стандарт прикладного
программного интерфейса прикладных (Application Programming Interface -
API) и позволяет программам, работающим в среде Microsoft Windows,
взаимодействовать (посредством операторов языка SQL) с различными СУБД, как
персональными, так и многопользовательскими, функционирующими в различных
операционных системах. Фактически, интерфейс ODBC универсальным образом
отделяет чисто прикладную, содержательную сторону приложений (обработка
электронных таблиц, статистический анализ, деловая графика) от собственно
обработки и обмена данными с СУБД. Основная цель ODBC - сделать
взаимодействие приложения и СУБД прозрачным, не зависящим от класса и
особенностей используемой СУБД (мобильным с точки зрения используемой
СУБД).
Отметим, что стандарт ODBC является неотъемлемой частью семейства
стандартов, облегчающих написание и обеспечивающих вертикальную открытость
приложений (WOSA - Windows Open Services Architecture - открытая
архитектура сервисов системы Windows).
Интерфейс ODBC обеспечивает взаимную совместимость серверных и
клиентских компонентов доступа к данным. Для реализации унифицированного
доступа к различным СУБД было введено понятие драйвера ODBC
(представляющего собой динамически загружаемую библиотеку).
ODBC-архитектура содержит четыре компонента:
. приложение;
. менеджер драйверов;
. драйверы;
. источники данных.
Роли среди них распределены следующим образом. Приложение вызывает
функции ODBC для выполнения SQL-инструкций, получает и интерпретирует
результаты; менеджер драйверов загружает ODBC-драйверы, когда этого требует
приложение; ODBC-драйверы обрабатывают вызовы функций ODBC, передают
операторы SQL СУБД и возвращают результат в приложение; источник данных
(data source) - объект, скрывающий СУБД, детали сетевого интерфейса,
расположение и полное имя базы данных и т.д.
Действия, выполняемые приложением, использующим интерфейс ODBC,
сводятся к следующему. Для начала сеанса работы с базой данных приложение
должно подключиться к источнику данных, ее скрывающему. Затем приложение
обращается к базе данных, посылая SQL-инструкции, запрашивает результаты,
отслеживает и реагирует на ошибки и т.д., то есть имеет место стандартная
схема взаимодействия приложения и сервера БД, характерная для RDA-модели.
Важно, что стандарт ODBC включает функции управления транзакциями (начало,
фиксация, откат транзакции). Завершив сеанс работы, приложение должно
отключиться от источника данных.
Слой доступа к данным, подобный ODBC использует в своих продуктах
компания Borland. Эта система носит название Borland Database Engine (BDE)
и имеет некоторые преимущества по сравнению с ODBC.
1.5 Обработка транзакций
Транзакция представляет собой последовательность операторов языка SQL,
которая рассматривается как некоторое неделимое действие над базой данных,
осмысленное с точки зрения пользователя. В то же время, это логическая
единица работы системы. Транзакция реализует некоторую прикладную функцию,
например, перевод денег с одного счета на другой в банковской системе.
Существуют различные модели транзакций, которые могут быть
классифицированы на основании различных свойств, включающих структуру
транзакции, параллельность внутри транзакции, продолжительность и т.д. Чаще
всего имеют в виду традиционные транзакции, характеризуемые четырьмя
классическими свойствами: атомарности, согласованности, изолированности,
долговечности (прочности) - ACID (Atomicity, Consistency, Isolation,
Durability). Иногда традиционные транзакции называют ACID-транзакциями.
Упомянутые выше свойства означают следующее:
1. Свойство атомарности выражается в том, что транзакция должна быть
выполнена в целом или не выполнена вовсе.
2. Свойство согласованности гарантирует, что по мере выполнения
транзакций данные переходят из одного согласованного состояния в
другое - транзакция не разрушает взаимной согласованности данных.
3. Свойство изолированности означает, что конкурирующие за доступ к
базе данных транзакции физически обрабатываются последовательно,
изолированно друг от друга, но для пользователей это выглядит так,
как будто они выполняются параллельно.
4. Свойство долговечности трактуется следующим образом: если
транзакция завершена успешно, то те изменения в данных, которые были
ею произведены, не могут быть потеряны ни при каких обстоятельствах
(даже в случае последующих ошибок).
Расширенные транзакции допускают формирование из ACID-транзакций
иерархических структур. Если конкретная модель ослабляет некоторые из
требований ACID, то речь идет об ослабленной транзакции.
Возможны два варианта завершения транзакции. Если все операторы
выполнены успешно, и в процессе выполнения транзакции не произошло никаких
сбоев программного или аппаратного обеспечения, транзакция фиксируется.
Фиксация транзакции - это действие, обеспечивающее запись на диск
изменений в базе данных, которые были сделаны в процессе выполнения
транзакции. До тех пор, пока транзакция не зафиксирована, возможно
аннулирование этих изменений, восстановление базы данных в то состояние, в
котором она была на момент начала транзакции. Фиксация означает, что все
результаты выполнения транзакции становятся постоянными. Они станут
видимыми другим транзакциям только после того, как текущая транзакция будет
зафиксирована. До этого момента все данные, затрагиваемые транзакцией,
будут "видны" пользователю в состоянии на начало текущей транзакции.
Если в процессе выполнения транзакции произошла ошибка, база данных
должна быть возвращена в исходное состояние. Откат транзакции - это
действие, обеспечивающее аннулирование всех изменений данных, которые были
сделаны операторами SQL в теле текущей незавершенной транзакции.
Каждый оператор в транзакции выполняет свою часть работы, но для
успешного завершения всей работы в целом требуется безусловное завершение
их всех. Группирование операторов в транзакции сообщает СУБД, что вся эта
группа должна быть выполнена как единое целое, причем такое выполнение
должно поддерживаться автоматически.
В стандарте ANSI/ISO SQL определены модель транзакций и функции
операторов COMMIT и ROLLBACK. Стандарт определяет, что транзакция
начинается с первого SQL-оператора, инициируемого пользователем или
содержащегося в программе. Все последующие SQL-операторы составляют тело
транзакции. Транзакция завершается одним из четырех возможных способов:
. оператор COMMIT означает успешное завершение транзакции; его
использование делает постоянными изменения, внесенные в базу данных
в рамках текущей транзакции;
Страницы: 1, 2, 3, 4, 5
|