Фирма Oracle Corp., мировой лидер в области распределенных информационных систем и баз данных, начала распространять новую версию реляционной распределенной СУБД ORACLE. Новая версия, называемая ORACLE7, полностью совместима с предыдущей (шестой) версией СУБД ORACLE, но обладает множеством новых свойств, необходимых для создания высококачественных коммерческих распределенных приложений. ORACLE7 унаследовал все многочисленные достоинства и уникальные возможности шестой версии ORACLE, среди которых следует упомянуть следующие:
- переносимость приложений. На сегодняшний день СУБД ORACLE работает практически на всех коммерческих вычислительных платформах (оборудование + операционная система) от персональных компьютеров до больших и супер-ЭВМ. Приложения, созданные средствами ORACLE и работающие на одной из этих платформ, могут быть без изменения перенесены на любую из 200 вычислительных платформ, на которых работает ORACLE. При этом перенесенное приложение автоматически начинает использовать дополнительные возможности новой платформы, если они есть (например, графический интерфейс, манипулятор "мышь", многопроцессорную архитектуру и т.д.).
Фирма Oracle Corp. продолжает создавать версии ORACLE для новых перспективных вычислительных платформ, поэтому приложения (а следовательно и все многолетние наработки разработчиков) становятся практически независимыми от вычислительных платформ и могут работать на наиболее мощных или дешевых в данный момент компьютерах;
- возможность создания приложений, работающих в сети разнородных компьютеров. Приложения ORACLE могут работать в сети разнородных компьютеров (причем ORACLE позволяет работать практически со всеми коммерческими сетевыми протоколами). Разработчики могут создать локальное приложение ORACLE на одном компьютере, а затем быстро и просто распределить части БД по различным компьютерам сети и перенести программы, выполняющие отдельные функции приложения, на компьютеры тех узлов сети, где эти функции наиболее удобно исполнять. Причем в узлах сети могут использоваться компьютеры самых разных типов (рис. 1). Возможна и интеграция в единое приложение подсистем, работавших ранее на отдельных локальных компьютерах;
- реализация архитектуры клиент-сервер;
- сбалансированная работа приложений различного типа. ORACLE позволяет одинаково эффективно выполнять как прикладные системы поддержки принятия решений (DSS), так и прикладные системы оперативной обработки транзакций (OLTP), причем одновременно с БД могут работать сотни и тысячи пользователей;
- высокая производительность и возможность работать с очень большими базами данных (150 Гб и более);
- мощные средства обеспечения целостности и непротиворечивости данных, защиты от несанкционированного доступа, восстановления при любых типах сбоев;
- обеспечение распределенной обработки данных и работы с распределенной базой данных;
- большой набор инструментальных средств, позволяющих просто и удобно создавать и модифицировать сложные приложения;
- открытая архитектура;
- богатый набор средств для конечных пользователей (электронные таблицы, электронная почта, средства работы с графикой и неструктурированными текстами и т.д.);
- наличие CASE-средств для автоматизации разработки прикладных программ, позволяющих специалистам в конкретной предметной области быстро создавать, развивать и модифицировать большие распределенные приложения ORACLE;
- непрерывность работы. СУБД ORACLE может работать без остановки 24 часа в сутки, причем операции копирования БД и восстановления частей БД можно выполнять не останавливая работу приложений и пользователей, работающих с БД.
СУБД ORACLE ориентирована на выполнение транзакций (групп операторов на языке SQL). При любом сбое анулируются результаты выполнения всех операторов транзакции, т.е. БД остается в непротиворечивом состоянии. Результаты работы транзакции, изменяющей БД, становятся видны остальным пользователям только после ее успешного завершения. Так что пользователи, начавшие работу с БД до завершения текущей транзакции, работают с неизмененными данными. Блокирование данных происходит только при их модификации, причем ORACLE обеспечивает выполнение блокировки на уровне строки таблицы. Поэтому ожидание заблокированного ресурса может иметь место только при попытке одновременной модификации одной и той же строки таблицы БД. Транзакции на чтение БД и транзакции на модификацию БД не блокируют друг друга. Такой подход позволяет получать очень короткое время отклика при работе большого числа пользователей.
Однако в ORACLE7 реализовано и множество новых возможностей. Наибольшее внимание при его разработке было уделено следующим направлениям: повышение производительности, увеличение функциональной мощности и отказоустойчивости, оптимизация использования оперативной памяти, более полное использование свойств графического пользовательского интерфейса в приложениях.
Сердцем ORACLE7 является новый многопроцессный сервер (рис. 2). Он может автоматически перестраивать свою архитектуру в зависимости от уровня загрузки и оптимально использовать оперативную память, процессоры, каналы ввода/вывода. Архитектура многопроцессного сервера является на сегодняшний день одной из самых мощных и сложных. Она позволяет серверу настраиваться на условия среды эксплуатации и учитывать собственную загрузку. Поэтому сервер может эффективно обрабатывать как очень большие приложения со сложными алгоритмами преобразования данных, так и небольшие простые приложения.
Обслуживанием пользовательских процессов в новой архитектуре занимаются процессы-диспетчеры сервера (администратор БД может запускать дополнительные диспетчеры). Это позволяет свести к минимуму время ожидания и оптимизировать использование оперативной памяти. Повышению производительности ORACLE7 также способствует появление нового оптимизатора запросов, возможность использования хэшированных индексов, возможность совместного использования несколькими пользователями динамических и статических операторов SQL, хранимых процедур и триггеров. По результатам теста tpcA производительность ORACLE7 на компьютере SEQUENT 2000/750 превышает производительность ORACLE6 на той же платформе более чем в 4 раза (а ведь ORACLE6 работал быстрее большинства своих конкурентов).
Новый оптимизатор запросов использует для выбора оптимального плана выполнения запроса динамические характеристики таблиц, используемых в запросе (объем таблиц, степень разброса данных и т.д.), и информацию о существующих индексах. Он также учитывает место расположения таблиц и индексов в распределенной БД для того, чтобы выбрать оптимальные пути доступа к данным и разбить процедуру выполнения запроса на части, выполняемые в тех узлах сети, где это наиболее эффективно делать. Теперь время выполнения запроса мало зависит от квалификации пользователя. Кроме автоматического режима оптимизации можно использовать режим оптимизации на основе синтаксиса запроса.
Хэшированные индексы удобно применять в тех случаях, когда поиск данных выполняется по полному значению ключа. При этом выборка данных будет выполняться за одно обращение к диску. При работе с неполным ключом остается возможность использовать индексы на основе В-деревьев.
Поскольку разобранные и откомпилированные операторы SQL теперь хранятся в едином глобальном буфере СУБД, многие пользователи могут многократно их использовать. При этом не требуется время на повторный анализ, компиляцию и размещение этих операторов, экономится и оперативная память. Динамические операторы SQL теперь выполняются почти так же быстро, как статические.
В ORACLE7 очень хорошо реализована работа с распределенной БД. На сегодня ORACLE7 является практически единственным пакетом, позволяющим реализовать большинство функций, присущих коммерческой распределенной СУБД. Он обеспечивает целостность БД при выполнении распределенных запросов и обновлений, оптимизацию выполнения распределенных запросов, обработку распределенных транзакций, автономию узлов распределенной БД и высокую производительность обработки распределенной БД. Оригинальный алгоритм двухфазной фиксации изменений позволяет обеспечить целостность и согласованность данных распределенной БД даже при использовании в некоторых ее узлах СУБД других фирм.
ORACLE7 позволяет создавать и поддерживать в узлах распределенной БД копии таблиц, причем эти копии могут обновляться как оперативно, так и автоматически через определенные промежутки времени. Кроме того, можно хранить в узлах не точные копии таблиц, а некоторые производные таблицы, получаемые в результате выполнения запроса к исходным таблицам. Эти производные таблицы также будут корректироваться автоматически. Декларативные ограничения целостности, хранимые процедуры и триггеры могут размещаться в разных узлах распределенной БД и поддерживать целостность всей БД.
Для реализации эффективной работы с разнородной распределенной БД фирме Oracle Corp. пришлось разработать новую технологию объединенного сервера, которая и обеспечивает "прозрачное" распределение данных. Объединенный сервер позволил наконец выполнить коммерческую реализацию "идеального" определения распределенной БД в котором " ... под распределенной БД понимается множество физических баз данных, которые выглядят для пользователя как одна логическая база данных". Следует заметить, что переход от работы с локальной БД к работе с распределенной БД и обратно очень прост и понятен. Он не требует от разработчиков больших усилий и не приводит к модификации работающих программ.
Поддержка целостности и непротиворечивости распределенных обновлений выполняется автоматически и не требует программирования. При этом ORACLE7, в отличие от других распределенных СУБД, не использует один из серверов в качестве центрального (что может привести к потере данных и снижает производительность). Все узлы распределенной БД работают самостоятельно, но в согласованном режиме. Не требуется иметь прямую связь между каждыми двумя серверами. СУБД сама определит оптимальный путь по сети к нужному серверу. При изменении топологии сети (повреждение сети, отключение сервера-узла) будет сделана автоматическая попытка выбора нового пути к нужному серверу. Причем при использовании компоненты SQL*Net 2 в состав этого пути могут входить участки сети с различными сетевыми протоколами (рис 3).
Функциональная мощность ORACLE7 повышена, в первую очередь, за счет отличной реализации механизмов декларативных ограничений целостности, хранимых процедур и триггеров. Декларативные ограничения целостности позволяют без программирования обеспечить соблюдение правил целостности данных, присущих конкретной предметной области. Они позволяют контролировать ссылочную целостность, уникальность, попадание в диапазон, каскадную целостность и т.д.
Декларативные ограничения целостности хранятся на сервере в откомпилированном виде и реализуются автоматически. При этом ядро СУБД будет проверять эти ограничения вне зависимости от того, кто обратился к БД (инструментальное средство ORACLE, программа на языке 3-го поколения или приложение-клиент другой фирмы). С помощью декларативных ограничений целостности можно, например, активизировать автоматическое удаление всех подчиненных записей связи мастер-деталь при удалении записи-мастер, или наоборот, запретить удаление записи-мастер при наличии хотя бы одной подчиненной записи.
Средства обеспечения декларативных ограничений целостности на 100 процентов совместимы со стандартом ANSI/ISO SQL и позволяет описывать очень сложные логические условия контроля. Кроме того, следует отметить, что декларативные ограничения целостности пишутся один раз (хотя их можно модифицировать), выполняются более эффективно, чем триггеры, и едины для всех приложений, работающих с БД.
Хранимые процедуры и триггеры пишутся на языке SQL или PL/SQL и хранятся в узлах распределенной БД. Процедуры могут вызывать друг друга или вызываться из триггеров, работать с файлами операционной системы и БД других фирм, объединяться в пакеты (процедуры пакета могут обмениваться переменными). Триггеры хранятся в узлах распределенной БД и автоматически "срабатывают" при возникновении определенных событий (например, при выполнении некоторого оператора SQL). Триггер может выполняться для каждой строки таблицы или для каждого оператора SQL.
При изменении динамических характеристик таблиц, обрабатываемых процедурами и триггерами, а также при удалении или создании индексов этих таблиц ORACLE7 автоматически выполняет оптимизацию входящих в процедуру или триггер SQL-предложений. Если пользователь имеет право на выполнение некоторой хранимой процедуры, то он с ее помощью может работать даже с теми данными БД, которые ему в противном случае недоступны. ORACLE7 поддерживает информацию о взаимосвязи процедур и при модификации хранимой процедуры все остальные хранимые процедуры, которые ее используют, будут автоматически перекомпилированы.
Кроме того, триггер может работать как со старым, так и с новым значением модифицируемых данных. Наиболее целесообразно использовать хранимые на сервере триггеры для выполнения сложной обработки, необходимой для всех пользователей БД.
Еще одно новое средство ORACLE7 - средство аварийной сигнализации (Alert). Пользователь может описать некоторые условия, при выполнении которых автоматически активизируется программа, посылающая работающим приложениям специфицированное пользователем аварийное сообщение.
ORACLE7 также поддерживает открытую архитектуру. В едином приложении могут согласованно работать компоненты, созданные инструментальными средствами ORACLE, программы на языках 3-го поколения, компоненты, использующие СУБД других фирм и файлы операционной системы, а также аппаратные компоненты (например, контроллеры, кассовые аппараты, устройства для считывания штрих-кодов и т.д.).
Компонента Oracle Open Gateway позволяет приложениям ORACLE работать с другими СУБД, системами управления файлами, приложениями и файлами операционной системы. На ее основе фирма Oracle Corp. создала свои connect-продукты для связи с 15 коммерческими СУБД и файловыми системами, включая IMS, IDMS, DB2, SQL/DS, VSAM, RMS, Rdb, TurboImage и т.д. Пользователь может сам описать процедуру отображения SQL-операторов ORACLE в SQL-диалект нового пакета СУБД или в набор операторов описания и манипулирования данными некоторого пакета другой фирмы.
Open Gateway поддерживает работу приложений ORACLE с удаленными хранимыми процедурами, позволяющими организовать доступ к таким внешним системам, как CICS и IMS/DC, системы управления аппаратурой и т.д. Благодаря такому подходу в единое приложение можно включать разнотипные пакеты, причем они будут работать согласованно, а при использовании в такой системе распределенной БД непротиворечивость и целостность данных будут обеспечиваться за счет двухфазного протокола фиксации изменений.
Для облегчения работы администратора БД по разграничению прав доступа пользователей в ORACLE7 введено понятие групп (ролей) безопасности. Делегировав однажды такой группе набор прав доступа администратор может в дальнейшем давать пользователю множество прав с помощью одного оператора GRANT. При этом пользователь становится членом некоторой группы безопасности и далее может даже (если дозволено) создавать новых членов этой группы. Одни группы безопасности могут включать другие группы безопасности организуя таким образом иерархию прав доступа.
Кроме того, администраторы БД теперь тоже могут разделяться на группы, обладающие различными правами на выполнение работ по администрированию БД. Инструмент администратора БД SQL*DBA имеет теперь дружественный интерфейс на основе меню, что упрощает работу администратора, и позволяет выполнять работы по администрированию не только локальной БД, но и узлов распределенной БД.
Новый быстрый загрузчик данных предназначен для загрузки в БД ORACLE больших объемов данных. Он позволяет выполнять загрузку данных без учета декларативных ограничений целостности и без корректировки индексов. Проверка ограничений целостности и построение индексов выполняются автоматически после окончания загрузки. А сама загрузка данных в БД идет не через выполнение операторов SQL, а напрямую. Загрузчик поддерживает множество форматов исходных данных, позволяет рестартовать работу по загрузке с некоторой промежуточной точки и загружать несколько таблиц БД на основе одного исходного файла. Новый загрузчик работает в 6 - 8 раз быстрее, чем старый.
В ORACLE7 поля БД с типом LONG могут иметь длину до 2 Гб. Это позволяет хранить в них большие неструктурированные тексты, графические изображения (например, карты местности), звук и другую битовую информацию.
Параллельно ядру ORACLE развивались инструментальные средства ORACLE. С их помощью разработчики могут теперь создавать экранные приложения с графическим интерфейсом и сложной логикой обработки. Улучшен интерфейс самих инструментальных средств, повышена их функциональная мощность. Ряд триггеров для сложной обработки создается автоматически, имеются средства для работы с графикой.
Среди прочих новых возможностей ORACLE7 следует упомянуть следующие: средства ограничения и контроля ресурсов пользователей (использование процессора и диска, время связи, время выполнения обработки и т.д.); возможность дублирования журнальных файлов; средства динамической реконфигурации СУБД (без остановки ORACLE); возможность использования тригонометрических функций в операторах SQL; возможность быстрого удаления всех строк таблицы или представления без уничтожения таблицы или представления (при этом можно указать на необходимость освобождения места в БД); возможность пересылки данных из приложений ORACLE по электронной почте.
Для пользователей, работающих с секретными данными, выпускается защищенная версия ORACLE7 - Trusted ORACLE. Она сертифицирована по классу безопасности В1 и работает с защищенными операционными системами.
Реализованное в ORACLE7 множество новых возможностей и главное высокое качество и согласованность их реализации позволили фирме Oracle Corp. значительно обогнать своих основных конкурентов, выпускающих СУБД Informix, Ingres, Sybase. Хотя на сегодняшний день и можно решить отдельные частные проблемы пользователей с помощью других СУБД, однако ни один производитель программных продуктов не сможет предоставить столь совершенного, универсального и комплексного средства, каким является СУБД ORACLE7.
(Об авторах: Беляев В. И. - технический директор, Ривкин М. Н. - главный специалист А/О "Корпорация ЛВС", тел. (095) 334-89-81).