прямой доступ к SGA / предварительные итоги
Итак, подведём предварительные итоги.
Напомним, что мы собираемся считать из SGA данные, аналогичные запросу
'select sid,serial#,username,status from v$session'.
Вот как это будет происходить:
- подсоединимся к куску shared memory с id 131074
- Начиная с адреса 0x5B2B1680 (начальный адрес x$ksuse) будем 170 раз
(количество записей в x$ksuse) ходить по циклу с шагом 2408 (размер записи
в x$ksuse) и считывать значения ksspaflg (байт со смещением 1), ksuseflg
(4 байта со смещением 1388), serial (2 байта со смещением 1382),
username (строка длиной в 30 символов, со смещением 67) и statusid
(байт со смещением 1420). Sid устанавливаем равным текущей переменной цикла.
- Из значения statusid и ksuseflg будем получать значение status.
- Если младшие биты ksspaflg и ksuseflg не равны 0, то будем печатать значения sid, serial, username, status.
- Всё!