Шаг 83 - Представления V$Process и V$Bgprocess

Итак, следуем далее по пути мониторинга экземпляра. Для того, чтобы проводить детальный анализ состояния БД, до самых ее "недр", в ваше распоряжение, как администратора, предоставляется такой инструмент, как системные представления. Они, как правило, начинаются с символа - V$... Для примера с помощью этих представлений можно провести мониторинг процессов пользователя и проследить даже за фоновыми процессами. Начнем с такого достаточно удобного средства мониторинга, как представление V$Process. Данное представление содержит информацию о всех процессах, которые подключены к БД, в том числе о фоновых и процессах пользователя. Следующее представление, на которое следует обратить внимание V$Bgprocess. Оно содержит, список возможных фоновых процессов, причем в представление включен дополнительный столбец PADDR в котором выводится шестнадцатеричный адрес выполняемого фонового процесса. Когда процесс не запущен столбец PADDR имеет значение 0. Давайте рассмотрим столбцы представления V$Process более детально, так как это пригодится вам в дальнейшем. Итак напомню, что лучше это производить в SQLPlus - так как он в этом случае наиболее удобен. Так же не забудьте что, для того, чтобы работать с системными представлениями, вам нужны права администратора, по этому заходите пользователем SYS либо SYSTEM! Запускайте SQLPlus и введите следующую команду:

desc v$process;

Получаем:

SQL> desc v$process;
 Имя                 Пусто?   Тип
 ------------------- -------- ---------------
 ADDR                         RAW(4)
 PID                          NUMBER
 SPID                         VARCHAR2(12)
 USERNAME                     VARCHAR2(15)
 SERIAL#                      NUMBER
 TERMINAL                     VARCHAR2(16)
 PROGRAM                      VARCHAR2(64)
 TRACEID                      VARCHAR2(255)
 BACKGROUND                   VARCHAR2(1)
 LATCHWAIT                    VARCHAR2(8)
 LATCHSPIN                    VARCHAR2(8)
 PGA_USED_MEM                 NUMBER
 PGA_ALLOC_MEM                NUMBER
 PGA_FREEABLE_MEM             NUMBER
 PGA_MAX_MEM                  NUMBER

SQL>

А теперь приведем описание наиболее интересных из них:

СтолбецОписание
ADDRАдрес процесса Oracle.
PIDИдентификатор (ID) процесса Oracle.
SPIDИдентификатор системного процесса OS.
USERNAMEВладелец процесса OS.
SERIAL#Номер процесса Oracle.
TERMINALИдентификатор терминала OS (другими словами, имя вашего компьютера в сети. В моем случае ORAHOME!)
PROGRAMПодключение программы OS (другими словами имя exe-ка вашей проги, которая работает с Oracle в данный момент!)
BACKGROUND1 для фонового процесса и NULL для процесса пользователя.

Далее вводите следующую команду для того, чтобы получить описание представления V$bgprocess:

desc v$bgprocess;

Получаем:

SQL> desc v$bgprocess;
 Имя          Пусто?   Тип
 ------------ -------- -------------
 PADDR                 RAW(4)
 NAME                  VARCHAR2(5)
 DESCRIPTION           VARCHAR2(64)
 ERROR                 NUMBER

SQL>>

И еще описание наиболее интересных столбцов:

СтолбецОписание
PADDRАдрес процесса Oracle (то же, что и в столбце ADDR представления v$process)
NAMEНаименование фонового процесса
DESCRIPTIONОписание фонового процесса
ERRORКод ошибки (0, если ошибка отсутствует)

А вот теперь давайте попробуем получить адреса и наименования работающих фоновых процессов на моем домашнем сервере Oracle. Запишем вот такой запрос с применением объединения этих двух представлений и посмотрим, что получится:

SELECT NVL(a.spid,'NULL') SPID, NVL(b.name,'NULL') NAME 
FROM v$process a, v$bgprocess b
WHERE b.paddr(+) = a.addr
/

Получаем:

SQL> SELECT NVL(a.spid,'NULL') SPID, NVL(b.name,'NULL') NAME
  2  FROM v$process a, v$bgprocess b
  3  WHERE b.paddr(+) = a.addr
  4  /

SPID         NAME                                                               
------------ -----                                                              
NULL         NULL                                                               
2080         PMON                                                               
2112         DBW0                                                               
2136         LGWR                                                               
2160         CKPT                                                               
2208         SMON                                                               
2220         RECO                                                               
2224         CJQ0                                                               
2228         QMN0                                                               
2232         NULL                                                               
2236         NULL                                                               

SPID         NAME                                                               
------------ -----                                                              
2536         NULL                                                               

12 строк выбрано.

Сразу замечу, что операнд b.paddr(+) = a.addr дает правое внешнее объединение, к ним мы еще вернемся. А пока можете убедиться, что все процессы сервера, успешно запущены и занимаются своими делами. Вот так применяя V$ представления можно получать всю информацию о состоянии БД.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 22.01.2004