Протокольный адаптер Oracle
Протокольный адаптер Oracle отвечает за установление соответствия между функциями TNS и промышленно-стандартным протоколом, использующимся в соединении клиент/сервер (или в отдельной части такого соединения, в случае соединения между множественными сообществами). Каждый протокольный адаптер отвечает за установление эквивалентности между TNS и функциями конкретного протокола, включая трансляцию форматов параметров и разрешение тонкостей, связанных с характеристиками времени в том или ином протоколе.
Конкретные сетевые протоколы
Любое программное обеспечение Oracle в процессе соединения клиент/сервер требует существующего стека сетевых протоколов для установления межмашинного соединения между двумя компьютерами. Сетевой протокол отвечает только за перенос данных с машины клиента на машину сервера, после чего данные поступают в распоряжение протокольного адаптера Oracle на стороне сервера.
Подъем вверх по стеку сервера
Подъем вверх по стеку сервера представляет собой процесс, обратный тому, который был выполнен на стороне клиента.
Одной операцией, уникальной для стороны сервера, является акт приема начального соединения. Сервер имеет сетевой приемник, который регулярно прослушивает входящие соединения и определяет их назначение. На основе специфицированного в соединении идентификатора сервера Oracle (SID), соединение передается SQL*Net и далее серверу Oracle. Компоненты, находящиеся над SQL*Net, OPI и сервер Oracle, отличаются от соответствующих компонент на стороне клиента.
Программный интерфейс Oracle (OPI)
OPI функционально дополняет UPI; задача этого интерфейса - отвечать на любое из возможных сообщений, присылаемых от UPI. Например, запрос UPI на выборку 25 строк данных заставит OPI ответить возвратом 25 строк после их извлечения.
Сервер Oracle
Сторона сервера Oracle в соединении отвечает за прием запросов от клиентского кода UPI и разрешение предложений SQL от имени приложения клиента. Принятый запрос обрабатывается, и результирующие данные передаются OPI для их форматирования и возврата приложению клиента.
Взаимодействие сервер/сервер
Когда два сервера взаимодействуют для выполнения распределенной транзакции, процесс и все диалоги остаются теми же, как и в сценарии клиент/сервер, с той разницей, что здесь нет клиентского приложения. Сервер имеет свою собственную версию интерфейса UPI, которая называется NPI. Интерфейс NPI может осуществлять все функции, которые UPI выполняет для клиентов, позволяя координирующему серверу создавать запросы SQL, адресуемые к дополнительным серверам. Рис.4 показывает соединение сервер/сервер и все соответствующие слои.
Рис.4. Компоненты сессии Oracle сервер/сервер
2. Операции SQL*Net
SQL*Net предоставляет девять индивидуальных функций. Эти функции принадлежат трем общим классам:
· операции соединений
Все функции применяются в инструментах и базах данных, использующих SQL*Net для распределенной обработки, хотя ни одна из этих функций не видна пользователю.
2.1 Операции соединений
SQL*Net поддерживает две основных операции соединений:
· соединение с сервером
Соединение с сервером
Операция соединения между клиентским приложением и сервером инициируется во время любого стандартного подключения к базе данных, и содержит такую информацию, как имя клиентской машины и имя пользователя, передаваемые удаленной машине. Клиентское приложение инициирует запрос на соединение с удаленной базой данных (или другой сетевой службой), предоставляя краткое имя желаемого назначения. Это краткое имя, называемое именем службы (сервиса), преобразуется в сетевой адрес, который содержится в дескрипторе соединения, хранящемся в файле конфигурации сети TNSNAMES.ORA либо в базе данных
Отсоединение от сервера
Запрос на отсоединение от сервера может быть инициирован несколькими различными способами:
· по инициативе пользователя
Разъединение по инициативе пользователя.
Пользователь может выдать запрос на разъединение по концу транзакции клиент/сервер, или сам сервер может отсоединиться от другого сервера, когда все данные сервер/сервер переданы и в дальнейшем соединении нет необходимости (самый простой случай).
Запрос на другое соединение.
В случае, когда клиентское приложение соединено с сервером и требует доступа к другому пользовательскому учетному имени на сервере (или тому же имени на другом сервере), большинство инструментов Oracle сначала отсоединяют приложение от первоначального сервера. После того, как разъединение выполнено, инициируется запрос на новое соединение.
Аварийное прекращение соединения.
Может случиться, что одна из программных компонент под SQL*Net закончит соединение или прервет коммуникации, а SQL*Net не будет своевременно информирован об этом.Во время очередной операции данных SQL*Net, модуль TNS распознает сбой и уведомит SQL*Net о необходимости сбросить операции клиента и сервера, что приведет к разъединению текущей операции.
Разъединение по таймауту или обнаружение зависшего соединения (только версия 2.1).
В соединении с включенным средством распознавания зависшего соединения, от сервера к клиенту периодически с заданным интервалом (обычно несколько минут) посылается небольшой тестовый пакет. Если соединение не работает (обычно из-за недоступности клиентского процесса или машины), оно закрывается, после того как операция передачи сгенерирует ошибку.
2.2 Операции данных
SQL*Net поддерживает четыре набора операций с данными клиент/сервер:
· синхронная передача данных
Концепция передачи и приема данных между клиентом и сервером от имени UPI и OPI довольно прямолинейна. Диалоговый запрос SQL передается от UPI, через запрос на передачу, в SQL*Net. На стороне сервера, SQL*Net обрабатывает запрос на прием и передает данные базе данных. На обратном пути от сервера все происходит в обратном порядке. Все запросы на прием и передачу синхронны; иными словами, когда клиент инициирует запрос, он ждет ответа от сервера. После этого он может выдавать очередной запрос.
2.3 Операции исключений
SQL*Net поддерживает три операции исключений:
· инициирование прерывания через соединение TNS
Из этих трех операций только первая может контролироваться пользователем. Когда пользователь нажимает Ctrl-c или клавишу прерывания, приложение вызывает эту функцию. Остальные две операции исключений применяются внутренне продуктами, использующими SQL*Net, для разрешения вопросов, связанных с таймером. SQL*Net может инициировать проверку канала связи, например, чтобы удостовериться в прибытии новых данных. Функция сброса служит для разрешения ненормальных состояний, например для синхронизации соединения после возникновении прерывания.
3. Содержимое файлов конфигурации SQL*Net
Краткий обзор файлов конфигурации, используемых сетевыми продуктами Oracle.
· LISTENER.ORA
Файлы конфигурации клиента
Клиенты имеют обычно три файла конфигурации, которые создает Network Manager, а также один, который должен быть создан вручную. Эти файлы содержат информацию о:
· сетевых назначениях
TNSNAMES.ORA - Этот файл содержит список имен служб и дескрипторов соединений для сетевых назначений. Необходим, если используется Oracle Names. Этот файл должен генерироваться и модифицироваться только с помощью Oracle Network Manager.
SQLNET.ORA - Этот файл содержит необязательные параметры диагностики, информацию клиента об Oracle Names, а также несколько других необязательных параметров. SQLNET.ORA может содержать параметры, специфичные для узла.
Файлы конфигурации сервера
Серверы в сети, включающей распределенные базы данных, также требуют наличия файлов, необходимых для клиентов, потому что, когда серверы используют связи баз данных для соединения с другими машинами серверов, они, по существу, выступают в качестве клиентов.
LISTENER.ORA
Этот файл включает имена и адреса всех приемников на машине, системные идентификаторы (SIDы) баз данных, а также различные управляющие параметры, используемые управляющей утилитой приемника. Этот файл должен генерироваться и модифицироваться только с помощью Oracle Network Manager.
Файлы LISTENER.ORA и TNSNAMES.ORA содержат частично одинаковую информацию. Адрес в дескрипторе соединения сервера в TNSNAMES.ORA - тот же самый, что и адрес приемника для сервера в LISTENER.ORA. Аналогично, дескриптор соединения в файле TNSNAMES.ORA включает SID, который требуется (как SID_NAME) в файле LISTENER.ORA
Конфигурирование приемника TNS: LISTENER.ORA
Прежде, чем сервер базы данных сможет принимать соединения от клиентов SQL*Net, на платформе этого сервера должен быть запущен приемник. На большинстве платформ для этой цели используется сетевой приемник. Файл конфигурации для сетевого приемника имеет имя LISTENER.ORA. Этот файл содержит четыре части:
· имя приемника
Имена приемников
Имя приемника должно быть легким для использования. По умолчанию принимается имя LISTENER, которое рекомендуется для стандартных установок, требующих лишь одного приемника на машине. Имя приемника должно быть уникальным в сети. Эта уникальность автоматически гарантируется тем, что Network Manager присоединяет к задаваемому вами имени имя узла и его домен