А.В. Лашманов

НПВП ФОРС (+7 095) 973-40-67


История ORACLE
ORACLE - открытая система
Новые разработки ORACLE
Заключение
Литература

История ORACLE

ORACLE является исторически первой и одной из наиболее развитых на сегодняшний день реализаций архитектуры "клиент/сервер". Открытость (переносимость + масштабируемость) - всегда была основной идеей разработчиков ORACLE. Современное положение ORACLE на рынке СУБД, безусловно, является прямым следствием открытости системы.

Вторая версия Oracle (версия 1 не поставлялась заказчикам) была выпущена в свет фирмой Relational Software Incorporated в 1979 году на миникомпьютере PDP-11 фирмы Digital Equipment Corporation в операционной среде RSX-11. Большая часть Oracle была написана на ассемблере PDP-11, а отдельные компоненты - на новом для того времени языке Си. Уже в те дни система была переносима и работала в других операционных средах PDP-11 - IAS, RSTS и UNIX. Тогда же было принято решение о переносе Oracle в новую ОС VMS. Благодаря этому СУБД Oracle заняла обширную нишу организационных информационных систем на быстро растущем рынке VAX.

Наиболее сильное впечатление на пользователей произвела полная реализация возможностей нового языка запросов SQL - подзапросы, операция соединения и непроцедурность, благодаря чему многократно выросла производительность программирования. Стандартный SQL (IBM) был расширен утверждением CONNECT BY, позволяющим обрабатывать древовидные структуры, остающееся уникальным для SQL-систем. Конечно, вторая версия Oracle была чрезвычайно проста, в частности, не поддерживалось понятие транзакции, и, если в процессе обновления базы данных происходил сбой, состояние базы данных могло стать некорректным, поэтому пользователи были вынуждены часто делать резервные копии базы данных во избежание потерь информации.

Следующая версия Oracle - версия 3, выпущенная на рынок в 1983 году, была полностью написана на языке Си. Решение использовать Си и поддерживать одно множество исходных кодов стало ключом к решению проблемы переносимости Oracle на широкий спектр платформ. Были внесены изменения в язык SQL, существенно улучшена эффективность, расширена архитектура системы и введено атомарное выполнение SQL-утверждений и транзакций (SQL-утверждение либо выполнялось полностью, либо не выполнялось вообще, соответственно, транзакция либо завершалась успешно по всем изменениям базы данных, либо откатывала все сделанные ею изменения).

В этот период времени Relational Software Incorporated получила свое современное название - Oracle Corporation.

В версии 4 была существенно повышена надежность Oracle, выполнены переносы системы на большие компьютеры в ОС VM и MVS, а также на персональный компьютер с 640 Кбайтами оперативной памяти. Была реализована модель контроля доступа к базе данных, которая гарантировала, что результат запроса не противоречит состоянию базы данных на начало запроса. Благодаря чему было устранено известное противоречие между процессами чтения и записи.

В 1985 и 1986 гг. Oracle Corporation выпустила на рынок две новые версии СУБД - 5.0 и 5.1. В версии 5.0 была впервые введена архитектура "клиент/сервер" и реализована программа SQL*Net, поддерживающая неоднородные среды. В версии 5.1 были впервые разрешены распределенные запросы, т. е. запрос мог обращаться к данным, физически размещенным в разных узлах. Несколько взаимодействующих серверов могли создать у пользователя многих физически разнесенных баз данных иллюзию единой логической базы данных.

Разработчики версии 6 стремились создать инструмент построения крупномасштабных информационных систем, ориентированных на обработку транзакций в режиме реального времени. Были введены генераторы последовательностей и блокировка на уровне записи, а это, вместе с моделью "непротиворечивости чтения", означало, что процессы чтения и записи больше не блокируют друг друга (в состояние ожидания переходит лишь процесс записи при попытке обновить строку таблицы, которая уже контролируется другим процессом записи).

В это же время ORACLE стал первым многопользовательским сетевым сервером баз данных для OS/2, Xenix, Banyan Vines и Macintosh.

В версии 6 были заложены принципиально новые возможности, в полном объеме реализованные позже. Во-первых, SQL-утверждения могли использоваться совместно с утверждениями процедурного языка PL/SQL и посылаться для исполнения на сервер как анонимные процедуры. Во-вторых, тот же язык PL/SQL был введен в язык четвертого поколения SQL*Forms в качестве средства программирования приложений (в следующей версии 7 расширенный язык PL/SQL стал средством описания процедур и триггеров базы данных). В-третьих, в описание схемы базы данных на синтаксическом уровне были введены (в соответствии с ANSI/ISO стандартом) декларативные определения ограничений референциальной целостности.

Помимо общего повышения эффективности ввода/вывода, использования центрального процессора и работы с памятью, версия 7 обладала рядом инновационных архитектурных решений: разделяемый SQL-кэш на сервере (сервер распознает посылаемые клиентами SQL-утверждения, которые ранее уже были проанализированы и скомпилированы и в данный момент находятся в кэш-памяти, за счет чего экономится время анализа, оптимизации и трансляции, а также память, требуемая для хранения SQL-утверждения) и разделяемый пул процессов сервера вместо отдельного процесса для каждого клиента, что позволяет сэкономить значительный объем памяти.

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

В версии 7 были полностью реализованы декларативные ограничения референциальной целостности в соответствии со стандартами ANSI/ISO. В рамках этих ограничений (первичные и внешние ключи) пользователь может специфицировать каскадное удаление связанных с некоторым первичным ключом записей. Процедуры PL/SQL могут описываться на уровне схемы базы данных (хранимые процедуры) и вызываться любым приложением, другими процедурами и триггерами. Взаимосвязанные процедуры могут быть сгруппированы в пакеты и использовать общие переменные и определения. Значения переменных, объявленных на уровне пакета, сохраняются в течение всей пользовательской сессии и могут совместно использоваться процедурами и функциями пакета.

Другим важным нововведением явились триггеры базы данных. Триггер представляет собой пару (событие+действие), где событие - это удаление/занесение/обновление записей таблицы, а действие (тело триггера) - процедура PL/SQL, выполняемая при совершении события. Триггеры могут определяться на уровне утверждений (DELETE, INSERT, UPDATE) или на уровне отдельных строк (FOR-EACH-ROW-триггеры, которые, к тому же, могут работать со старыми и новыми значениями строк). С помощью триггеров можно реализовать сложные правила контроля целостности, прав доступа, вывода значений и другие.

Управление безопасностью и целостностью существенно упростилось благодаря введению ролей. Роль - это совокупность прав доступа к объектам базы данных (INSERT, UPDATE, SELECT и др.) и системных прав (CREATE TABLE, ALTER SYSTEM и т.д.). Определив роль, администратор базы данных может с помощью одной команды GRANT дать пользователю привилегии для работы с некоторым приложением.

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

Версия 7.1, поставляемая в настоящее время обладает рядом существенных нововведений.

Важным аспектом является использование сервером особенностей архитектуры конкретной вычислительной платформы (например, многопроцессорности). Это достигается с помощью различных опций. Например, в версии ORACLE 7.1 есть опция параллельных запросов (parallel query option), реализующая параллельное выполнение запросов, параллельное создание индексов и параллельную загрузку данных. В предыдущих версиях ORACLE каждое SQL-утверждение обрабатывалось одним серверным процессом. В версии 7.1 на основе результатов работы оптимизатора запросов определяется количество серверных процессов, необходимых для выполнения SQL-утверждения. Работа этих параллельных процессов управляется специальным процессом-координатором.

В версии 7.1 достигнута полная интеграция PL/SQL и SQL. Если ранее можно было использовать конструкции SQL в текстах PL/SQL (но не наоборот), то теперь функции PL/SQL могут вызываться из SQL как обычные встроенные функции, причем не только в конструкции SELECT FROM WHERE (в списке SELECT, утверждениях WHERE, HAVING, GROUP BY и др.), но и в подъязыке определения данных в командах CREATE TABLE и ALTER TABLE из утверждения CHECK.

Еще одним ключевым нововведением в версии 7.1 является встроенный пакет DBMS_SQL, реализующий динамический SQL, т. е. возможность динамически формировать и выполнять утверждения SQL в программах PL/SQL.

В области распределенной обработки данных в версии 7.1 вводится асинхронная симметричная репликация данных и асинхронный вызов удаленных процедур.

История развития ORACLE показывает, что открытость всегда была одной из стержневых идей создателей системы [Jacobs94].

ORACLE - открытая система

Рассматривать ORACLE как открытую систему следует, очевидно, в трех измерениях: "сервер-сеть-клиент".

Со стороны сервера открытость означает поддержку наиболее распространенных вычислительных платформ и независимость серверной части разрабатываемых прикладных систем от рабочей платформы. Здесь ORACLE находится вне конкуренции поддерживая около 200 платформ и работая практически на любой вычислительной системе - от персональных до центральных компьютеров и многопроцессорных систем. При этом перенос программ не требует изменения исходного кода. Это подтверждается и личным опытом автора, полученным при работе над рядом проектов. Например, в проекте "Система управления документами", который разрабатывается НПВП ФОРС совместно с НТЦ "Система": перенос серверной части системы с платформы Intel 486 на IBM 4380 и HP 9000/816 не потребовал изменения ни одного байта исходного текста.

Существенным моментом является реализация стандартов языка SQL. ORACLE 7.1 полностью поддерживает стандарт ANSI SQL 89 и входной уровень ANSI SQL 92. В версии 7.1 можно в интерактивном режиме включать проверку на соответствие входному уровню стандарта ANSI SQL 92 с помощью команды:

ALTER SESSION SET FLAGGER = ENTRY; 

Соответственно можно и выключать проверку на соответствие стандарту, устанавливая FLAGGER = OFF.

Независимость от источников данных, как важная составляющая открытости ORACLE, реализована с помощью двух наборов продуктов: ORACLE Transparent Gateways (прозрачные шлюзы) и ORACLE Procedural Gateways (процедурные шлюзы). Прозрачные шлюзы обеспечивают доступ из SQL к базам данных и файловым системам - DB2, Rdb, ADABAS, IDMS, IMS, SQL/DS, SQL/400, VSAM и плоским файлам. Процедурные шлюзы реализуют интерфейс с мониторами транзакций, операционными системами и внешними приложениями из языка PL/SQL.

Ключевой компонентой сетевого взаимодействия является программа SQL*Net, устанавливаемая как со стороны клиента, так и сервера, и, которая поддерживает практически все сетевые протоколы: TCP/IP, SPX/IPX, DECnet, APPC, ISO/OSI, Named Pipes, NetBIOS, AppleTalk, Banyan Vines, XODIAC, Wang Systems Network и другие, обеспечивая независимость сервера и клиентов от используемых сетевых протоколов. Важно, что SQL*Net поддерживает множественные сетевые интерфейсы для одного узла.

Другой существенной функцией SQL*Net является поддержка национальных языков: если на клиентах и серверах используются разные кодовые страницы, то SQL*Net обеспечивает корректную перекодировку данных (в том числе и для многобайтных кодировок).

Механизм многопротокольного обмена - MPI (Multiple Protocol Interchange) осуществляет преобразование данных из одного протокола в другой и позволяет существенно снизить число узлов сети, требующих поддержки нескольких протоколов.

Кроме того, Oracle 7 совместим со спецификацией X/Open XA коммуникации мониторов транзакций и менеджеров ресурсов, благодаря этому Oracle 7 работает с мониторами TopEnd, Encina и Tuxedo.

Со стороны клиента открытость означает независимость от среды приложения - прикладные программы могут разрабатываться в одной программно-вычислительной среде, а использоваться в другой без перепрограммирования. Частным случаем этого является независимость от целевого графического интерфейса. Прикладные программы могут разрабатываться под одним интерфейсом, а использоваться под другим (например, разрабатываться в среде X Windows, а использоваться под MS Windows).

Интегрированная, функционально полная среда разработки CDE1 (Cooperative Development Environment) ORACLE предоставляет разработчику приложений набор инструментальных средств: Oracle Forms, Oracle Reports, Oracle Graphics, Oracle Book и другие.

Oracle Forms - это язык четвертого поколения, в основе которого лежит механизм управления событиями с помощью триггеров экранных форм. Триггеры представляют собой упорядоченные пары (логическое событие, действие). Каждое действие пользователя (нажатие клавиши) влечет одно или несколько логических событий. Например, нажатие клавиши перехода к следующему полю экранной формы вызывает события "Переход к следующему полю" и "Проверка содержимого текущего поля". Вторая компонента триггера - это процедура PL/SQL, вызываемая при совершении логического события. Процедуры могут определяться и быть доступными как внутри одной формы, так и группироваться в библиотеки процедур, используемые многими формами с помощью команд копирования и референции. В состав Oracle Forms входит WYSIWYG-дизайнер экранных форм, средство построения меню, отладчик и ряд других компонент.

Oracle Reports позволяет создавать отчеты в широком спектре форматов (табличные, матричные, главный-подчиненный и другие) с использованием различных текстовых и графических объектов. Отчет может содержать любое число SQL-утверждений и вызовов PL/SQL процедур. С помощью шлюзов можно строить отчеты из данных, находящихся в разных источниках, например, ORACLE, DB2, SQL/DS.

Средство визуализации данных Oracle Graphics дает возможность строить сложные приложения класса "мультимедиа". Oracle Graphics поддерживает языки SQL и PL/SQL, импорт и экспорт данных и графики из различных источников.

Oracle Book представляет собой инструмент создания электронной документации в гипертекстовом стиле, которая может вызываться из приложений. Созданные с помощью ORACLE Book документы могут находиться в базе данных, сетевой файловой системе или оптических дисках, и, содержать, помимо текста и графики, видео- и аудио- данные. ORACLE Book автоматически конвертирует файлы в более чем 80 форматах текстовых процессоров (MS Word, WordPerfect, AmiPro, Interleaf и др.), при этом сохраняются шрифты, цвета и выравнивание.

Oracle Forms, Oracle Reports, Oracle Graphics, Oracle Book полностью интегрированы по вызовам, передаче и получению данных.

Входящее в состав CDE высокоуровневое средство Oracle Glue ("клей") позволяет включать внешние прикладные и инструментальные программы (Lotus 1-2-3, Excel, Visual Basic и др.) в среду разработки Oracle, а средство Oracle Precompilers дает возможность обращаться к базе данных из универсальных языков программирования - Ada, C, COBOL, FORTRAN, Pascal, PL/1.

В настоящее время готовится к выпуску вторая версия CDE - CDE2, в состав которой входит средство ORACLE Translation Manager, осуществляющее перевод зависящих от языка элементов приложений (разработанных с помощью Oracle Forms, Oracle Reports и др.) с одного национального языка на другой.

ORACLE предоставляет широкий набор средств конечного пользователя: Oracle Data Query, позволяющий пользователю, не знакомому с языком SQL, строить запросы и отчеты, Oracle Browser, помогающий с помощью дружелюбного графического интерфейса легко и эффективно находить информацию в распределенной среде, Oracle Office - пакет для автоматизации офисной деятельности.

Новые разработки ORACLE

В настоящее время Oracle Corp. выпускает на рынок ряд перспективных продуктов, среди которых TextServer3 (текстовый сервер), предназначенный для хранения и поиска произвольных текстов, Workgroup Server и Server for Windows NT.

Server for Windows NT и Workgroup Server - это упрощенные с точки зрения установки, настройки и администрирования варианты Oracle 7 к тому же менее требовательные к ресурсам (Workgroup Server: клиент - 4 MB RAM, 25 MB HD, сервер - 16 MB RAM, 32 MB HD; Server for Windows NT: 16 MB RAM и 25 MB HD). Workgroup Server и Server for Windows NT полностью совместимы с седьмым сервером. Workgroup Server работает в следующих операционных средах: сервер - Windows NT, Netware 3.11 и выше, OS/2 2.1 и выше, клиент - Windows NT, OS/2. Однопользовательский Server for Windows NT разработан специально для и с учетом всех особенностей операционной среды Windows NT.

Разработка текстового сервера обусловлена тем, что основным средством реализации больших корпоративных баз данных являются SQL-серверы, которые не всегда адекватны задачам обработки текстов, в виде которых представляется 75 % деловой информации, а в виде таблиц - только 10 %. Более того, недавние исследования консалтинговой фирмы Gartner Group показывают, что 40 % рабочего времени сотрудников офисов тратится на подготовку, отслеживание, заполнение, копирование и передачу документов. По данным ISO (International Standards Organization) управление документами становится одним из главных факторов конкурентоспособности любой организации (предприятия, фирмы, учреждения).

Заполнить этот пробел и призван TextServer3, являющийся качественно новой версией известного пакета SQL*TextRetrieval 2.1 и с программной точки зрения представляющий собой процесс, взаимодействующий с SQL-сервером Oracle, который используется для хранения информации о текстах (даты, темы и т. д.) и самих текстов, которые могут храниться и в файловой системе соответствующей операционной среды.

TextServer3 реализует параллельные механизмы индексации и поиска в сверхбольших базах данных документов на основе физического разбиения текстовых таблиц (таблиц SQL-сервера, в которых хранятся тексты). Это разбиение может быть сделано системным администратором на основе структурных атрибутов (дата, тема и др.). Несмотря на разбиение прикладные программы "видят" данные как единое целое. Это реализовано с помощью Виртуальных Текстовых Таблиц, содержащих информацию о разбиении.

Дополнительные компоненты разбиения включаются в систему просто добавлением строк к Виртуальным Таблицам. Кроме того, Виртуальные Таблицы обеспечивают значительную гибкость, допуская реализацию параллельных процессов поиска и индексирования на различных типах параллельных систем: кластерах процессоров, симметричных и массивных параллельных архитектурах.

Важным компонентом текстового сервера является программа ConText, выполняющая лингвистический анализ текстов на основе тезауруса (около 600 000 слов и 1000 потенциальных лингвистических атрибутов на каждое слово) и грамматического и смыслового разбора. Результатом такого анализа становится индексация текстов по темам (причем каждой теме присваивается ранг релевантности) и ключевым словам. ConText выполняет также и редукцию текстов, т. е. сведение текстов к наборам ключевых фраз. При этом пользователь может выбирать уровень редукции, доводя редуцированный текст до 10 % исходного. Редуцированный текст просматривается с помощью программы SpeedView.

Для создания сложных приложений класса мультисред в графических средах Windows, Macintosh и Motif TextServer3 поддерживает ряд интерфейсов прикладного программирования (ИПП):

  • процедуры PL/SQL в рамках SQL*Forms версии 4;
  • библиотеки языка Си в форме DLL для Windows;
  • разделяемые библиотеки подпрограмм в среде UNIX.

ИПП реализуют следующие функциональные возможности: создание, уточнение, сохранение, переименование и восстановление запросов, перечисление активных и сохраненных запросов, уничтожение запросов, редактирование и печать текстов и многие другие.

Системное администрирование поддерживается утилитой Монитор, позволяющей просматривать информацию об активных процессах и выводить ее в файлы или таблицы базы данных Oracle. Данные из таблиц могут передаваться различным компонентам интегрированной среды разработки Oracle (Oracle Reports, Oracle Graphics и др.).

Для работы TextServer3 необходимы следующие программные компоненты: СУБД Oracle 7.1, SQL*NET 2.1 и SQL*Forms 4.

Перечисленные выше продукты уже поставляются ORACLE Corp. Из перспективных разработок, несомненно, выделяется Media Server - сервер для мультисред, основной чертой которого является эффективная поддержка аудио- и видео- данных, что находится в русле идей систем управления базами данных нового поколения [Committee90].

Заключение

В заключение, отметим, что с экономической точки зрения открытость ORACLE означает капиталоемкость разрабатываемых в среде ORACLE приложений, поскольку есть гарантия, что перенос программного обеспечения на новые версии системы и из одной программно-вычислительной среды в другую не потребует изменения программного кода, и, соответственно дополнительных вложений. Этим, во многом, объясняется, на взгляд автора столь высокая доля ORACLE на рынке СУБД и наибольшее число "ORACLE-ориентированных" программных продуктов третьих фирм (более 4000).

Литература

  • [Committee90]. The Committee for Advanced DBMS Function. Third Generation Database Manifesto. // SIGMOD Record, 1990. - Vol. 19, N 3, pp. 31-44.
  • [DBMS94]. DBMS 1994 Readers" Choice. // DBMS, 1994. - Vol. 7, N 12, pp. 54-55.
  • Jacobs94]. Oracle Server V2, 3, ..., 7.0, 7.1 ... and Counting. // EOUG Oracle User Forum 94 17-20 April 1994, Maastriht, The Netherlands.