2013-03-21 6 views
16

Niedawno zacząłem pracować nad bazami danych Oracle. Generalnie mam wiele okien sqlplus otwartych dla różnych baz danych oracle. Czy podczas przełączania z jednej sesji sqlplus na drugą można wyświetlić szczegóły bieżącej sesji dla każdej sesji sqlplus? Każda pomoc jest bardzo cenna!sqlplus, jak znaleźć szczegóły aktualnie połączonej sesji bazy danych

+0

okazało się, że za pomocą sys_context funkcję [LINK] (http : //docs.oracle.com/cd/E11882_01/server.112/e26088/functions184.htm#g1513460) np .: wybierz sys_context ('USERENV', 'db_name') z dual; lub bardziej prosto z v $ view ... wybierz nazwę z bazy danych v $; Myślę, że widoki v $ są zwykle ograniczone do DBAs, dlatego sys_context będzie najlepszą opcją. –

+0

Jeśli jest to, czego chcesz, możesz zrobić "wybierz * z global_name" –

Odpowiedz

7

Spójrz na ten jeden (c) Tanel Poder. Możesz uruchomić go z glogin.sql (więc te ustawienia będą aktualizowane za każdym razem, gdy się połączysz, lub po prostu uruchom je ręcznie) Uwaga: Polecenie host title - zmienia twoje sql * oraz tytuł okna konsoli z informacjami o sesji - niezwykle przydatne przy otwartych wielu oknach . jednocześnie

-- the Who am I script 

def mysid="NA" 
def _i_spid="NA" 
def _i_cpid="NA" 
def _i_opid="NA" 
def _i_serial="NA" 
def _i_inst="NA" 
def _i_host="NA" 
def _i_user="&_user" 
def _i_conn="&_connect_identifier" 

col i_username head USERNAME for a20 
col i_sid head SID for a5 new_value mysid 
col i_serial head SERIAL# for a8 new_value _i_serial 
col i_cpid head CPID for a15 new_value _i_cpid 
col i_spid head SPID for a15 new_value _i_spid 
col i_opid head OPID for a5 new_value _i_opid 
col i_host_name head HOST_NAME for a25 new_value _i_host 
col i_instance_name head INST_NAME for a12 new_value _i_inst 
col i_ver head VERSION for a10 
col i_startup_day head STARTED for a8 
col _i_user noprint new_value _i_user 
col _i_conn noprint new_value _i_conn 
col i_myoraver noprint new_value myoraver 

select 
    s.username   i_username, 
    i.instance_name i_instance_name, 
    i.host_name   i_host_name, 
    to_char(s.sid)   i_sid, 
    to_char(s.serial#)  i_serial, 
    (select substr(banner, instr(banner, 'Release ')+8,10) from v$version where rownum = 1) i_ver, 
    (select substr(substr(banner, instr(banner, 'Release ')+8), 
      1, 
      instr(substr(banner, instr(banner, 'Release ')+8),'.')-1) 
    from v$version 
    where rownum = 1) i_myoraver, 
    to_char(startup_time, 'YYYYMMDD') i_startup_day, 
    p.spid    i_spid, 
    trim(to_char(p.pid))  i_opid, 
    s.process   i_cpid, 
    s.saddr    saddr, 
    p.addr    paddr, 
    lower(s.username) "_i_user", 
    upper('&_connect_identifier') "_i_conn" 
from 
    v$session s, 
    v$instance i, 
    v$process p 
where 
    s.paddr = p.addr 
and 
    sid = (select sid from v$mystat where rownum = 1); 

-- Windows CMD.exe specific stuff 

-- host title %CP% &[email protected]&_i_conn [sid=&mysid ser#=&_i_serial spid=&_i_spid inst=&_i_inst host=&_i_host cpid=&_i_cpid opid=&_i_opid] 
    host title %CP% &[email protected]&_i_conn [sid=&mysid #=&_i_serial] 
-- host doskey /exename=sqlplus.exe desc=set lines 80 sqlprompt ""$Tdescribe $*$Tset lines 299 sqlprompt "SQL> " 

-- short xterm title 
-- host echo -ne "\033]0;&[email protected]&_i_inst &mysid[&_i_spid]\007" 
-- long xterm title 
--host echo -ne "\033]0;host=&_i_host inst=&_i_inst sid=&mysid ser#=&_i_serial spid=&_i_spid cpid=&_i_cpid opid=&_i_opid\007" 


def myopid=&_i_opid 
def myspid=&_i_spid 
def mycpid=&_i_cpid 

-- undef _i_spid _i_inst _i_host _i_user _i_conn _i_cpid 

Przykładowe wyjście.

17:39:35 [email protected]> @sandbox 
Connected. 
18:29:02 [email protected]> @me 

USERNAME    INST_NAME HOST_NAME     SID SERIAL# VERSION STARTED SPID   OPID CPID   SADDR PADDR 
-------------------- ------------ ------------------------- ----- -------- ---------- -------- --------------- ----- --------------- -------- -------- 
SYSTEM    xe   OARS-SANDBOX    34 175  11.2.0.2.0 20130318 3348   30 6108:7776  6F549590 6FF51020 

1 row selected. 

Elapsed: 00:00:00.04 
+0

dzięki, robi doskonałą robotę, zmieniając tytuły okien. Teraz mogę po prostu wybrać odpowiednie okno sqlplus z paska zadań Windows. –

0
select * from v$session 
where sid = to_number(substr(dbms_session.unique_session_id,1,4),'XXXX') 
+0

wybierz sid z v $ mystat gdzie rownum = 1?;) –

22
show user 

dostać podłączony użytkownik

select instance_name from v$instance 

uzyskać instancję lub ustawić w sqlplus

set sqlprompt "_USER'@'_CONNECT_IDENTIFIER> " 
3

Spróbuj:

select * from v$session where sid = SYS_CONTEXT('USERENV','SID'); 

Możesz być także zainteresowany this AskTom post

Po obejrzeniu Twojego komentarza, można zrobić:

SELECT * FROM global_name; 
+0

dziękuję cade, ale myślę, że najlepszą odpowiedzią jest "bądź tu teraz", zobacz mój komentarz. dzięki jeszcze raz! –

16

wiem, że to jest stare pytanie, ale ja próbowałem wszystkie powyższe odpowiedzi, ale nie działał w moim przypadku co ostatecznie pomogło mi to

SHOW PARAMETER instance_name

+2

To jest prosta, poprawna odpowiedź. – udog

7
select sys_context('USERENV','INSTANCE_NAME') from dual; 

&

select instance_name from v$instance; 

daje nazwę instancji. Można również użyć select * from global_name;, aby wyświetlić globalną nazwę instancji.

+0

Podejście "SHOW PARAMETER" wymaga dostępu do zapytania do 'v $ instance', ale to podejście' SYS_CONTEXT' nie działa. (+) – durette

0

możemy uzyskać szczegóły i status session od dołu zapytania jak:

select ' Sid, Serial#, Aud sid : '|| s.sid||' , '||s.serial#||' , '|| 
     s.audsid||chr(10)|| '  DB User/OS User : '||s.username|| 
     ' / '||s.osuser||chr(10)|| ' Machine - Terminal : '|| 
     s.machine||' - '|| s.terminal||chr(10)|| 
     '  OS Process Ids : '|| 
     s.process||' (Client) '||p.spid||' (Server)'|| chr(10)|| 
     ' Client Program Name : '||s.program "Session Info" 
    from v$process p,v$session s 
where p.addr = s.paddr 
    and s.sid = nvl('&SID',s.sid) 
    and nvl(s.terminal,' ') = nvl('&Terminal',nvl(s.terminal,' ')) 
    and s.process = nvl('&Process',s.process) 
    and p.spid = nvl('&spid',p.spid) 
    and s.username = nvl('&username',s.username) 
    and nvl(s.osuser,' ') = nvl('&OSUser',nvl(s.osuser,' ')) 
    and nvl(s.machine,' ') = nvl('&machine',nvl(s.machine,' ')) 
    and nvl('&SID',nvl('&TERMINAL',nvl('&PROCESS',nvl('&SPID',nvl('&USERNAME', 
     nvl('&OSUSER',nvl('&MACHINE','NO VALUES'))))))) <> 'NO VALUES' 
/

Szczegółowe informacje: https://ora-data.blogspot.in/2016/11/query-session-details.html

Dzięki,