2014-12-10 2 views

ответ

2

Этот запрос может предоставить вам всю необходимую информацию о текущей_сегрессии.

select client_ip 
from _v_session_detail 
where session_id= CURRENT_SID 
0

Вы можете использовать «шоу сессии», чтобы предоставить эту информацию, если вы не пытаетесь получить к нему доступ, как столбец в таблице.

SYSTEM.ADMIN(ADMIN)=> SYSTEM.ADMIN(ADMIN)=> show session; 
SESSION_ID | PID | USERNAME | DBNAME | SCHEMA | TYPE | CONNECT_TIME  | SESSION_STATE_NAME | SQLTEXT | PRIORITY_NAME | CLIENT_PID | CLIENT_IP | CLIENT_OS_USERNAME 
------------+-------+----------+--------+--------+------+---------------------+--------------------+--------------+---------------+------------+-----------+-------------------- 
     16228 | 10272 | ADMIN | SYSTEM | ADMIN | sql | 2014-12-10 10:56:48 | active    | show session | normal  | 10271  | 127.0.0.1 | 
(1 row) 

Вы также можете запросить против _v_session, который сообщит о сеансах у вас есть видимость/авторизация, чтобы увидеть, но не обязательно говорит вам, какой из них ваш. Для неадминистративного пользователя это обычно только ваши сеансы, поэтому это должно быть легко сказать.

SYSTEM.ADMIN(ADMIN)=> select * from _v_session; 
    ID | PID | USERNAME | DBNAME | TYPE |  CONNTIME  | STATUS |   COMMAND   | PRIORITY | CID | IPADDR | CLIENT_OS_USERNAME 
-------+-------+----------+--------+------+---------------------+--------+--------------------------+----------+-------+-----------+-------------------- 
16228 | 10272 | ADMIN | SYSTEM | sql | 2014-12-10 10:56:48 | active | select * from _v_session |  3 | 10271 | 127.0.0.1 | 
(1 row) 

Если вам нужна информация только о конкретной сессии, в которой вы вызываете запрос, то это сделает трюк.

SYSTEM.ADMIN(ADMIN)=> select * from _v_session where id = current_sid; 

    ID | PID | USERNAME | DBNAME | TYPE |  CONNTIME  | STATUS |      COMMAND      | PRIORITY | CID | IPADDR | CLIENT_OS_USERNAME 
-------+-------+----------+--------+------+---------------------+--------+-------------------------------------------------+----------+-------+-----------+-------------------- 
16837 | 22310 | ADMIN | SYSTEM | sql | 2014-12-10 19:06:21 | active | select * from _v_session where id = current_sid |  3 | 22309 | 127.0.0.1 | 
(1 row) 

Я хотел бы отметить, что то, что вы ищете здесь уже отслеживаются в базе данных истории запросов, которая, скорее всего, уже настроен на вашей системе.

+0

Мое фактическое требование - зарегистрировать IP-адрес клиентской машины пользователей, выполняющих процедуры. Запрос _V_session будет возвращать несколько строк, если подключено более одного пользователя. Ищете замену для функции ниже. создать или заменить функцию F_USER_IP return varchar2 is V_IP Varchar2 (25); begin SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS') в V_IP FROM dual; return (V_IP); конец F_USER_IP; СПАСИБО. – Ben

+0

А, ОК. Обновлено, чтобы отразить это. Обратите внимание, что то, что вы запрашиваете, уже отслеживается для вас в базе данных истории запросов (которая, скорее всего, уже настроена в вашей системе), если вы не пытаетесь интегрировать ее в какое-либо другое приложение. – ScottMcG

Смежные вопросы