Шаг 74 - Архитектура БД Oracle

Думаю пришло время, поговорить о том, как вообще устроена СУРБД Oracle. Когда речь идет о БД Oracle, то обычно имеется в виду система управления БД. Но, для профессиональных пользователей БД Oracle необходимо понимание разницы между собственно Базой Данных и экземпляром. Иногда эти два понятия вводят в заблуждение администраторов БД других фирм разработчиков. Высокий уровень сервиса гибкость и производительность, которую БД Oracle предоставляет клиентам обеспечивается сложным комплексом структур памяти и процессов операционной системы. Все эти понятия в совокупности называются "экземпляром" (instance). Любая БД Oracle имеет связанный с ней экземпляр. Тот самый, который мы с вами получили при инсталляции. Сама по себе организация экземпляра позволяет СУРБД обслуживать множество типов транзакций, инициируемых одновременно большим количеством пользователей, в то же время обеспечивая высокую производительность, целостность данных и безопасность. При работе БД Oracle одновременно присутствует множество процессов, выполняющих специфические задачи, в рамках СУРБД. Каждый процесс имеет отдельный блок памяти, в котором сохраняются локальные переменные, стек адресов и другая информация. Все эти процессы используют так называемую - "разделяемую область памяти". В ней хранятся данные общего пользования. Доступ к этой памяти, как для записи, так и для чтения, могут получить одновременно различные процессы и программы. Этот блок памяти вообще называется - "Глобальной Системной Областью" или ГСО. По-английски в документации это звучит как System Global Area - SGA. Еще можно уточнить, так как ГСО находится в разделяемом сегменте памяти, ее еще часто называют "Разделяемой Глобальной Областью" Shared Global Area. Вообще просто следует запомнить, что это за область и для чего она нужна. А, как ее назвать это уже на ваше усмотрение. :) Кстати, если провести аналогию между процессами системы и, например, организмом человека, то SGA это мозг, а процессы это скажем руки, ноги, уши и т.д. Но всеми органами (процессами) управляет единый центр мозг (SGA), так как она координирует все процессы обработки информации происходящие в системе. Вот собственно, так и взаимодействует этот сложный "организм".

БД Oracle производит свое формирование следующим образом. Весь процесс делится примерно на три этапа:

  1. Формирование экземпляра Oracle (предустановочная стадия)
  2. Установка БД экземпляром (установочная стадия)
  3. Открытие БД (стадия открытия)

Далее по порядку. Экземпляр Oracle формируется на предустановочной стадии запуска системы. На этой стадии считывается файл параметров init.ora, запускаются фоновые процессы, и инициализируется ГСО (SGA). При этом имя экземпляра устанавливается в соответствии со значением указанным в init.ora. Следующая стадия - установочная. Значения параметров контрольного файла init.ora определяют параметры БД, устанавливаемой экземпляром. На данном этапе доступ к контрольному файлу открыт и возможна модификация данных, которые в нем хранятся. И на последней стадии собственно открывается сама База данных. Экземпляр получает исключительный доступ к файлам БД, имена которых, хранятся в контрольном файле и через него они становятся доступны пользователям БД. Фактически, если смотреть на открытие как состояние, то это скорее нормальное рабочее состояние БД. Заметим сразу, что до тех пор, пока БД не будет открыта, к ней может получить доступ только администратор БД и только через утилиту Server Manager. (В версии Oracle 9 этой утилиты нет. Её функции полностью переданы SQL*Plus. Так же, схема INTERNAL в Oracle 9 отсутствует.) Наверное, вы немного подустали уже от сухой теории, да и тот парень на галерке, по-моему, уже посапывает! Давайте разбудим его! :) Посмотрим, как можно управлять БД, используя утилиту Server Manager. Войдите в каталог ..\Oracle\ora81\Bin вашей учебной БД имеющей SID - proba. Затем создайте в этом каталоге bat файл с именем serverora.bat и таким содержимым:

set nls_lang=russian_cis.ru8pc866
SVRMGRL.EXE

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

Oracle Server Manager Release 3.1.5.0.0 - Production

Copyright (c) Oracle Corporation 1994, 1995, 1997. Все права защищены.

Oracle8i Enterprise Edition Release 8.1.5.0.0 - Production
With the Partitioning and Java options
PL/SQL Release 8.1.5.0.0 - Production

SRVMGR>_

Введите в ответ на приглашение - internal/oracle@proba или, если вы все делаете на самом сервере - internal/oracle.

Получите в ответ:

SRVMGR> internal/oracle
Связь установлена.
SRVMGR>_

Затем введите на приглашение:

SRVMGR> SHUTDOWN NORMAL

Через некоторое время увидим следующее:

База данных закрыта
База данных демонтирована.
Экземпляр ORACLE закрыт.

SRVMGR>_

Если сначала вы запустите диспетчер задач и перейдете на его закладку Performance, то будете при этом наблюдать следующую картину:

74_1.gif (20815 b)

Это картинка с моего сервера, у меня два процессора и Win2000 Server. Как видно, большая часть ОЗУ очистилась, так как произошло закрытие сервера Oracle. Обратите внимание на последовательность сообщений сначала происходит закрытие БД, а затем БД демонтируется. (подобные сообщения выдавал файл-сервер Novell, только там монтировались и демонтировались тома) и в конце экземпляр БД закрывается. Кстати, если еще остановить сам сервис, занимаемой памяти станет еще меньше. Вот так с помощью Server Manager, можно остановить ваш экземпляр БД. Далее, давайте его запустим, вводим:

SRVMGR> STURTUP FORCE

Получаем после нажатия Enter

Экземпляр ORACLE запущен.
Всего байтов System Global Area                        547758028
Fixed Size                                          65484 байтов
Variable Size                                   143876096 байтов
Database Buffers                                403742720 байтов
Redo Buffers                                        73728 байтов
База данных смонтирована.
База данных открыта.

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

74_2.gif (21044 b)

Теперь хорошо видно, что объем занимаемой памяти увеличился! :) К утилите Server Manager мы еще вернемся, так как она выполняет еще ряд полезных функций, а пока еще раз все внимательно разберите. Да и в конце не забудьте дать команду exit:

SRVMGR> exit

Получите:

Server Manager закончил работу.

И в заключении, экземпляр в котором не установлена БД, называется не занятым (idle). Он занимает память но, не выполняет никакой работы. Это как раз примерно то, о чем я говорил выше. Экземпляр остановлен, а сервис еще нет. Хотя в вашем случае сама БД уже есть, просто она остановлена. Надеюсь, теперь понятно, что такое экземпляр, а что такое сервер БД. :)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 9.12.2003