Wie liste ich aktive / offene Verbindungen in Oracle auf?


164

Gibt es eine versteckte Tabelle, Systemvariable oder etwas, das in einem bestimmten Moment aktive Verbindungen anzeigt?

Antworten:


183

Verwenden Sie die V$SESSIONAnsicht.

V$SESSION Zeigt Sitzungsinformationen für jede aktuelle Sitzung an.


5
Fehler ab Zeile 1 im Befehl: Wählen Sie * aus FROM v $ session aus. Fehler in der Befehlszeile: 1 Spalte: 14 Fehlerbericht: SQL-Fehler: ORA-00903: Ungültiger Tabellenname 00903. 00000 - "Ungültiger Tabellenname" * Ursache: * Aktion:
Pistacchio

3
Entweder haben Sie keine Berechtigungen oder Sie haben die DBA-Ansichten nicht richtig installiert.
S.Lott

4
Sie benötigen die Rolle select_catalog_role.
PaulJWilliams

2
Sie können v $ sqltext beitreten, um auch die aktuelle SQL von Sitzungen abzurufen.
Alkini

27
pistacchio, Sie haben 2 "von FROM" in der SQL: "Wählen Sie * von FROM v $ Sitzung"
marcprux

115

Eine vollständigere Antwort finden Sie unter: 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

Wenn ich eingehende Verbindungen von unseren Anwendungsservern zur Datenbank anzeigen möchte, verwende ich den folgenden Befehl:

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

Einfach aber effektiv.


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

Diese Abfrage versucht, alle Hintergrundprozesse herauszufiltern.


5
Select count(1) From V$session
where status='ACTIVE'
/

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;

4
Willkommen bei SO! Bitte geben Sie eine Intuition für Ihre Antworten.
Vefthym


4

Im Folgenden finden Sie eine Liste der Betriebssystembenutzer, sortiert nach Anzahl der Verbindungen. Dies ist hilfreich, wenn Sie nach einer übermäßigen Ressourcennutzung suchen.

select osuser, count(*) as active_conn_count 
from v$session 
group by osuser 
order by active_conn_count desc

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
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
DimaSan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.