Как вывести список активных / открытых соединений в Oracle?

164

Есть ли какая-либо скрытая таблица, системная переменная или что-то, чтобы показать активные соединения в данный момент?

pistacchio
источник

Ответы:

183

Используйте V$SESSIONвид.

V$SESSION отображает информацию о сеансе для каждого текущего сеанса.

PaulJWilliams
источник
5
Ошибка, начиная со строки 1 в команде: выберите * из FROM v $ session Ошибка в командной строке: 1 Столбец: 14 Отчет об ошибке: Ошибка SQL: ORA-00903: неверное имя таблицы 00903. 00000 - «неверное имя таблицы» * Причина: * Действие:
фисташка
3
Либо у вас нет прав, либо вы неправильно установили представления DBA.
S.Lott
4
Вам понадобится роль select_catalog_role.
PaulJWilliams
2
Вы можете присоединиться к v $ sqltext, чтобы получить текущий SQL сеансов.
Алкини
27
фисташка, у вас есть 2 «из FROM» в SQL: «выбрать * из FROM v $ session»
marcprux
116

Для более полного ответа см .: http://dbaforums.org/oracle/index.php?showtopic=16834

select
       substr(a.spid,1,9) pid,
       substr(b.sid,1,5) sid,
       substr(b.serial#,1,5) ser#,
       substr(b.machine,1,6) box,
       substr(b.username,1,10) username,
--       b.server,
       substr(b.osuser,1,8) os_user,
       substr(b.program,1,30) program
from v$session b, v$process a
where
b.paddr = a.addr
and type='USER'
order by spid; 
Эрхардт
источник
28

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

SELECT username FROM v$session 
WHERE username IS NOT NULL 
ORDER BY username ASC;

Простой, но эффективный.

user2021477
источник
6
select s.sid as "Sid", s.serial# as "Serial#", nvl(s.username, ' ') as "Username", s.machine as "Machine", s.schemaname as "Schema name", s.logon_time as "Login time", s.program as "Program", s.osuser as "Os user", s.status as "Status", nvl(s.process, ' ') as "OS Process id"
from v$session s
where nvl(s.username, 'a') not like 'a' and status like 'ACTIVE'
order by 1,2

Этот запрос пытается отфильтровать все фоновые процессы.

Алан
источник
5
Select count(1) From V$session
where status='ACTIVE'
/
Juber
источник
5
select
  username,
  osuser,
  terminal,
  utl_inaddr.get_host_address(terminal) IP_ADDRESS
from
  v$session
where
  username is not null
order by
  username,
  osuser;
user3848789
источник
4
Добро пожаловать на ТАК! Пожалуйста, предоставьте некоторую интуицию для ваших ответов.
Vefthym
4
select status, count(1) as connectionCount from V$SESSION group by status;
Fletch F Fletch
источник
4

Ниже приведен список пользователей операционной системы, отсортированный по количеству соединений, что полезно при поиске чрезмерного использования ресурсов.

select osuser, count(*) as active_conn_count 
from v$session 
group by osuser 
order by active_conn_count desc
jediz
источник
1
select 
    count(1) "NO. Of DB Users", 
    to_char(sysdate,'DD-MON-YYYY:HH24:MI:SS') sys_time
from 
    v$session 
where 
    username is NOT  NULL;
Киранкумар М
источник
1
Хотя этот фрагмент кода может решить вопрос, в том числе объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код.
DimaSan