J'ai très récemment commencé à travailler sur des bases de données Oracle. En général, j'ai de nombreuses fenêtres sqlplus ouvertes sur différentes bases de données Oracle. Lors du passage d'une session sqlplus à une autre, comment puis-je afficher les détails de la session en cours pour chaque session sqlplus? Toute aide est grandement appréciée!
Jetez un oeil à celui-ci (c) Tanel Poder
. Vous pouvez soit l'exécuter à partir de votre glogin.sql (afin que ces paramètres soient mis à jour à chaque connexion, soit simplement l'exécuter manuellement. Remarque Host title
commande - elle change le titre de la fenêtre de votre console sql * plus avec les informations de session - extrêmement utile avec de nombreuses fenêtres ouvertes simultanément.
-- 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
Exemple de sortie:
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
show user
se connecter utilisateur
select instance_name from v$instance
pour obtenir une instance ou définir dans sqlplus
set sqlprompt "_USER'@'_CONNECT_IDENTIFIER> "
Je sais que c'est une vieille question mais j'ai essayé toutes les réponses ci-dessus mais je n'ai pas fonctionné dans mon cas. Ce qui m'a finalement aidé, c'est
SHOW PARAMETER instance_name
select sys_context('USERENV','INSTANCE_NAME') from dual;
&
select instance_name from v$instance;
vous donnera le nom de l'instance. Vous pouvez aussi utiliser select * from global_name;
pour afficher le nom global de l'instance.
Essayer:
select * from v$session where sid = SYS_CONTEXT('USERENV','SID');
Vous pourriez également être intéressé par ce post AskTom
Après avoir vu votre commentaire, vous pouvez faire:
SELECT * FROM global_name;
select * from v$session
where sid = to_number(substr(dbms_session.unique_session_id,1,4),'XXXX')
Nous pouvons obtenir les détails et l'état de session à partir de la requête ci-dessous:
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'
/
Pour plus de détails: https://ora-data.blogspot.in/2016/11/query-session-details.html
Merci,