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

相关推荐
程序员拂雨4 小时前
MongoDB知识框架
数据库·mongodb
Wyc724096 小时前
JDBC:java与数据库连接,Maven,MyBatis
java·开发语言·数据库
烧瓶里的西瓜皮6 小时前
Go语言从零构建SQL数据库(9)-数据库优化器的双剑客
数据库·sql·golang
地理探险家7 小时前
各类有关NBA数据统计数据集大合集
数据库·数据集·数据·nba·赛季
SelectDB技术团队8 小时前
顺丰科技:从 Presto 到 Doris 湖仓构架升级,提速 3 倍,降本 48%
大数据·数据库·数据仓库·信息可视化·数据分析·doris·实时分析
wangbaowo8 小时前
MySQL数据库下篇
数据库·经验分享·笔记·学习·mysql·安全
ABdolphin8 小时前
Spring-博客系统项目
数据库·sql·spring
伤不起bb8 小时前
MySQl 数据库操作
数据库·mysql
是店小二呀9 小时前
【金仓数据库征文】金仓数据库(KingbaseES)迁移与集群部署实战:从MySQL到KES的全流程解析
数据库·mysql·金仓数据库 2025 征文·数据库平替用金仓