oracle 会话管理

会话管理

1:查看当前所有用户的会话(SESSION):

SELECT * FROM V S E S S I O N W H E R E U S E R N A M E I S N O T N U L L O R D E R B Y L O G O N T I M E , S I D ; 其中 O r a c l e 内部进程的 U S E R N A M E 为空 2 :查看当前用户的所有 S E S S I O N : S E L E C T ∗ F R O M V SESSION WHERE USERNAME IS NOT NULL ORDER BY LOGON_TIME , SID; 其中Oracle内部进程的USERNAME为空 2:查看当前用户的所有SESSION: SELECT * FROM V SESSION WHEREUSERNAMEIS NOT NULLORDER BYLOGONTIME,SID;其中Oracle内部进程的USERNAME为空 2:查看当前用户的所有SESSION:SELECT∗FROMVSESSION

WHERE USERNAME = USER

ORDER BY LOGON_TIME, SID;

3:查看当前窗口/当前用户的会话信息

SELECT SID, SERIAL#, STATUS FROM V S E S S I O N W H E R E A U D S I D = U S E R E N V ( ′ S E S S I O N I D ′ ) ; 4 :查看所有 A C T I V E 会话 ( 活动会话 ) S E L E C T ∗ F R O M V SESSION WHERE AUDSID=USERENV('SESSIONID'); 4:查看所有ACTIVE会话(活动会话) SELECT * FROM V SESSION WHEREAUDSID=USERENV(′SESSIONID′); 4:查看所有ACTIVE会话(活动会话)SELECT∗FROMVSESSION

WHERE USERNAME IS NOT NULL AND STATUS='ACTIVE'

ORDER BY LOGON_TIME, SID;

5:查看当前会话的ID可以通过如下脚本:

SELECT * FROM VKaTeX parse error: Expected 'EOF', got '#' at position 66: ...S.SID, S.SERIAL#̲ FROM VPROCESS P

INNER JOIN V$SESSION S ON P.ADDR = S.PADDR

WHERE S.AUDSID=USERENV('SESSIONID');

6:查看数据库允许最大会话数

SQL> SHOW PARAMETER SESSIONS;

NAME TYPE VALUE


java_max_sessionspace_size integer 0

java_soft_sessionspace_limit integer 0

license_max_sessions integer 0

license_sessions_warning integer 0

logmnr_max_persistent_sessions integer 1

sessions integer 225

shared_server_sessions integer

SQL> SELECT NAME, TYPE, VALUE FROM V P A R A M E T E R W H E R E N A M E L I K E ′ s e s s i o n N A M E T Y P E V A L U E − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − s e s s i o n s 3 225 s e s s i o n c a c h e d c u r s o r s 3 20 s e s s i o n m a x o p e n f i l e s 3 107 :查看曾经的最大会话数: S Q L > S Q L > S E L E C T S E S S I O N S M A X , S E S S I O N S W A R N I N G , S E S S I O N S C U R R E N T , S E S S I O N S H I G H W A T E R 2 F R O M v PARAMETER WHERE NAME LIKE 'session%'; NAME TYPE VALUE --------- ---------- ----------- sessions 3 225 session_cached_cursors 3 20 session_max_open_files 3 10 7:查看曾经的最大会话数: SQL> SQL> SELECT SESSIONS_MAX,SESSIONS_WARNING,SESSIONS_CURRENT,SESSIONS_HIGHWATER 2 FROM v PARAMETER WHERENAMELIKE ′session NAME TYPE VALUE−−−−−−−−− −−−−−−−−−− −−−−−−−−−−−sessions 3 225sessioncachedcursors 3 20sessionmaxopenfiles 3 107:查看曾经的最大会话数: SQL>SQL>SELECTSESSIONSMAX,SESSIONSWARNING,SESSIONSCURRENT,SESSIONSHIGHWATER 2 FROMvlicense;

SESSIONS_MAX SESSIONS_WARNING SESSIONS_CURRENT SESSIONS_HIGHWATER


0 0 512 553

SESSIONS_HIGHWATER表示曾经的最大会话数512

8:查询那些应用的连接数此时是多少

SELECT B.PROGRAM , COUNT(1)

FROM V P R O C E S S A , V PROCESS A, V PROCESSA,VSESSION B

WHERE A.ADDR = B.PADDR

AND B.USERNAME IS NOT NULL

GROUP BY B.PROGRAM;

会话状态:

会话有ACTIVE、INACTIVE、KILLED、CACHED、SNIPED五个状态,一般比较常见的有ACTIVE、INACTIVE、KILLED三个状态。

ACTIVE :处于此状态的会话,表示正在执行,处于活动状态。

INACTIVE :处于此状态的会话表示不是正在执行的

KILLED :处于此状态的会话,表示出现了错误或进程被杀掉,正在回滚,当然,这个状态的会话也占用系统资源的。还有一点就是, KILLED的状态一般会持续较长时间,如果你想快速杀掉回话,可以参考我以前的一篇文章ORACLE快速彻底Kill掉的会话

CACHED : Session temporarily cached for use by OracleXA
SNIPED : Session inactive, waiting on the client。 标记为SNIPED的进程被释放有两种条件:
1、相关的terminal再一次试图登录及执行sql
2、手动的在操作系统后台kill掉相应的spid
关于会话信息
通过如下SQL你可以查询你的每个应用程序到底在等待什么,从而针对这些信息对数据库的性能进行调整。
COL USERNAME FOR A12;
COL PROGRAM FOR A32;
COL EVENT FOR A26;
SELECT S.USERNAME
,S.PROGRAM
,S.STATUS
,SE.EVENT
,SE.TOTAL_WAITS
,SE.TOTAL_TIMEOUTS
,SE.TIME_WAITED
,SE.AVERAGE_WAIT
FROM V S E S S I O N S , V SESSION S, V SESSIONS,VSESSION_EVENT SE
WHERE S.SID=SE.SID AND SE.EVENT NOT LIKE 'SQL
Net%'

AND S.STATUS ='ACTIVE' AND S.USERNAME IS NOT NULL;

2.ORACLE中查询被锁的表并释放session

SELECT A.OWNER

,A.OBJECT_NAME

,B.XIDUSN

,B.XIDSLOT

,B.XIDSQN

,B.SESSION_ID

,B.ORACLE_USERNAME

,B.OS_USER_NAME

,B.PROCESS

,B.LOCKED_MODE

,C.MACHINE

,C.STATUS

,C.SERVER

,C.SID

,C.SERIAL#

,C.PROGRAM

FROM ALL_OBJECTS A,VKaTeX parse error: Expected group after '_' at position 23: ...OBJECT B,SYS.GV_̲SESSION C

WHERE A.OBJECT_ID = B.OBJECT_ID AND B.PROCESS = C.PROCESS ORDER BY 1,2;

3.查看占用系统IO较大的session

SELECT se.sid

,se.serial#

,pr.spid

,se.username

,se.status

,se.terminal

,se.program

,se.module

,se.sql_address

,st.event

,st.p1text

,si.physical_reads

,si.block_changes

FROM v s e s s i o n s e , v session se,v sessionse,vsession_wait st,v s e s s i o s i , v sess_io si,v sessiosi,vprocess pr

WHERE st.sid=se.sid AND st.sid=si.sid

AND se.paddr=pr.ADDR AND se.sid>6

AND st.wait_time=0 AND st.event NOT LIKE '%SQL%'

ORDER BY physical_reads DESC;

4.找出耗cpu较多的session

select a.sid

,spid

,status

,substr(a.program,1,40) prog

,a.terminal

,osuser

,value/60/100 value

from v s e s s i o n a , v session a,v sessiona,vprocess b,v$sesstat c

where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr

order by value desc

相关推荐
雷神乐乐1 分钟前
Oracle中的循环——FOR循环、WHILE循环和LOOP循环
数据库·sql·oracle·循环
wxgnolux5 分钟前
Oracle 故障实例 - 通过备份恢复到某时间点 故障恢复
数据库·oracle
阿火~6 分钟前
【亲测有效】Mybatis-Plus中更新字段为null
数据库·mysql·mybatis
weixin_307779138 分钟前
Neo4j 备份与恢复:原理、技术与最佳实践
运维·数据库·neo4j
Kila_27 分钟前
【iOS(swift)笔记-13】App版本不升级时本地数据库sqlite更新逻辑一
数据库·笔记
Kila_29 分钟前
【iOS(swift)笔记-14】App版本不升级时本地数据库sqlite更新逻辑二
数据库·笔记
TDengine (老段)36 分钟前
TDengine 运维——巡检工具(安装前预配置)
大数据·运维·数据库·时序数据库·iot·tdengine·涛思数据
django-尿素1 小时前
django入门-orm数据库操作
android·数据库·django
翻滚吧键盘2 小时前
数据库,Spring Boot,数据源
数据库·spring boot·后端
FixPng2 小时前
【数据库】《DBA实战手记》- 读书笔记
数据库·dba