Oracle для професіоналів. Глава 2. Частина 2, Інтеграція додатків і даних, Бази даних, статті

8:



З клієнтським додатком скомпоновані бібліотеки Oracle. Вони забезпечують функціональний інтерфейс (Application Program Interface – API) для взаємодії з базою даних. Функції API "знають", як передавати запит до бази даних і обробляти повертається курсор. Вони забезпечують перетворення запитів користувача до передаваних по мережі пакунки оброблювані виділеним сервером. Ці функції забезпечує компонент Net8 – мережеве програмне забезпечення / протокол, що використовується Oracle для клієнт-серверної обробки (навіть у n-ланкою архітектурі є місце для клієнт-серверної взаємодії). Сервер Oracle використовує таку архітектуру, навіть якщо протокол Net8 не потрібен. Тобто, коли клієнт і сервер працюють на одній і тій же машині, використовується ця двухпроцессная (відома також як двухзадачная – two-task) архітектура. Ця архітектура забезпечує дві переваги.



  • Віддалене виконання. Клієнтський додаток, природно, може працювати не на тій машині, де працює СУБД.
  • Ізолювання адресних просторів. Серверний процес має доступ для читання і запису до області SGA. Помилковий покажчик в клієнтському процесі може пошкодити структури даних в області SGA, якщо клієнтський і серверний процеси фізично взаємопов'язані.

Раніше в цій главі ми розглядали "породження", або створення, цих серверних процесів процесом прослуховування Oracle Net8 Listener. Не будемо знову повертатися до цього процесу, але коротко розглянемо, що відбувається, якщо процес прослуховування не задіяний. Механізм багато в чому аналогічний, але замість створення виділеного сервера процесом прослуховування за допомогою дзвінків fork()/exec() в ОС UNIX або виклику IPC (Inter Process Communication), як це відбувається в Windows, процес створюється безпосередньо клієнтським процесом. Це можна чітко побачити в ОС UNIX:

ops$tkyte@ORA8I.WORLD> select a.spid dedicated_server,
2 b.process clientpid
3 from v$process a, v$session b
4 where a.addr = b.paddr
5 and b.audsid = userenv(“sessionid”)
6 /

DEDICATED CLIENTPID
——— ———
7055 7054

ops$tkyte@ORA8I.WORLD> !/bin/ps -lp 7055
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
8 S 30174 7055 7054 0 41 20 61ac4230 36815 639b1998? 0:00 oracle

ops$tkyte@ORA8I.WORLD> !/bin/ps -lp 7054
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
8 S 12997 7054 6783 0 51 20 63eece30 1087 63eecea0 pts / 7 0:00 sqlplus


Я використовував запит для визначення ідентифікатора процесу (PID) мого виділеного сервера (стовпець SPID в поданні V$PROCESS – Це ідентифікатор процесу операційної системи, що використовувався для виконання запиту). Крім того, в стовпці PROCESS подання V$SESSION знаходиться ідентифікатор клієнтського процесу, що підключився до бази даних. За допомогою команди ps можна явно показати, що PPID (Parent Process ID – Ідентифікатор батьківського процесу) мого виділеного сервера відповідає процесу SQL * Plus. В даному випадку саме утиліта SQL * Plus створила виділений сервер за допомогою системних викликів fork() і exec().


Тепер давайте більш детально розглянемо інший тип серверних процесів – розділяється серверний процес. Для підключення до серверного процесу цього типу обов'язково використовується протокол Net8, навіть якщо клієнт і сервер працюють на одній машині, – не можна використовувати режим MTS без процесу прослуховування Net8. Як вже описувалося раніше в цьому розділі, клієнтське додаток підключається до процесу прослуховування Net8 і перенаправляється на процес-диспетчер. Диспетчер грає роль каналу передачі інформації між клієнтським додатком і розділяються серверним процесом. Нижче представлена ​​схема підключення до бази даних через поділюваний сервер

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*