9 Июнь 2008

1. Архитектура «клиент-сервер». Уровни систем «клиент-сервер».

написано в рубрике: Базы данных +УБД (Т) — Метки: , — Михаил @ 20:58

Распределенные системы - это системы “клиент-сервер”. Существует по меньшей мере три модели “клиент-сервер”:

· Модель доступа к удаленным данным (RDA-модель)

· Модель сервера базы данных (DBS-модель)

· Модель сервера приложений (AS-модель)

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

· Компонент интерфейса с пользователем

· Компонент управления данными (и базами данных в том числе)

а между ними расположено программное обеспечение промежуточного слоя (middleware), выполняющее функции управления транзакциями и коммуникациями, транспортировки запросов, управления именами и множество других. Middleware - это ГЛАВНЫЙ компонент распределенных систем и, в частности, DDB-систем. Главная ошибка, которую мы совершаем на нынешнем этапе - полное игнорирование middleware и использование двухзвенных моделей “клиент-сервер” для реализации распределенных систем.

Существует фундаментальное различие между технологией “SQL-клиент - SQL-сервер” и технологией продуктов класса middleware (например, менеджера распределенных транзакций Tuxedo System). В первом случае клиент явным образом запрашивает данные, зная структуру базы данных (имеет место так называемый data shipping, то есть “поставка данных” клиенту). Клиент передает СУБД SQL-запрос, в ответ получает данные. Имеет место жесткая связь типа “точка- точка”, для реализации которой все СУБД используют закрытый SQL-канал (например, Oracle SQL*Net). Он строится двумя процессами: SQL/Net на компьютере - клиенте и SQL/Net на компьютере-сервере и порождается по инициативе клиента оператором CONNECT. Канал закрыт в том смысле, что невозможно, например, написать программу, которая будет шифровать SQL- запросы по специальному алгоритму (стандартные алгоритмы шифрования, используемые, например, в Oracle SQL*Net, вряд ли будут сертифицированы ФАПСИ).
В случае трехзвенной схемы клиент явно запрашивает один из сервисов (предоставляемых прикладным компонентом), передавая ему некоторое сообщение (например) и получает ответ также в виде сообщения. Клиент направляет запрос в информационную шину (которую строит Tuxedo System), ничего не зная о месте расположения сервиса. Имеет место так называемый function shipping (то есть “поставка функций” клиенту). Важно, что для Клиента база данных (в том числе и DDB) закрыта слоем Сервисов. Более того, он вообще ничего не знает о ее существовании, так как все операции над базой данных выполняются внутри сервисов.
Сравним два подхода. В первом случае мы имеем жесткую схему связи “точка-точка” с передачей открытых SQL-запросов и данных, исключающую возможность модификации и работающую только в синхронном режиме “запрос-ответ”. Во втором случае определен гибкий механизм передачи сообщений между клиентами и серверами, позволяющий организовывать взаимодействие между ними многочисленными способами.

Таким образом, речь идет о двух принципиально разных подходах к построению информационных систем “клиент-сервер”. Первый из них устарел и явно уходит в прошлое. Дело в том, что SQL (ставший фактическим стандартом общения с реляционными СУБД) был задуман и реализован как декларативный язык запросов, но отнюдь не как средство взаимодействия “клиент-сервер” (об этой технологии тогда речи не было). Только потом он был “притянут за уши” разработчиками СУБД в качестве такого средства. На волне успеха реляционных СУБД в последние годы появилось множество систем быстрой разработки приложений для реляционных баз данных (VisualBasic, PowerBuilder, SQL Windows, JAM и т.д.). Все они опирались на принцип генерации кода приложения на основе связывания элементов интерфейса с пользователем (форм, меню и т.д.) с таблицами баз данных. И если для быстрого создания несложных приложений с небольшим числом пользователей этот метод подходит как нельзя лучше, то для создания корпоративных распределенных информационных систем он абсолютно непригоден.
Для этих задач необходимо применение существенно более гибких систем класса middleware (Tuxedo System, Teknekron), которые и составляют предмет нашей профессиональной деятельности и базовый инструментарий при реализации больших проектов.

Технология клиент-сервер

Базы данных занимают лидирующее положение в области информационных технологий. Развитие систем управления базами данных идет по пути интеграции в единое целое, и огромным шагом к этому является использование стандарта обработки данных с помощью структурированного языка запросов SQL. В настоящее время акцент делается на использование сетевых информационных технологий, базирующихся на архитектуре клиент/сервер.

Технология клиент-сервер подразумевает выполнение запросов пользователей специализированным компьютером, называемым сервером. Пользователи, которые отправляют запросы на этот сервер, называются клиентамиa. Запрос на выполнение операции с данными (например, обычная выборка), выдаваемый клиентом, порождает на сервере поиск и извлечение данных. Извлеченные данные транспортируются по сети от сервера к клиенту. Системы, использующие технологию клиент-сервер, разделяются на две части: клиентская часть обеспечивает графический интерфейс и находится на компьютере пользователя; серверная часть обеспечивает управление данными, разделение информации, администрирование и безопасность и находится на специально выделенных для этого компьютерах.

Уровни системы клиент-сервер

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

· GUI - графический пользовательский интерфейс. Состоит из окон, экранов и т. д.

· бизнес-логика - это часть программы, имеющая дело с расчетами.

· база данных, СУБД, занимающаяся хранением и получением данных.

Бизнес-правила - это процедуры управления, которые указывают, как клиент получает доступ к данным на сервере. Эти правила реализуются клиентом, сервером или ими обоими в виде программного кода. Важно понимать, что бизнес-правила определяют поведение системы. При их отсутствии у вас есть просто данные на одном компьютере и приложение на другом, но нет метода их соединения.

Двухуровневая система

В основе своей двухуровневая система имеет GUI и бизнес-логику с прямым доступом к базе данных. GUI находится на системе клиента, а база данных - либо у клиента, либо на сервере. Обычно GUI пишется на C++, Visual Basic, Access Basic и т.д. Типичными базами данных являются MIcrosoft Access, Personal Oracle и т.д.

Трехуровневые системы

Большинство клиент-серверных приложений следуют сегодня трехуровневой стратегии, при которой GUI, бизнес-логика и базы данных логически разбиты на три слоя. Здесь GUI пишется на Visual Basic, C++ или Power Builder, средствами разработки среднего слоя также служит C++ или Visual Basic. В качестве базы данных используются Oracle, Microsoft SQLServer и т.д. Трехуровневая концепция дала начало эпохе серверов баз данных, серверов приложений и клиентских GUI-машин. Такие операционные системы как UNIX, Windows NT и Solaris правят в мире серверов баз данных и приложений. Клиентские операционные системы (Windows) популярны среди разработчиков GUI. Двухуровневая архитектура может быть дополнена третьим программным уровнем во избежание встраивания логики приложения как в клиентскую часть, так и в базу данных. В трехуровневой архитектуре большая часть логики приложения зафиксирована на среднем уровне. В подобной архитектуре при изменении направления деловой активности или бизнес-процессов меняется только программное обеспечение программного слоя.

Многоуровневые системы

Сейчас, во времена Internet и Java изменились взгляды на отношения клиента и компьютерной сети. Апплеты Java с их объектами и методами привели к возникновению идеи многоуровневой клиент-серверной системы. Теоретически апплет Java может содержать бизнес-логику, GUI или СУБД. Каждый апплет можно рассматривать как отдельный слой. Концепция объектно-ориентированных многоуровневых систем возникла до появления Internet и Java. Архитектуры CORBA фирмы OMG и OLE (теперь ActiveX) фирмы Microsoft являются первыми модульными объектно-ориентированными системами, работающими на разных платформах. Internet и Java упростили реализацию этой концепции. Конструкция и реализация систем прошли путь от двух и трехуровневой архитектуры до современных межсетевых многоуровневых архитектур, основанных на апплетах Java.

10. Пользователи, привилегии, роли (определение, назначение, создание).

написано в рубрике: Базы данных +УБД (Т) — Метки: , , , — Михаил @ 20:53

Аутендификация пользователь: Первый уровень безопасности.

Базы данных, как и данные, хранимые в файлах базы данных, должны быть защищены. InterBase обеспечивает двухуровневую защиту данных - аутентификация пользователя на уровне сервера и привилегии на уровне базы данных. Безопасность InterBase основана на концепции “пользователя” (user). Безопасность всей базы данных, в сущности, зависит от проверки подлинности идентификатора пользователя.

Все версии InterBase используют базу данных безопасности для аутентификации пользователей, при этом некоторые версии позволяют организовать разграничение доступа на основе системы разграничения доступа операционной системы. Версии InterBase, работающие под управлением Unix, позволяют при подключении к серверу InterBase или его базам использовать либо учетные записи операционной системы, либо учетные записи InterBase. Версии, работающие под Win95 или NT, не позволяют использовать систему разграничения доступа этих операционных систем, соответственно, пользователи Win95 или NT не являются легальными пользователями InterBase. В данном случае,для аутентификации пользователей, InterBase полностью полагается на свою базу данных безопасности.

Привилегии SQL: Второй уровень безопасности

Как уже отмечалось, в InterBase реализована двухуровневая модель безопасности. На первом уровне осуществляется аутентификация пользователя в момент подключения к базе данных, при этом используется база данных безопасности. Второй уровень реализуется уже на уровне самой базы данных. Все привилегии по доступу к объектам базы данных хранятся в самой базе. Авторизованный пользователь не имеет никаких привилегий по доступу к данным, хранящимся в базе, пока какие-либо права не будут ему предоставлены явным образом. Контроль привилегий осуществляется на уровне таблиц. Каждому пользователю сопоставлен список операций, которые допускается произвести над данной таблицей или представлением. Этот список и составляет привилегии пользователя. Право на доступ к любому объекту базы данных после его создания имеют только SYSDBA и владелец этого объекта. Владельцем объекта является пользователь создавший этот объект. SYSDBA или владелец объекта могут выдавать привилегии другим пользователям, в том числе и привилегии на право выдачи привилегий другим пользователям. Собственно сам процесс раздачи привилегий на уровне SQL реализуется двумя операторами: GRANT и REVOKE. Оператор GRANT выдает привилегии авторизованным пользователям на доступ к таблицам или представлениям, а оператор REVOKE, соответственно, изымает ранее выданные привилегии.

GRANT устанавливает привилегии на объекты базы данных, для пользователей или других объектов базы данных. Когда объект впервые создан, только его создатель имеет привилегии на него, и только создатель может предоставить (GRANT) привилегии на него другим пользователям или объектам.

Для доступа к таблице или виду, пользователю или объекту требуются SELECT, INSERT, UPDATE или DELETE привилегии на эту таблицу или вид.

Для вызова сохраненной процедуры из приложения, пользователю или объекту требуется EXECUTE привилегия на нее.

Пользователи могут дать разрешение, предоставлять привилегии другим пользователям, обеспечивая <userlist>, который включает WITH GRANT OPTION. Пользователи могут предоставлять другим только те привилегии которые им, непосредственно, назначены.

Привилегии могут быть назначены всем пользователям определив PUBLIC вместо списка имен пользователей. Определение PUBLIC предоставляет привилегии только пользователям, но не объектам базы данных.

Привилегия

Позволяет пользователям…

ALL

Выполнять SELECT, DELETE, INSERT, UPDATE и EXECUTE.

SELECT

Получать строки из таблицы или вида.

DELETE

Устранять строки из таблицы или вида.

INSERT

Сохранять новые строки в таблицу или вид.

UPDATE

Изменять текущие значения в одном или большем количестве столбцов в таблице или виде. Может быть ограниченно определенным подмножеством столбцов.

EXECUTE

Выполнять сохраненные процедуры.

Роли

В InterBase 5.0 было введено расширение стандартных средств SQL - роли, реализующее концепцию управления безопасностью на групповом уровне. Роли служат своего рода шаблонами для предустанавливаемых наборов привилегий. К обычному механизму привилегий SQL привилегии добавляют преимущество группового управления безопасностью, позволяя определять набор привилегий для нескольких таблиц в базе данных.

Для того, чтобы создать роль, необходимо воспользоваться оператором CREATE ROLE. По умолчанию, после создания роль не обладает какими-либо привилегиями. Соответственно, все необходимые права по доступу к объектам базы данных должны быть назначены до использования роли. Учитывая, что создания роли как таковой не прибавляет каких-либо прав, любой пользователь может создать роль. Также, исходя из того, что роль определяется и храниться непосредственно в базе данных, необходимо подключиться к этой базе до создания роли.

Предоставление привилегий роли

После создания роли, она не обладает какими-либо привилегиями по отношению к объектам базы. Это соответствует модели безопасности SQL: отсутствие любых прав до предоставления их явным образом. Привилегии для роли назначаются с использованием оператора выдачи разрешений, общий синтаксис которого, в данном случае, имеет следующий вид:

 GRANT <privileges ON [TABLE] {tablename | viewname} TO rolename;

Для того, чтобы иметь возможность назначить привилегию роли, необходимо быть:

  • SYSDBA
  • Владельцем таблицы или представления
  • Пользователем, имеющим право назначать привилегии для этой таблицы или представления (т.е. иметь GRANT OPTION)

Приведем примеры, предоставления объектных прав роли:

 GRANT ALL ON TEST_SCORES TO FULL_ACCESS;
 GRANT INSERT, SELECT ON TABLE EMPLOYEE TO BJONES;

Использование роли

При подключении к базе данных пользователь может использовать роль, указав её в строке подключения. Это единственная возможность, когда пользователь может указать роль. InterBase не предоставляет возможности переключения между ролями, сохраняя подключение. Пользователь должен отключиться и затем подключиться с новой ролью.

Удаление роли

Когда роль перестает быть нужной, её можно удалить из базы данных. Удалить роль имеет право SYSDBA или пользователь, создававший роль. При удалении роли, все привилегии, назначенные ей, также удаляются из базы данных. Для удаления роли используется следующий синтаксис:

 DROP ROLE rolename;

Пример демонстрирует удаление роли FULL_ACCESS:

 DROP ROLE FULL_ACCESS;

9. SQL (структура языка, основные операторы).

написано в рубрике: Базы данных +УБД (Т) — Метки: , — Михаил @ 20:50

Для работы с базами данных используются специальные языки, в целом называемые языками баз данных. В ранних СУБД поддерживалось несколько специализированных по своим функциям языков. Чаще всего выделялись два языка - язык определения схемы БД (SDL - Schema Definition Language) и язык манипулирования данными (DML - Data Manipulation Language). SDL служил главным образом для определения логической структуры БД, т.е. той структуры БД, какой она представляется пользователям. DML содержал набор операторов манипулирования данными, т.е. операторов, позволяющих заносить данные в БД, удалять, модифицировать или выбирать существующие данные.

В современных СУБД обычно поддерживается единый интегрированный язык, содержащий все необходимые средства для работы с БД, начиная от ее создания, и обеспечивающий базовый пользовательский интерфейс с базами данных. Стандартным языком наиболее распространенных в настоящее время реляционных СУБД является язык SQL (Structured Query Language). Стандарт на язык SQL был выпущен Американским национальным институтом стандартов (ANSI) в 1986 г., а в 1987 г. Международная организация стандартов (ISO) приняла его в качестве международного. Нынешний стандарт SQL известен под названием SQL/92.

{С использованием любых стандартов связаны не только многочисленные и вполне очевидные преимущества, но и определенные недостатки. Прежде всего, стандарты направляют в определенное русло развитие соответствующей индустрии; в случае языка SQL наличие твердых основополагающих принципов приводит, в конечном счете, к совместимости его различных реализаций и способствует как повышению переносимости программного обеспечения и баз данных в целом, так и универсальности работы администраторов баз данных. С другой стороны, стандарты ограничивают гибкость и функциональные возможности конкретной реализации. Под реализацией языка SQL понимается программный продукт SQL соответствующего производителя. Для расширения функциональных возможностей многие разработчики, придерживающиеся принятых стандартов, добавляют к стандартному языку SQL различные расширения.

Следует отметить, что стандарты требуют от любой законченной реализации языка SQL наличия определенных характеристик и в общих чертах отражают основные тенденции, которые не только приводят к совместимости между всеми конкурирующими реализациями, но и способствуют повышению значимости программистов SQL и пользователей реляционных баз данных на современном рынке программного обеспечения. Все конкретные реализации языка несколько отличаются друг от друга. В интересах самих же производителей гарантировать, чтобы их}

Основные категории команд языка SQL:

DDL – язык определения данных;

DML – язык манипулирования данными;

DQL – язык запросов;

DCL – язык управления данными;

команды администрирования данных;

команды управления транзакциями

Для успешного изучения языка SQL необходимо привести краткое писание структуры SQL-операторов и нотации, которые используются для определения формата различных конструкций языка. Оператор SQL состоит из зарезервированных слов, а также из слов, определяемых пользователем. Зарезервированные слова являются постоянной частью языка SQL и имеют фиксированное значение. Их следует записывать в точности так, как это установлено, нельзя разбивать на части для переноса с одной строки на другую. Слова, определяемые пользователем, задаются им самим (в соответствии с синтаксическими правилами) и представляют собой идентификаторы или имена различных объектов базы данных. Слова

в операторе размещаются также в соответствии с установленными синтаксическими правилами.

Идентификаторы языка SQL предназначены для обозначения объектов в базе данных и являются именами таблиц, представлений, столбцов и других объектов базы данных. Символы, которые могут использоваться в создаваемых пользователем идентификаторах языка SQL, должны быть определены как набор символов. Стандарт SQL задает набор символов который используется по умолчанию, – он включает строчные и прописные буквы латинского алфавита (A-Z, a-z), цифры (0-9) и символ подчеркивания (_). На формат идентификатора накладываются следующие ограничения:

идентификатор может иметь длину до 128 символов;

идентификатор должен начинаться с буквы;

идентификатор не может содержать пробелы.

<идентификатор>::=<буква>{<буква>|<цифра>}[...n]

Большинство компонентов языка не чувствительны к регистру. По-

скольку у языка SQL свободный формат, отдельные SQL-операторы и их

последовательности будут иметь более читаемый вид при использовании

отступов и выравнивания.

Язык, в терминах которого дается описание языка SQL, называется

метаязыком. Синтаксические определения обычно задают с помощью спе-

циальной металингвистической символики, называемой Бэкуса-Науэра

формулами (БНФ). Прописные буквы используются для записи зарезер-

вированных слов и должны указываться в операторах точно так, как это

будет показано. Строчные буквы употребляются для записи слов, опре-

деляемых пользователем. Применяемые в нотации БНФ символы и их

обозначения показаны в таблице.

Курс

22

Основы SQL

Символ Обозначение

::= Равно по определению

| Необходимость выбора одного из нескольких приведенных значений

<…> Описанная с помощью метаязыка структура языка

{…} Обязательный выбор некоторой конструкции из списка

[…] Необязательный выбор некоторой конструкции из списка

[,…n] Необязательная возможность повторения конструкции от нуля до нескольких раз

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

Язык SQL содержит специальные средства определения ограничений целостности БД. Опять же, ограничения целостности хранятся в специальных таблицах-каталогах, и обеспечение контроля целостности БД производится на языковом уровне, т.е. при компиляции операторов модификации БД компилятор SQL на основании имеющихся в БД ограничений целостности генерирует соответствующий программный код.

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

Наконец, авторизация доступа к объектам БД производится также на основе специального набора операторов SQL. Идея состоит в том, что для выполнения операторов SQL разного вида пользователь должен обладать различными полномочиями. Пользователь, создавший таблицу БД, обладает полным набором полномочий для работы с этой таблицей. В число этих полномочий входит полномочие на передачу всех или части полномочий другим пользователям, включая полномочие на передачу полномочий. Полномочия пользователей описываются в специальных таблицах-каталогах, контроль полномочий поддерживается на языковом уровне.

Более точное описание возможных реализаций этих функций на основе языка SQL будет приведено в лекциях, посвященных языку SQL и его реализации.

8. SQL Server (определение, назначение, основные объекты).

написано в рубрике: Базы данных +УБД (Т) — Метки: , — Михаил @ 20:49

Технология клиент-сервер

Базы данных занимают лидирующее положение в области информационных технологий. Развитие систем управления базами данных идет по пути интеграции в единое целое, и огромным шагом к этому является использование стандарта обработки данных с помощью структурированного языка запросов SQL. В настоящее время акцент делается на использование сетевых информационных технологий, базирующихся на архитектуре клиент/сервер.

Технология клиент-сервер подразумевает выполнение запросов пользователей специализированным компьютером, называемым сервером. Пользователи, которые отправляют запросы на этот сервер, называются клиентамиa. Запрос на выполнение операции с данными (например, обычная выборка), выдаваемый клиентом, порождает на сервере поиск и извлечение данных. Извлеченные данные транспортируются по сети от сервера к клиенту. Системы, использующие технологию клиент-сервер, разделяются на две части: клиентская часть обеспечивает графический интерфейс и находится на компьютере пользователя; серверная часть обеспечивает управление данными, разделение информации, администрирование и безопасность и находится на специально выделенных для этого компьютерах.

Назначение SQL Server

Задачи, которые ставятся перед системами управления базами данных, давно вышли за рамки простого хранения и изменения данных. Современные базы данных предлагают пользователям огромные возможности по обработке, объединению, изменению и анализу информации, резко повышающие эффективность управления процессами внутри предприятия. Существует несколько основных направлений использования СУБД. Каждое из них имеет свои характерные свойства, диктующие требования к построению специализированных систем. Можно выделить два основных подхода к проектированию систем на основе SQL Server:

· SQL Server как система поддержки принятия решений (технология OLAP);

· SQL Server как система управления обработкой транзакций (технология OLTP).

В последнее время все более популярными становятся системы оперативной аналитической обработки (OLAP - OnLine Analytical Processing). Системы OLAP позволяют значительно улучшить качество анализа баз данных. Особенно большое значение это имеет в бизнесе, где необходимо оперативно принимать решение о наиболее перспективных направлениях развития производства. Фундаментальное отличие системы OLAP от обычной базы данных заключается в следующем:

· система OLAP характеризуется статичностью данных, можно сказать, что база данных используется только для чтения, что позволяет более компактно располагать данные на страницах базы данных, увеличив плотность записи;

· для проведения эффективного анализа в системе OLAP обычно создается множество индексов, ускоряющих проведение анализа и выборки данных;

· система OLAP должна выполнять базовые операции численного и статистического анализа данных; кроме того, необходимо реализовать многомерное представление информации, что позволяет более наглядно представлять структуру данных;

· для более эффективного анализа данных должна поддерживаться возможность создания материализованных представлений, что позволяет резко увеличить производительность выполнения типичных запросов;

· система OLAP объединяет данные из множества источников (например, из разных баз данных, нередко расположенных на разных серверах с различной архитектурой SQL Server и Oracle) и предоставляет их пользователям в логически завершенной форме;

· система OLAP должна обеспечивать сохранность конфиденциальных данных, обеспечивая совместный доступ к информации множеству пользователей.

Корпорация Microsoft предлагает мощный инструмент для поддержки систем принятия решений - Microsoft Decision Support Services, являющийся полноценной реализацией системы OLAP. Microsoft DSS поставляется как отдельный компонент в составе SQ:L Server и реализован в виде отдельной службы операционной системы, оптимизирующей исполнение запросов, не изменяющих данные.

OLAP играет ключевую роль при построении хранилищ данных. Использование MS DSS при создании баз данных позволяет реализовать базовые функции для широкого спектра приложений. Возможность построения больших распределенных баз данных, оперативный анализ их содержимого, интеграция множества источников данных с помощью технологии OLE DB делают привлекательным построение корпоративных баз данных и хранилищ на основе серверов SQL Server.

Другой вариант использования SQL Server -это построение систем управления обработкой транзакций (OLTP - OnLine Transaction Processing). В противоположность системам OLAP системы OLTP характеризуются большим количеством изменений в базе данных. Множество пользователей одновременно обращаются к записям в базе данных, выполняя их чтение, добавление, удаление или изменение. Причем несколько пользователей могут одновременно пытаться изменить одну и ту же запись. База данных должна быть построена как система OLTP, если требуется реализация одного из следующих аспектов работы:

· одновременный доступ; система OLTP должна гарантировать, что только один пользователь в конкретный момент времени сможет изменять данные;

· целостность изменений; все выполняемые в базе данных изменения выполняются в виде транзакций; система OLTP гарантирует, что все включенные в транзакцию шаги будут выполнены как единое целое.

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

7. СУБД (определение, назначение). Основные функции, типовая организация.

написано в рубрике: Базы данных +УБД (Т) — Метки: , — Михаил @ 20:48

Система управления базами данных (СУБД) — это комплекс языковых и про­граммных средств, предназначенный для создания, ведения и совместного использо­вания БД многими пользователями. Обычно СУБД различают по используемой мо­дели данных. Так, СУБД, основанные на использовании реляционной модели дан­ных, называют реляционными СУБД.

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

Основные функции СУБД

Более точно, к числу функций СУБД принято относить следующие:

2.1.1. Непосредственное управление данными во внешней памяти

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

2.1.2. Управление буферами оперативной памяти

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

Заметим, что существует отдельное направление СУБД, которое ориентировано на постоянное присутствие в оперативной памяти всей БД. Это направление основывается на предположении, что в будущем объем оперативной памяти компьютеров будет настолько велик, что позволит не беспокоиться о буферизации. Пока эти работы находятся в стадии исследований.

2.1.3. Управление транзакциями

Транзакция - это последовательность операций над БД, рассматриваемых СУБД как единое целое. Либо транзакция успешно выполняется, и СУБД фиксирует (COMMIT) изменения БД, произведенные этой транзакцией, во внешней памяти, либо ни одно из этих изменений никак не отражается на состоянии БД. Понятие транзакции необходимо для поддержания логической целостности БД. Если вспомнить наш пример информационной системы с файлами СОТРУДНИКИ и ОТДЕЛЫ, то единственным способом не нарушить целостность БД при выполнении операции приема на работу нового сотрудника является объединение элементарных операций над файлами СОТРУДНИКИ и ОТДЕЛЫ в одну транзакцию. Таким образом, поддержание механизма транзакций является обязательным условием даже однопользовательских СУБД (если, конечно, такая система заслуживает названия СУБД). Но понятие транзакции гораздо более важно в многопользовательских СУБД.

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

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

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

2.1.4. Журнализация

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

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

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

Во всех случаях придерживаются стратегии “упреждающей” записи в журнал (так называемого протокола Write Ahead Log - WAL). Грубо говоря, эта стратегия заключается в том, что запись об изменении любого объекта БД должна попасть во внешнюю память журнала раньше, чем измененный объект попадет во внешнюю память основной части БД. Известно, что если в СУБД корректно соблюдается протокол WAL, то с помощью журнала можно решить все проблемы восстановления БД после любого сбоя.

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

При мягком сбое во внешней памяти основной части БД могут находиться объекты, модифицированные транзакциями, не закончившимися к моменту сбоя, и могут отсутствовать объекты, модифицированные транзакциями, которые к моменту сбоя успешно завершились (по причине использования буферов оперативной памяти, содержимое которых при мягком сбое пропадает). При соблюдении протокола WAL во внешней памяти журнала должны гарантированно находиться записи, относящиеся к операциям модификации обоих видов объектов. Целью процесса восстановления после мягкого сбоя является состояние внешней памяти основной части БД, которое возникло бы при фиксации во внешней памяти изменений всех завершившихся транзакций и которое не содержало бы никаких следов незаконченных транзакций. Для того чтобы этого добиться, сначала производят откат незавершенных транзакций (undo), а потом повторно воспроизводят (redo) те операции завершенных транзакций, результаты которых не отображены во внешней памяти. Этот процесс содержит много тонкостей, связанных с общей организацией управления буферами и журналом. Более подробно мы рассмотрим это в соответствующей лекции.

Для восстановления БД после жесткого сбоя используют журнал и архивную копию БД. Грубо говоря, архивная копия - это полная копия БД к моменту начала заполнения журнала (имеется много вариантов более гибкой трактовки смысла архивной копии). Конечно, для нормального восстановления БД после жесткого сбоя необходимо, чтобы журнал не пропал. Как уже отмечалось, к сохранности журнала во внешней памяти в СУБД предъявляются особо повышенные требования. Тогда восстановление БД состоит в том, что исходя из архивной копии по журналу воспроизводится работа всех транзакций, которые закончились к моменту сбоя. В принципе, можно даже воспроизвести работу незавершенных транзакций и продолжить их работу после завершения восстановления. Однако в реальных системах это обычно не делается, поскольку процесс восстановления после жесткого сбоя является достаточно длительным.

2.1.5. Поддержка языков БД

Для работы с базами данных используются специальные языки, в целом называемые языками баз данных. В ранних СУБД поддерживалось несколько специализированных по своим функциям языков. Чаще всего выделялись два языка - язык определения схемы БД (SDL - Schema Definition Language) и язык манипулирования данными (DML - Data Manipulation Language). SDL служил главным образом для определения логической структуры БД, т.е. той структуры БД, какой она представляется пользователям. DML содержал набор операторов манипулирования данными, т.е. операторов, позволяющих заносить данные в БД, удалять, модифицировать или выбирать существующие данные. Мы рассмотрим более подробно языки ранних СУБД в следующей лекции.

В современных СУБД обычно поддерживается единый интегрированный язык, содержащий все необходимые средства для работы с БД, начиная от ее создания, и обеспечивающий базовый пользовательский интерфейс с базами данных. Стандартным языком наиболее распространенных в настоящее время реляционных СУБД является язык SQL (Structured Query Language). В нескольких лекциях этого курса язык SQL будет рассматриваться достаточно подробно, а пока мы перечислим основные функции реляционной СУБД, поддерживаемые на “языковом” уровне (т.е. функции, поддерживаемые при реализации интерфейса SQL).

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

Язык SQL содержит специальные средства определения ограничений целостности БД. Опять же, ограничения целостности хранятся в специальных таблицах-каталогах, и обеспечение контроля целостности БД производится на языковом уровне, т.е. при компиляции операторов модификации БД компилятор SQL на основании имеющихся в БД ограничений целостности генерирует соответствующий программный код.

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

Наконец, авторизация доступа к объектам БД производится также на основе специального набора операторов SQL. Идея состоит в том, что для выполнения операторов SQL разного вида пользователь должен обладать различными полномочиями. Пользователь, создавший таблицу БД, обладает полным набором полномочий для работы с этой таблицей. В число этих полномочий входит полномочие на передачу всех или части полномочий другим пользователям, включая полномочие на передачу полномочий. Полномочия пользователей описываются в специальных таблицах-каталогах, контроль полномочий поддерживается на языковом уровне.

Более точное описание возможных реализаций этих функций на основе языка SQL будет приведено в лекциях, посвященных языку SQL и его реализации.

2.2. Типовая организация современной СУБД

Естественно, организация типичной СУБД и состав ее компонентов соответствует рассмотренному нами набору функций. Напомним, что мы выделили следующие основные функции СУБД:

  • управление данными во внешней памяти;
  • управление буферами оперативной памяти;
  • управление транзакциями;
  • журнализация и восстановление БД после сбоев;
  • поддержание языков БД.

Логически в современной реляционной СУБД можно выделить наиболее внутреннюю часть - ядро СУБД (часто его называют Data Base Engine), компилятор языка БД (обычно SQL), подсистему поддержки времени выполнения, набор утилит. В некоторых системах эти части выделяются явно, в других - нет, но логически такое разделение можно провести во всех СУБД.

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

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

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

На рис. представлена последовательность основных действий, реализуемых системой управления базами данных в процессе считыва­ния записи для прикладной программы. Этот процесс сопровождается рядом действий, которые не представлены на рис. 7.1 и зависят от струк­туры средств программного обеспечения. Мы обсудим их позднее. Ниже в соответствии с цифрами в кружках на рис. 7.1 приводится описание тех 11 действий, которые являются наиболее важными для процесса чтения записи.

1. Прикладная программа А выдает запрос на чтение записи системе управления базами данных. Программа сообщает имя программиста затребовавшего этот тип данных, и передает в запросе значение ключа сегмента или записи.

2. Система управления базами данных получает в распоряжение подсхему, используемую прикладной программой А (или описание данных для прикладной программы), и осуществляет в ней поиск опи­сания данных, на которые выдан запрос.

3. Система управления базами данных получает в распоряжение схему (глобальное логическое описание данных) и с ее помощью опре­деляет, какого типа (или каких типов) логические данные необходимы.

4. Система управления базами данных просматривает описание физической организации базы данных и определяет, какую физиче­скую запись (или записи) требуется считать.

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

6. Операционная система взаимодействует с физической памятью, в которой хранятся данные.

7. Запрошенные данные передаются из памяти в системные буферы.

8. Система управления базами данных, осуществляя сравнение схемы и подсхемы, выделяет ту логическую запись, которая запрошена прикладной программой. Любое преобразование данных, необходи­мость в котором возникает из-за различия в описании одних и тех же данных в схеме и подсхеме, выполняется системой управления базами данных.

9. Система управления базами данных передает данные из систем­ных буферов в рабочую область прикладной программы А.

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

11. Прикладная программа обрабатывает данные, помещенные в ее рабочую область.

В том случае, когда прикладная программа обновляет запись, осу­ществляется аналогичная последовательность действий. Запись сна­чала обычным образом считывается и модифицируется в рабочей обла­сти программы, а затем системе управления базами данных передается команда записать обратно модифицированные данные. Система управ­ления базами данных будет осуществлять любые необходимые преобра­зования данных в системных буферах обратные тем преобразова­ниям, которые были сделаны при считывании данных. Затем система управления базами данных выдает операционной системе команду ЗА­ПИСАТЬ.

< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 >

© Проект «Студенты-Программеры»., 2008. Все права защищены.
Перепечатка материалов только при наличии активной ссылки на источник.
Powered by WordPress