programing

sqlplus 현재 연결된 데이터베이스 세션의 세부 정보를 찾는 방법

powerit 2023. 6. 27. 22:33
반응형

sqlplus 현재 연결된 데이터베이스 세션의 세부 정보를 찾는 방법

저는 아주 최근에 오라클 데이터베이스 작업을 시작했습니다.일반적으로 여러 오라클 데이터베이스에 대해 열려 있는 sqlplus 창이 많습니다.한 sqlplus 세션에서 다른 sqlplus 세션으로 전환할 때 각 sqlplus 세션에 대한 현재 세션 세부 정보를 보려면 어떻게 해야 합니까?어떤 도움이든 대단히 감사합니다!

show user

연결된 사용자를 얻기 위해

 select instance_name from v$instance

sqlplus에서 인스턴스를 가져오거나 설정합니다.

set sqlprompt "_USER'@'_CONNECT_IDENTIFIER> "

저는 이것이 오래된 질문이라는 것을 알지만 위의 모든 답변을 시도했지만 저의 경우에는 작동하지 않았습니다.궁극적으로 도움이 된 것은

SHOW PARAMETER instance_name

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

&

select instance_name from v$instance;

인스턴스 이름을 제공합니다.사용할 수도 있습니다.select * from global_name;인스턴스의 전역 이름을 봅니다.

이것 좀 보세요.glogin.sql에서 실행할 수 있습니다. 따라서 이러한 설정은 연결할 때마다 업데이트되거나 수동으로 실행됩니다.공지host title명령 - 세션 정보가 포함된 sql*plus 콘솔 창 제목을 변경합니다. 동시에 많은 창을 열 때 매우 유용합니다.

-- 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% &_i_user@&_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% &_i_user@&_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;&_i_user@&_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

샘플 출력:

17:39:35 SYSTEM@saz-dev> @sandbox
Connected.
18:29:02 SYSTEM@sandbox> @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

시도:

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

또한 이 AskTom 게시물에 관심이 있을 수 있습니다.

의견을 확인한 후 다음 작업을 수행할 수 있습니다.

SELECT * FROM global_name;
select * from v$session
where sid = to_number(substr(dbms_session.unique_session_id,1,4),'XXXX')

아래 쿼리에서 세션의 세부 정보와 상태를 확인할 수 있습니다.

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'
/

자세한 내용은 https://ora-data.blogspot.in/2016/11/query-session-details.html .

감사해요.

언급URL : https://stackoverflow.com/questions/15541990/sqlplus-how-to-find-details-of-the-currently-connected-database-session

반응형