DeepEdit!

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

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Вниз по клиентскому стеку

Чтобы лучше понять, как все это работает, проследим путь запроса, передаваемого от клиента к серверу. Начнем с клиентского приложения, которое предоставляет пользователю экранный интерфейс к базе данных и определяет, какие операции нужно запрашивать у сервера.
Уровень OCI используется для инициирования диалога между клиентом и сервером, чтобы сервер мог начать обработку запроса с синтаксической проверки SQL-оператора. В SQL*Net версии 2 этот уровень назывался программным интерфейсом пользователя (User Program Interface, UPI), но его функции были точно такими же. Для оператора SQL открывается курсор или буферная область, и все переменные клиентского приложения помещаются в область разделяемой памяти сервера. Размещение переменной в области памяти для последующего использования в SQL-запросе называется связыванием (binding). Переменные клиентской прикладной программы, используемые в SQL-операторах, хранятся в стеке глобальной области процесса (Process Global Area, PGA). В процессе связывания происходит получение ссылок (указателей) на значения, хранимые в PGA. Поскольку связывание выполняется по ссылке, переменную не требуется связывать заново перед повторным выполнением SQL-оператора; достаточно просто изменить ее значение.
Затем с помощью серверного словаря данных определяется состав возвращаемых полей и начинается выполнение SQL-оператора в пространстве памяти курсора. В ходе выполнения оператора клиентскому приложению посылаются строки данных, а приложение выводит их на экран. Когда вся информация будет извлечена, курсор или буферная область памяти закрывается и освобождается.
В зависимости от того, как написано приложение, вызовы либо группируются в одно сообщение, либо посылаются по очереди. Разумеется, цель состоит в том, чтобы минимизировать количество обращений к серверу и тем самым сократить сетевой трафик. После инициирования вызова управление передается от уровня ОСI к уровням Net8, обеспечивающим установление соединения и передачу запроса серверу.
Уровень Two-Task Common В модели ISO/OSI уровень представления данных обеспечивает согласование форматов данных, используемых разными компьютерами. Уровень Two-Task Common представляет собой Oracle-реализацию уровня представления данных. Он выполняет преобразования между различными наборами символов и форматами данных, используемыми клиентом и сервером. Для уменьшения затрат времени и ресурсов этот уровень спроектирован так, чтобы выполнять преобразование только при необходимости. Именно здесь принимается решение о том, нужно ли преобразовывать данные. С этой целью производится сравнение внутренних представлений данных и наборов символов.
Уровни Net8 Net8 выполняет функции сеансового уровня. Он устанавливает и поддерживает соединения между клиентом и сервером, обеспечивая обмен сообщениями. Как следует из таблицы 2.1, этот уровень состоит из трех компонентов: N1, связки NR/NN/NA и TNS. Они выполняют следующие функции:
Сетевой интерфейс (NT) обрабатывает запросы на разрыв ("break") и сброс ("reset") соединения.

Средства сетевой маршрутизации (NR) обеспечивают маршрутизацию сообщений к месту назначения. Маршрут может состоять из любого числа промежуточных узлов.
Средства сетевого именования (NN) разрешают имена сетевых служб в адреса назначения Net8.
Средства сетевой аутентификации (NA) обеспечивают аутентификацию, которую может потребовать сервер.
•        Прозрачный сетевой субстрат (TNS) предоставляет универсальный интерфейс к стандартным сетевым протоколам, позволяющий открывать/закрывать соединения и посылать/принимать запросы от
Net8, а также решает общие коммуникационные задачи машинного уровня.
Компонент TNS вызывает особый интерес, поскольку он самым непосредственным образом взаимодействует с базовыми сетевыми протоколами, определяя следующее:
•        Местонахождение клиента или сервера, а также количество используемых протоколов.
•        Способ обработки прерываний между клиентом и сервером.
•        Когда и как передавать управление протоколу Oracle для выполнения вызовов, зависящих от протокола.
Для защиты передаваемых данных TNS поддерживает шифрование и генерацию криптографических дайджестов сообщений.
Все описанные уровни жизненно важны, поскольку при отсутствии какого-либо из них клиентское приложение не сможет успешно связываться с сервером базы данных.
Что происходит на стороне сервера
Когда сообщение принято на стороне сервера, оно передается вверх по серверному стеку к базе данных, которая обрабатывает запрос. Серверный стек похож на клиентский, но запрос передается по нему в обратном порядке — от уровня TNS через программный интерфейс Oracle к серверу Oracle. После обработки запроса результаты возвращаются клиентскому приложению — через серверный стек, сеть и клиентский стек.
В случае связей "сервер-сервер" общая схема остается прежней. Единственное отличие состоит в том, что вместо клиентского приложения здесь используется специальный серверный OCI, называемый сетевым программным интерфейсом (Network Program Interface, NPI). NPI позволяет серверу конструировать SQL-запросы для взаимодействия с другими серверами, а при необходимости может выполнять все функции уровня OCI.
Коммуникационные стеки, используемые Oracle
В предыдущем разделе мы рассмотрели общую структуру стандартного коммуникационного стека Oracle, используемого на стороне клиента и на стороне сервера, а также коснулись связей "сервер-сервер". Однако Oracle поддерживает и другие стеки. В частности, уровень представления данных может быть реализован с помощью универсального межброкерного протокола (General Inter-ORB Protocol, GIOP). Аббревиатура ORB расшифровывается как "брокер объектных запросов" (Object Request Broker). Версия GIOP, используемая в Oracle, называется межброкерным Интернет-протоколом (Internet Inter-ORB Protocol, ПОР) и работает поверх TCP/IP или TCP/IP с SSL (Secure Socket Layer). ПОР позволяет взаимодействовать с базой данных Oracle тем клиентам, которые используют Java.

 









jAntivirus