Comment répertorier les connexions actives / ouvertes dans Oracle?

164

Y a-t-il une table cachée, une variable système ou quelque chose pour montrer les connexions actives à un moment donné?

pistache
la source

Réponses:

183

Utilisez la V$SESSIONvue.

V$SESSION affiche les informations de session pour chaque session en cours.

PaulJWilliams
la source
5
Erreur de démarrage à la ligne 1 dans la commande: sélectionnez * à partir de FROM v $ session Erreur sur la ligne de commande: 1 Colonne: 14 Rapport d'erreur: SQL Erreur: ORA-00903: nom de table non valide 00903. 00000 - "nom de table non valide" * Cause: * Action:
pistacchio
3
Soit vous ne disposez pas des autorisations, soit vous n'avez pas installé correctement les vues DBA.
S.Lott
4
Vous aurez besoin du rôle select_catalog_role.
PaulJWilliams
2
Vous pouvez également rejoindre v $ sqltext pour obtenir le SQL actuel des sessions.
Alkini
27
pistacchio, vous avez 2 "from FROM" dans le SQL: "select * from v $ session"
marcprux
116

Pour une réponse plus complète, voir: 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; 
Ehrhardt
la source
28

Lorsque je souhaite afficher les connexions entrantes de nos serveurs d'applications à la base de données, j'utilise la commande suivante:

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

Simple mais efficace.

user2021477
la source
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

Cette requête tente de filtrer tous les processus d'arrière-plan.

Alan
la source
5
Select count(1) From V$session
where status='ACTIVE'
/
Juber
la source
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
la source
4
Bienvenue à SO! Veuillez fournir une certaine intuition pour vos réponses.
vefthym
4
select status, count(1) as connectionCount from V$SESSION group by status;
Fletch F Fletch
la source
4

Ce qui suit vous donne la liste des utilisateurs du système d'exploitation triés par nombre de connexions, ce qui est utile lorsque vous recherchez une utilisation excessive des ressources.

select osuser, count(*) as active_conn_count 
from v$session 
group by osuser 
order by active_conn_count desc
Jediz
la source
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;
kirankumar M
la source
1
Bien que cet extrait de code puisse résoudre la question, inclure une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
DimaSan