2 Система управления базой данных

 

2.1 Понятие СУБД

 

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

- позволяет создать базу данных и объекты базы данных;

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

- поддержка языка манипулирования данными;

- способность к интеграции с коммуникационным программным обеспечением;

- предоставляет контролируемый доступ к базе данных с помощью перечис­ленных ниже средств:

- системы обеспечения защиты, предотвращающей несанкционированный доступ к базе данных со стороны пользователей;

- системы поддержки целостности данных, обеспечивающей непротиворе­чивое состояние хранимых данных;

- системы управления параллельной работой приложений, контролирую­щей процессы их совместного доступа к базе данных;

- системы восстановления, позволяющей восстановить базу данных до предыдущего непротиворечивого состояния, нарушенного в результате сбоя аппаратного или программного обеспечения;

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

- интеграция с коммуникационным программным обеспечением.

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

 

 

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

 

К числу основных функций СУБД принято относить следующие.

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

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

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

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

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

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

 

Описание: Описание: Оперативная память, управляемая СУБД

 

Рисунок 2.1 – Структура оперативной памяти

 

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

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

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

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

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

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

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

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

Существует два способа завершения транзакций: фиксация и откат. Фиксация транзакции — действие, обеспечивающее запись на диск изменений в БД, которые были сделаны в процессе выполнения транзакции. До тех пор пока транзакция не зафиксирована, еще возможно аннулирование изменений и восстановление БД в состояние, предшествующее началу выполнения транзакции. В результате фиксации транзакции все изменения в БД становятся постоянными. Если в процессе выполнения транзакции возникает исключительная ситуация, которая делает невозможным нормальное завершение данной транзакции, база данных должна быть возвращена в исходное состояние. Откат транзакции  — это   действие, аннулирующее все изменения данных, которые были выполнены операторами SQL в теле текущей незавершенной транзакции.

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

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

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

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

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

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

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

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

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

-       QBE (Query By Example) - язык зап­росов по образцу;

-       SQL (Structured Query Language) - структурированный язык зап­росов.

QBE в основном обладает свойствами языка манипулирования данными.

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

-       позволяет определять схему реляционной БД и манипулировать данными;

-       содержит специальные средства определения ограничений целостности БД. Ограничения целостности хранятся в специальных таблицах-каталогах;

-       специальные операторы языка позволяют определять так называемые представления БД, фактически являющиеся хранимыми в БД запросами с именованными столбцами;

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

 

 

2.3 Аспекты классификация СУБД

 

СУБД принято классифицировать по следующим аспектам.

1. По языкам:

1.1. открытые (используют универсальные языки программирования);

1.2. замкнутые (собственные языки взаимодействия с пользователем);

1.3. смешанные.

 

2. По числу уровней в архитектуре:

2.1. одноуровневые (поддерживают только физическую модель);

2.2. двухуровневые (физическая, концептуальная модели);

2.3. трехуровневые (физическая, концептуальная, внешняя модели).

 

3. По функциям:

3.1. информационные  (допускают хранение и доступ к информации);

3.2. операционные (хранение, доступ и обработка информации).

 

4. По сфере применения:

4.1. универсальные;

4.2. специализированные.

 

5. По типам данных:

5.1. с фиксированным набором типов данных;

5.2. расширяемые (можно определять новые типы данных и операции над  ними).

 

6. По характеру использования:

6.1 персональные (настольные, Visual FoxPro, Paradox, Clipper, dBase, Access и др.);

6.2 многопользовательские (серверные).

 

7. По используемой модели данных:

7.1 иерархические (IMS, PC/Focus, Team-Up и Data Edge, Ока, ИНЭС и МИРИС);

7.2 сетевые (IDMS, db VistaIII, СЕТЬ, СЕТОР и КОМПАС);

7.3 реляционные;

7.4 постреляционные (uniVerse, Bubba, Dasdb, Adabas, Pick);

7.5 многомерные (Cache, Teradata);

7.5 объектно-ориентированные (Cache, FastObjects , GemStone/S , Jasmine, ObjectStore , Objectivity/DB, Versant, РОЕТ, Jasmine, 02, ODB-Jupiter, Iris, Orion, Postgres. GemStone, ONTOS).

Некоторые СУБД могут одновременно поддерживать несколько моделей данных.

 

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

Серверная (server) СУБД, как правило, запускается  на той же машине (сервере баз данных), где находятся файлы БД. Непосредственно к базе данных обращается лишь один экземпляр СУБД. Пользовательские приложения общаются только с этой СУБД через ее API, независимо от того, работают они на той же машине или на другой -  IBM DB2 Universal Database, Oracle Database, Microsoft SQL Server, IBM Informix Dynamic Server, Sybase Adaptive Server, Borland InterBase, PostgreSQLMySQL.

 

 

2.4 Компоненты среды СУБД

 

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

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

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

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

Существуют следующие виды программ СУБД.

Полнофункциональные СУБД (ПФСУБД).  К ПФСУБД относятся, например, такие пакеты как: Clarion Database Developer, DataBase, Dataplex, dBase IV, Microsoft Access, Microsoft FoxPro и Paradox R:BASE и др. ПФСУБД имеют развитый интерфейс, позволяющий с помощью команд меню выполнять основные действия с БД: создавать и модифицировать структуры БД, вводить данные, формировать запросы, разрабатывать отчеты, выводить их на печать и т. п. Для создания запросов и отчетов не обязательно знания языков программирования или языка запросов, иногда удобно пользоваться языком QBE (Query By Example формулировки запросов по образцу).

Серверы БД. Предназначены для организации центров обработки данных в сетях ЭВМ. Серверы БД реализуют функции управления базами данных, запрашиваемые другими (клиентскими) программами обычно с помощью операторов SQL. Примерами серверов БД являются следующие программы: NetWare SQL (Novell), MS SQL Server (Microsoft), InterBase (Borland), SQLBase Server (Gupta), Intelligent Database (Ingress).

Клиенты БД. В роли клиентских программ для серверов БД в общем случае могут использоваться различные программы: ПФСУБД, электронные таблицы, текстовые процессоры, программы электронной почты и т. д. При этом элементы пары «клиент — сервер» могут принадлежать одному или разным производителям программного обеспечения.  В случае, когда клиентская и серверная части выполнены одной фирмой, естественно ожидать, что распределение функций между ними выполнено рационально. В остальных случаях обычно преследуется цель обеспечения доступа к данным «любой ценой».  Примером такого соединения является случай, когда одна из полнофункциональных СУБД играет роль сервера, а вторая СУБД (другого производителя) — роль клиента. Так, для сервера БД SQL Server (Microsoft) в роли клиентских (фронтальных) программ могут выступать многие СУБД, такие как: dBASE IV, Blyth Software, Paradox, DataBase, Focus, 1-2-3, MDBS III, Revelation и др.

Средства разработки программ работы с БД. Обычно приложения создаются на языках программирования высокого уровня, таких как С, С++, Java, Visual Basic, COBOL, Fortran, Ada или Delphi. Впрочем, СУБД может иметь свои собственные инструменты, предназначен­ные для быстрой разработки приложении с использованием встроенных непроце­дурных языков запросов, генераторов отчетов, форм, графических изображений и даже полномасштабных приложений.

Данные. Cамым важным компонентом среды СУБД (с точки зрения конечных пользователей) являются данные.

База данных содержит как рабочие данные, так и метаданные, т.е. "данные о данных" в виде системного каталога. В системном каталоге содержатся следующие сведения:

- имена, типы и размеры элементов данных;

- имена связей;

- ограничения целостности данных;

- имена зарегистрированных пользователей, которым предоставлены некоторые права доступа к данным;

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

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

-        регистрация в СУБД;

-        запуск и останов СУБД;

-        создание резервных копий СУБД;

-        обработка сбоев аппаратного и программного обеспечения;

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

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

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

Основные задачи, связанные администрированием данных, перечислены ниже:

-    выбор подходящих инструментов разработки;

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

-    разработка корпоративной модели данных;

-    определение требований организации к используемым данным;

-    определение стандартов сбора данных и выбор формата их представления;

-    оценка объемов данных и вероятности их роста;

-    определение способов и интенсивности использования данных;

-    определение правил доступа к данным и мер безопасности, соответствующих правовым нормам и внутренним требованиям организации;

-    концептуальное и логическое проектирование базы данных;

-    взаимодействие с администратором БД и разработчиками приложений с целью обеспечения соответствия созданных приложений всем существующим требованиям;

-    обучение пользователей - изучение существующих стандартов обработки данных и юридической ответственности за их некорректное применение;

-    постоянная модернизация используемых информационных систем и технологий по мере развития бизнес-процессов;

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

-    поддержка словаря данных организации;

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

-    разработка правил защиты.

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

Основные задачи администрирования базы данных перечислены ниже:

-   оценка и выбор целевой СУБД;

-   физическое проектирование базы данных;

-   реализация физического проекта базы данных в среде целевой СУБД;

-   определение требований защиты и поддержки целостности данных;

-   взаимодействие с разработчиками приложений баз данных;

-   разработка стратегии тестирования;

-   обучение пользователей;

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

-   контроль текущей производительности системы и соответствующая настройка базы данных;

-   регулярное резервное копирование;

-   разработка требуемых механизмов и процедур восстановления;

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

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

По сравнению с АД, обязанности АБД носят более технический характер и для него необходимо зна­ние конкретной СУБД и системного окружения.

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

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

-       конечные пользователи - обычно обращаются к БД с помощью специальных приложений, позволяющих в максимальной степени упростить выполняемые ими операции;

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

 

 

2.5 Типовая организация СУБД

 

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

 

Описание: Описание: Основные компоненты СУБД

 

Рисунок 2.2 – Типовая организация СУБД

 

 

Рисунок 2.3 – Основные компоненты СУБД

 

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

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

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

Приведем примеры таких утилит:

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

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

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

- инструменты реорганизации индексов, предназначенные для перестройки индексов и обработки случаев их переполнения;

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