Обычно СУБД Oracle при подключении пользователя создает новый процесс. Это
принято называть конфигурацией выделенного сервера, поскольку на все время сеанса ему
выделяется отдельный серверный процесс. Сеансы и выделенные серверы находятся в
отношении один к одному. Клиентский процесс (любая программа, пытающаяся под-
ключиться к СУБД) будет непосредственно взаимодействовать с соответствующим вы-
деленным сервером по сети, например, через сокет TCP/IP. Именно этот сервер будет
получать и выполнять SQL-операторы. Он будет читать файлы данных, а также искать
необходимые данные в кэше. Он будет выполнять операторы UPDATE и PL/SQL-код.
Единственное его назначение - отвечать на получаемые SQL-запросы.
СУБД Oracle также может работать в режиме многопотокового сервера (multi-threaded
server - MTS), в котором при подключении не создается дополнительный поток или
процесс UNIX. В режиме MTS СУБД Oracle использует пул "разделяемых серверов" для
поддержки большого количества пользователей. Разделяемые серверы - это просто ме-
ханизм организации пула подключений. Вместо запуска 10000 выделенных серверов (это
действительно много, если речь идет о процессах или потоках) для 10000 сеансов ре-
жим MTS позволяет обслуживать их с помощью гораздо меньшего количества разделя-
емых серверов, которые (как следует из названия) будут совместно использоваться все-
ми сеансами. Это позволяет СУБД Oracle поддерживать намного больше сеансов, чем в
режиме выделенного сервера. Машина, на которой работает сервер, может не справиться
с поддержкой 10000 процессов, но управление 100 или 1000 процессами для нее вполне
реально. В режиме MTS разделяемые серверные процессы обычно запускаются сразу старте СУБД и отображаются в списке, выдаваемом командой ps (в представленных выше
результатах выполнения команды ps процесс ora_s000_ora816dev представляет собой
разделяемый серверный процесс).
Принципиальное отличие режима MTS от режима выделенного сервера состоит в том,
что клиентский процесс, подключившийся к СУБД, никогда не взаимодействует непос-
редственно с разделяемым сервером, как это происходит в случае выделенного сервера.
Он не может взаимодействовать с разделяемым сервером, так как соответствующий
процесс используется совместно. Чтобы обеспечить совместное использование этих про-
цессов, необходим другой механизм взаимодействия. Для этого в СУБД Oracle исполь-
зуется процесс (или набор процессов), которые называют диспетчерами. Клиентский
процесс взаимодействует по сети с процессом-диспетчером. Процесс-диспетчер поме-
щает запрос клиента в очередь запросов в SGA (это одно из многих назначений области
SGA). Первый же свободный разделяемый сервер выберет и обработает этот запрос (на-
пример, запрос может иметь вид UPDATE T SET X = Х+5 WHERE Y = 2). По заверше-
нии выполнения команды разделяемый сервер поместит ответ в очередь ответов. Про-
цесс-диспетчер следит за очередью и немедленно передает полученный результат
клиенту. Концептуально поток информации в режиме MTS выглядит следующим обра-
зом:
Клиентское подключение посылает запрос диспетчеру. Диспетчер поместит этот зап-
рос в очередь запросов в области SGA (1). Первый свободный разделяемый сервер вы-
берет этот запрос (2) из очереди и обработает его. Когда разделяемый сервер закончит
выполнение, ответ (коды возврата, данные и т.д.) помещается в очередь ответов (3), после
чего выбирается диспетчером (4) и возвращается клиенту.
С точки зрения разработчика нет никакой разницы между подключением к серверу
в режиме MTS и подключением к выделенному серверу.