Oracle для профессионалов

         

Фоновые процессы, предназначенные для решения конкретных задач


На следующей схеме представлены фоновые процессы экземпляра Oracle, имеющие конкретное назначение:

+------------+ [LMD0]--------------------------->| кластерные |+ ^ [LCKn]------------------->| экземпляры | ^ [BSP]----------->+------------+| | | ^ [LMON]--> +------------+ | | | ^ | | | | v | | v +--------------------------------------------+ PMON<----------->| SGA | | +--------------+ +---------------+ | SMON<----------->| | буферный кеш | | буфер журнала | | | +--------------+ +---------------+ | [RECO]<--------->| | | | | +-------+---------------------+--------------+ | ^ | | ^ | | | | | | v v v v | CKPT DBWn LGWR [ARCn]----+ | | | | ^ | v v v v | v +-------------+ +-------------------+ +-------------+ | +----------+ | удаленная | | файлы базы данных |+ | оперативный | | | архивные | | база данных | | + | журнал | | | журналы | +-------------+ +-------------------+ +-------------+ -+-+ +----------+ +------------------+| |0101010101010| +-----------------+ |1010101010101| +-------------+

Вы не обязательно увидите все эти процессы сразу после запуска своего экземпляра, но большинство из них работает в каждом экземпляре. Процесс ARCn (архиватор) запускается только при работе в режиме архивирования журналов (Archive Log Mode) при включенном автоматическом архивировании. Процессы LMD0, LCKn, LMON и BSP (подробнее о них — ниже) запускаются только при работе с Oracle Parallel Server (конфигурация сервера Oracle, поддерживающая несколько экземпляров на различных машинах в кластерной среде), если открывается одна и та же база данных. Для простоты на схеме не показаны процессы диспетчеров MTS (Dnnn) и разделяемых серверов (Snnn). Поскольку мы только что детально их рассмотрели, они не показаны, чтобы упростить схему. Предыдущая схема показывает, что можно "увидеть" при запуске экземпляра Oracle, если база данных смонтирована и открыта. Например, в моей UNIX-системе сразу после запуска экземпляра имеются следующие процессы:

$ /bin/ps -aef | grep 'ora_.*_ora8i$' ora816 20642 1 0 Jan 17 ? 5:02 ora_arc0_ora8i ora816 20636 1 0 Jan 17 ? 265:44 ora_snp0_ora8i ora816 20628 1 0 Jan 17 ? 92:17 ora_lgwr_ora8i ora816 20626 1 0 Jan 17 ? 9:23 ora_dbw0_ora8i ora816 20638 1 0 Jan 17 ? 0:00 ora_s000_ora8i ora816 20634 1 0 Jan 17 ? 0:04 ora_reco_ora8i ora816 20630 1 0 Jan 17 ? 6:56 ora_ckpt_ora8i ora816 20632 1 0 Jan 17 ? 186:44 ora_smon_ora8i ora816 20640 1 0 Jan 17 ? 0:00 ora_d000_ora8i ora816 20624 1 0 Jan 17 ? 0:05 ora_pmon_ora8i


Они соответствуют процессам, представленным на схеме, за исключением процесса SNPn (о нем будет рассказано позже, т.к. он не является фоновым процессом, выполняющим "конкретной" задачу). Обратите внимание на соглашение по именованию этих процессов. Имя процесса начинается с префикса ora_. Затем следуют четыре символа, представляющие фактическое имя процесса, а затем суффикс — _ora8i. Дело в том, что у меня параметр инициализации ORACLE_SID

(идентификатор сайта) имеет значение ora8i. В ОС UNIX это существенно упрощает идентификацию фоновых процессов Oracle и их привязку к определенному экземпляру (в Windows простого способа для этого нет, поскольку фоновые процессы реализованы как потоки одного большого процесса). Но что самое интересное, хотя это и не очевидно по представленным результатам, — все эти процессы

реализуются одним и тем же двоичным файлом
. Вы не найдете на диске двоичный выполняемый файл arc0, точно так же, как не найдете файлов LGWR

и DBW0. Все эти процессы реализуются файлом oracle (именно этот выполняемый двоичный файл запускается). Просто при запуске процессы получают такие псевдонимы, чтобы проще было идентифицировать их назначение. Это позволяет совместно использовать большую часть объектного кода на платформе UNIX. В среде Windows это вообще не имеет значения, поскольку процессы Oracle — всего лишь потоки в одном физическом процессе, поэтому все они — один большой двоичный файл.

Давайте теперь рассмотрим функции каждого процесса.


Содержание раздела