Хранение данных и доступ к ним
11.8 Об архитектуре системы управления базами данных
Пытаться построить полную общую модель СУБД дело заведомо безнадежное. Например, архитектуры изучавшейся нами Cache и Oracle вообще трудно сопоставимы. Однако, общее на уровне выполняемых функций и в работе с памятью найти можно.
11.8.1 Архитектура памяти
Очевидно, любая СУБД должна управлять оперативной и внешней памятью.
В оперативной памяти обязательно поддерживаются кэш буферов базы и кэш буферов журналов (рисунок 11.11), которые мы изучали. Выделяется место для пользовательских и серверных процессов. Разделяемый пул содержит кэш словаря и библиотечный кэш. Последний предназначен для хранения и обработки курсоров, представляющих рекомендованный стандартом механизм исполнения запросов в SQL.
Курсором называется область оперативной памяти, содержащая текст запроса, место для хранения его результата и указатель на строки результата.
Курсоры могут использоваться процедурными языками, которыми снабжаются все SQL базы данных. В Oracle это PL/SQL, в MS SQLServer язык TransactSQL. В Cache с курсорами можно работать из программ написанных в COS.
Кэш словаря представляет буфер, используемый для хранения данных словаря, извлеченных из дискового накопителя. Заметим, что данные словаря могут блокироваться, чтобы избежать появления ошибочных результатов. Однако, в самой базе данных блокировки явно или не явно выставляет пользователь. К словарю непосредственно пользователь обычно не обращается. Поэтому он не может управлять блокировками словаря непосредственно. Возможно только косвенное управление, для которого необходимо хорошо представлять работу словаря.
Вторичная память содержит, конечно, файлы данных и журнальные файлы. Архив журнальных файлов при включении режима архивирования позволяет сохранить все изменения базы и при необходимости откатить базу на любое время с момента ее создания. Файл параметров это известный вам по другим приложениям файл инициализации, содержащий параметры, используемые при запуске СУБД. Может использоваться зашифрованный файл паролей.
11.8.2 Пользователи
Пора вспомнить незаслуженно забытого нами пользователя (user). Обычно пользователь имеет имя, пароль и конфигурацию.
Команда создания пользователя может начинаться так:
CREATE USER имя_пользователя IDENTIFIED BY пароль ...
Конфигурация в Oracle определяет:
- табличное пространство по умолчанию;
- временное табличное пространство;
- квоты на табличные пространства;
- профиль.
Профиль может задавать ограничения на используемые ресурсы, такие как время подключения, время процессора на сеанс, максимальный объем использованной оперативной памяти.
Пользователю обычно можно присваивать привилегии — это права на выполнение определенных действий, таких как открытие сессии, создание таблицы, уничтожение таблицы и т. д. Наборы привилегий могут объединяться в роли, очень часто именуемые названиями должностей или видов деятельности.
Задача администрирования пользователей достаточно сложна. С одной стороны необходимо максимально ограничить их возможности. Это позволяет избежать чрезмерной нагрузки на систему и уменьшить возможность злоупотреблений. С другой стороны, введенные ограничения не должны мешать пользователю выполнять свою работу.
Для эффективного решения задачи управления пользователями необходимо хорошо разбираться в обслуживаемом бизнесе, понимать как штатные, так и возможные нештатные ситуации.
11.9 Администрирование и программирование
Ограниченность объема и выбранная направленность книги не позволяют нам больше задерживаться на вопросах администрирования баз данных.
Все же полученных скудных сведений об архитектуре СУБД достаточно, чтобы представить себе сложность управления базами данных и тот громадный объем труда, который был вложен в создание любой СУБД, а тем более таких долгожителей как Cache и Oracle.
Начинающим полезно иметь хотя бы общие представления о той "закулисной" деятельности, которую ведет СУБД, исполняя инструкции какого-нибудь языка, и о том, что современная СУБД может сама анализировать структуры данных и даже исправлять их недостатки. Есть основания полагать, что в задачах оптимизации планов исполнения, автоматического исправления индексов и устранения вредной фрагментации данных используются системы искусственного интеллекта.
Знакомство со структурами хранения данных, с планами исполнения и оптимизацией запросов — это важная часть программистской культуры начинающего специалиста по базам данных.
В целом, администрирование баз данных — это обширная область, требующая большого объема специфических знаний и навыков. Конечно, знания программиста и администратора во многом пересекаются. Однако, существует принципиальное различие в жизненных позициях администратора и программиста. У программиста при виде чужой программы от желания все переделать начинают чесаться шаловливые ручки. Администратор, как хорошая мама, живет жизнью своего ребенка, то есть приложения, базы данных. Он должен понимать состояние приложения сегодня, и знать, как оно меняется в последнее время. Он должен знать, что для улучшения положения дел ему часто придется двигаться методом проб и ошибок. Поэтому он всегда обеспечивает возможность возврата к прежнему состоянию. Как сказал один хороший администратор: "Я из тех людей, которые, прежде чем взяться за ручку двери думают, а как я оттуда буду выходить?".
Можно предположить, что администрирование — это преимущественно женская профессия. Но женщин-администраторов все же немного. Слишком тяжел груз ответственности и слишком многое нужно знать.