Итак, следуем далее по пути мониторинга экземпляра. Для того, чтобы проводить детальный анализ состояния БД, до самых ее "недр", в ваше распоряжение, как администратора, предоставляется такой инструмент, как системные представления. Они, как правило, начинаются с символа - 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 в данный момент!) |
BACKGROUND | 1 для фонового процесса и 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$ представления можно получать всю информацию о состоянии БД.