【Oracle】详解v$session

摘要:
首先查看一下v$session都存在哪些列SYS@ORCL˃descv$sessionNameNull?也就是说SID+SERIAL#来确定唯一的会话。AUDSID——该会话对应的审计会话的id号PADDR——会话对应的进程地址,关联v$process视图的addr字段可以找到会话对应的操作系统进程。

首先查看一下v$session都存在哪些列

SYS@ORCL>descv$session

NameNull?Type

-----------------------------------------------------------------------------

SADDRRAW(4)

SIDNUMBER

SERIAL#NUMBER

AUDSIDNUMBER

PADDRRAW(4)

USER#NUMBER

USERNAME2VARCHAR2(30)

COMMANDNUMBER

OWNERIDNUMBER

TADDRVARCHAR2(8)

LOCKWAITVARCHAR2(8)

STATUSVARCHAR2(8)

SERVERVARCHAR2(9)

SCHEMA#NUMBER

SCHEMANAMEVARCHAR2(30)

OSUSERVARCHAR2(30)

PROCESSVARCHAR2(12)

MACHINEVARCHAR2(64)

TERMINALVARCHAR2(30)

PROGRAMVARCHAR2(48)

TYPEVARCHAR2(10)

SQL_ADDRESSRAW(4)

SQL_HASH_VALUENUMBER

SQL_IDVARCHAR2(13)

SQL_CHILD_NUMBERNUMBER

PREV_SQL_ADDRRAW(4)

PREV_HASH_VALUENUMBER

PREV_SQL_IDVARCHAR2(13)

PREV_CHILD_NUMBERNUMBER

MODULEVARCHAR2(48)

MODULE_HASHNUMBER

ACTIONVARCHAR2(32)

ACTION_HASHNUMBER

CLIENT_INFOVARCHAR2(64)

FIXED_TABLE_SEQUENCENUMBER

ROW_WAIT_OBJ#NUMBER

ROW_WAIT_FILE#NUMBER

ROW_WAIT_BLOCK#NUMBER

ROW_WAIT_ROW#NUMBER

LOGON_TIMEDATE

LAST_CALL_ETNUMBER

PDML_ENABLEDVARCHAR2(3)

FAILOVER_TYPEVARCHAR2(13)

FAILOVER_METHODVARCHAR2(10)

FAILED_OVERVARCHAR2(3)

RESOURCE_CONSUMER_GROUPVARCHAR2(32)

PDML_STATUSVARCHAR2(8)

PDDL_STATUSVARCHAR2(8)

PQ_STATUSVARCHAR2(8)

CURRENT_QUEUE_DURATIONNUMBER

CLIENT_IDENTIFIERVARCHAR2(64)

BLOCKING_SESSION_STATUSVARCHAR2(11)

BLOCKING_INSTANCENUMBER

BLOCKING_SESSIONNUMBER

SEQ#NUMBER

EVENT#NUMBER

EVENTVARCHAR2(64)

P1TEXTVARCHAR2(64)

P1NUMBER

P1RAWRAW(4)

P2TEXTVARCHAR2(64)

P2NUMBER

P2RAWRAW(4)

P3TEXTVARCHAR2(64)

P3NUMBER

P3RAWRAW(4)

WAIT_CLASS_IDNUMBER

WAIT_CLASS#NUMBER

WAIT_CLASSVARCHAR2(64)

WAIT_TIMENUMBER

SECONDS_IN_WAITNUMBER

STATEVARCHAR2(19)

SERVICE_NAMEVARCHAR2(64)

SQL_TRACEVARCHAR2(8)

SQL_TRACE_WAITSVARCHAR2(5)

SQL_TRACE_BINDSVARCHAR2(5)

SADDR-——当前会话在内存中的地址

SAD——当前会话的id号

SERIAL#——会话的串号,当一个会话结束后,另外的会话可能会重用该会话的id号,此时就需要SERIAL#来确定唯一的会话对象。也就是说SID+SERIAL#来确定唯一的会话。

AUDSID——该会话对应的审计会话的id号

PADDR——会话对应的进程地址,关联v$process视图的addr字段可以找到会话对应的操作系统进程。

USER#——会话对应用户的id号,对应dba_users的user_id字段

USERNAME——会话对应用户的USERNAME

COMMAND——正在执行的当前命令类型,记录的是一个数值,要结合下表进行查看

Table7-5COMMANDColumnofV$SESSIONandCorrespondingCommands

Number

Command

Number

Command

1

CREATETABLE

2

INSERT

3

SELECT

4

CREATECLUSTER

5

ALTERCLUSTER

6

UPDATE

7

DELETE

8

DROPCLUSTER

9

CREATEINDEX

10

DROPINDEX

11

ALTERINDEX

12

DROPTABLE

13

CREATESEQUENCE

14

ALTERSEQUENCE

15

ALTERTABLE

16

DROPSEQUENCE

17

GRANTOBJECT

18

REVOKEOBJECT

19

CREATESYNONYM

20

DROPSYNONYM

21

CREATEVIEW

22

DROPVIEW

23

VALIDATEINDEX

24

CREATEPROCEDURE

25

ALTERPROCEDURE

26

LOCK

27

NO-OP

28

RENAME

29

COMMENT

30

AUDITOBJECT

31

NOAUDITOBJECT

32

CREATEDATABASELINK

33

DROPDATABASELINK

34

CREATEDATABASE

35

ALTERDATABASE

36

CREATEROLLBACKSEG

37

ALTERROLLBACKSEG

38

DROPROLLBACKSEG

39

CREATETABLESPACE

40

ALTERTABLESPACE

41

DROPTABLESPACE

42

ALTERSESSION

43

ALTERUSER

44

COMMIT

45

ROLLBACK

46

SAVEPOINT

47

PL/SQLEXECUTE

48

SETTRANSACTION

49

ALTERSYSTEM

50

EXPLAIN

51

CREATEUSER

52

CREATEROLE

53

DROPUSER

54

DROPROLE

55

SETROLE

56

CREATESCHEMA

57

CREATECONTROLFILE

59

CREATETRIGGER

60

ALTERTRIGGER

61

DROPTRIGGER

62

ANALYZETABLE

63

ANALYZEINDEX

64

ANALYZECLUSTER

65

CREATEPROFILE

66

DROPPROFILE

67

ALTERPROFILE

68

DROPPROCEDURE

70

ALTERRESOURCECOST

71

CREATEMATERIALIZEDVIEWLOG

72

ALTERMATERIALIZEDVIEWLOG

73

DROPMATERIALIZEDVIEWLOG

74

CREATEMATERIALIZEDVIEW

75

ALTERMATERIALIZEDVIEW

76

DROPMATERIALIZEDVIEW

77

CREATETYPE

78

DROPTYPE

79

ALTERROLE

80

ALTERTYPE

81

CREATETYPEBODY

82

ALTERTYPEBODY

83

DROPTYPEBODY

84

DROPLIBRARY

85

TRUNCATETABLE

86

TRUNCATECLUSTER

91

CREATEFUNCTION

92

ALTERFUNCTION

93

DROPFUNCTION

94

CREATEPACKAGE

95

ALTERPACKAGE

96

DROPPACKAGE

97

CREATEPACKAGEBODY

98

ALTERPACKAGEBODY

99

DROPPACKAGEBODY

100

LOGON

101

LOGOFF

102

LOGOFFBYCLEANUP

103

SESSIONREC

104

SYSTEMAUDIT

105

SYSTEMNOAUDIT

106

AUDITDEFAULT

107

NOAUDITDEFAULT

108

SYSTEMGRANT

109

SYSTEMREVOKE

110

CREATEPUBLICSYNONYM

111

DROPPUBLICSYNONYM

112

CREATEPUBLICDATABASELINK

113

DROPPUBLICDATABASELINK

114

GRANTROLE

115

REVOKEROLE

116

EXECUTEPROCEDURE

117

USERCOMMENT

118

ENABLETRIGGER

119

DISABLETRIGGER

120

ENABLEALLTRIGGERS

121

DISABLEALLTRIGGERS

122

NETWORKERROR

123

EXECUTETYPE

157

CREATEDIRECTORY

158

DROPDIRECTORY

159

CREATELIBRARY

160

CREATEJAVA

161

ALTERJAVA

162

DROPJAVA

163

CREATEOPERATOR

164

CREATEINDEXTYPE

165

DROPINDEXTYPE

167

DROPOPERATOR

168

ASSOCIATESTATISTICS

169

DISASSOCIATESTATISTICS

170

CALLMETHOD

171

CREATESUMMARY

172

ALTERSUMMARY

173

DROPSUMMARY

174

CREATEDIMENSION

175

ALTERDIMENSION

176

DROPDIMENSION

177

CREATECONTEXT

178

DROPCONTEXT

179

ALTEROUTLINE

180

CREATEOUTLINE

181

DROPOUTLINE

182

UPDATEINDEXES

183

ALTEROPERATOR

OWNERID——如果值为2147483644,则此列的内容无效。否则此列包含拥有可移植会话的用户标符。对于利用并行从服务器的操作,将这个值解释为一个48字节的值。其低位两字节表示会话号,而高位字节表示查询协调程序的实例ID。

TADDR——当前有活动事务的地址,关联v$transaction视图的addr可以查出当前session正在使用的回滚段的信息以及当前事务大小等情况。

LOCKWAIT——当前会话正在等待的锁的地址,如果没有等待锁则为null。

STATUS——当前会话的状态

lACTIVE:正在执行SQL语句

lINACTIVE:会话不是活动状态,正在等待要执行的SQL语句。

lKILLED:被标记为已经杀死

lCACHED:会话被oracle*XA缓存起来使用。不是太懂,两端提交?。。

lSNIPED:会话在等待client端的响应。

SERVER——数据库提供服务的方式

lDedicated:专用服务器模式

lShared:共享服务器模式

SECHEMA#——模式用户标识符

SECHEMANAME——模式用户名

OSUSER——会话的客户端系统的用户名

PROCESS——会话客户端进程id号

附:

关于v$process与v$session中process的理解

说明
v$session有个process字段,V$PROCESS有个SPID字段,这两个字段是不是一个意思呢?是不是都代表会话的操作系统进程呢?
官方文档上的解释:
SPIDVARCHAR2(12)Operatingsystemprocessidentifier
PROCESSVARCHAR2(9)OperatingsystemclientprocessID

本文以数据库服务器安装在linux上为例进行说明。
V$PROCESS中的SPID表示的是操作系统的进程,v$session中的process表示客户端进程ID,即客户端进程在客户端机器上的进程ID号。一个表示客户端进程在客户端机器上的进程号,一个表示服务器进程在服务器上的进程号。
连接服务器的会话,发起会话的客户端进程可能是unix进程,也可能是windows进程。

MACHINE——操作系统机器名

TERMINAL——操作系统系统终端名称

可以根据主terminal查询客户端的ip

selectutl_inaddr.get_host_address(terminal)fromv$sessionwhereusernameisnotnull;

PROGRAM——操作系统通过什么程序连接oracle。通过本机连接的session,一般都有program。如果是通过服务器连接的session,一般都没有program。

TYPE——会话的类型。是用户创建的还是后台进程创建的。

SQL_ADDRESS和SQL_HASH_VALUE——一起来确定正在执行的SQL语句。关联v$sql,v$sqltext,v$sqlarea。

SQL_ID——正在执行的SQL语句的id

SQL_CHILD_MUMBER——正在执行的SQL语句的子句。

PREV_......前一句执行的SQL语句的信息。

MODULE——用户通过DBMS_APPLICATION_INFO.SET_MODULE进行的一些设置的名字

MODULE_HASH——MODULE的hash值

ACTION——用户通过DBMS_APPLICATION_INFO.SET_ACTION进行的一些设置的名字

ACTION_HASH——ACTION的HASH值

CLIENT_INFO——用户通过DBMS_APPLICATION_INFO.SET_CLIENT_INFO进行一些设置的相关信息。

FIXD_TABLE_SEQUENCE——当session完成一个usercall后就会增加的一个数值,也就是说,如果session挂起,它就不会增加。因此可以根据这个字段来监控某个时间点以来的session性能情况。例如,一个小时前某个session的此字段数值为10000,而现在是20000,则表明一个小时内其usercall较频繁,可以重点关注此session的performancestatistics。

ROW_WAIT_OBJ#——被锁定行所在table的object_id。和dba_objects中的object_id关联可以得到被锁定的tablename。

ROW_WAIT_FILE#——被锁定行所在的datafileid。和v$datafile中的file#关联可以得到datafilename。

ROW_WAIT_ROW#——session当前正在等待的被锁定的行。

LOGON_TIME——会话登录的时间

LAST_CALL_ET——如果会话是ACTIVE状态则表示了会话已经持续ACTIVE状态多久。如果会话是INACTIVE状态则表示会话已经处于INACTIVE状态多久。

PDML_ENABLED——这列已经被PDML_STATUS列取代,那么PDML_STATUS列代表了什么。如果是ENABLED则代表了这个会话执行DML语句可以使用oracle的并行执行技术,如果是DISABLE则代表了这个会话执行DDL语句禁止使用oracle并行执行技术。

PDDL_STATUS——和PDML_STATUS差不多,只不过这个是针对DDL语句的。

PQ_STATUS——也和以上两条差不多,只不过这个是针对select语句的。Q代表query。

CURRENT_QUEUE_DURATION——如果值为1则代表session已经在队列中,如果是0则代表还没有形成排队。

CLIENT_IDENTIFIER——客户端会话的标识符。

BLOCKING_SESSION_STATUS
VALID状态valid为正在等待
NOHOLDER
GLOBAL
NOTINWAIT
UNKNOWN

发生阻塞时候可以查询

到了10G,多了blocking_session和blocking_session_status字段,可以知道是否被阻塞。如果blocking_session_status字段是VALID,那一个有效的SID会出现在blocking_session字段。
SQL>selectsid,sql_id,PREV_SQL_ID,BLOCKING_SESSION_STATUS,BLOCKING_SESSION,WAIT_CLASS_ID,SECONDS_IN_WAIT,WAIT_CLASSfromv$sessionwhere
2username='KONG';

SIDSQL_IDPREV_SQL_IDBLOCKING_SESSION_STATUSBLOCKING_SESSIONWAIT_CLASS_IDSECONDS_IN_WAITWAIT_CLASS
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2900hcsvq77pq2a8dyk4dprp70d74VALID3004217450380118Application
3000hcsvq77pq2a8NOHOLDER2723168908124Idle
可以看到290的进程被300的进程阻塞。

在以前如果想要查询某个session执行了那个sql语句,那需要用两个字段来查询:HASH_VALUE和ADDRESS。现在只有一个SQL_ID就可以了。
SQL>selectsql_textfromv$sqltextst,v$sessions
2where(st.sql_id=s.sql_id)ands.sid=300;

SQL_TEXT
----------------------------------------------------------------
selectcount(*)fromt2

BLOCKING_INSTANCE——模块化的实例标识符
BLOCKING_SESSION——模块化的session标识符
SEQ#——不唯一的标示每个等待的序列号
EVENT#——事件数量
EVENT——oracle的session正在等待的数据或者事件

P1TEXT——首个附加参数的描述
P1——首个附加参数
P1RAW——首个附加参数和前一个区别我还不是很懂
P2TEXT——第二个附加参数的描述
P2——第二个附加参数
P2RAW——第二个附加参数
P3TEXT——第三个附加参数的描述
P3——第三个附加参数
P3RAW——第三个附加参数

WAIT_CLASS_ID——标记等待事件种类
WAIT_CLASS#——等待事件的种类
WAIT_CLASS——等待事件的名称
WAIT_TIME——非0代表上一次session上次等待时间,0代表session当前正在等待
SECONDS_IN_WAIT——等待的时间

oracle文档的资料:
  IfWAIT_TIME=0,thenSECONDS_IN_WAITisthesecondsspentinthe
  currentwaitcondition.IfWAIT_TIME>0,thenSECONDS_IN_WAITisthe
  secondssincethestartofthelastwait,andSECONDS_IN_WAIT-WAIT_
  TIME/100istheactivesecondssincethelastwaitended.

STATE

0-WAITING(thesessioniscurrentlywaiting)
-2-WAITEDUNKNOWNTIME(durationoflastwaitisunknown)
-1-WAITEDSHORTTIME(lastwait<1/100thofasecond)
>0-WAITEDKNOWNTIME(WAIT_TIME=durationoflastwait)


SERVICE_NAME——session的服务名称
SQL_TRACE——标示sql是否能被跟踪
SQL_TRACE_WAITS——标记是否等待事件被跟踪

SQL_TRACE_BINDS——标记是否绑定跟踪可用与否

免责声明:文章转载自《【Oracle】详解v$session》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇深入拆解Tomcat &amp;amp;Jetty——极客时间10条技巧优化数据库速度下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle DBCA工具检测不到ASM磁盘组

本例环境: 操作系统OEL 6.5 数据库版本:11.2.0.4 问题:DBCA建库的时候,检测不到ASM磁盘组   因素一:可能是在授权的时候执行了 chown –R 775 /u01/app等修改权限。 分析:数据库无法连接ASM,这应该是权限问题,grid的$ORACLE_BASE是/u01/app/grid,oracle的$ORACLE_BASE是...

MyBatis 原码解析(version:3.2.7)

mybatis-plus 实践及架构原理.pdf mybatis-plus思维导图 首先,我们看使用原生的JDBC来操作数据库的方式: // 1. 获取JDBC Connection Connection connection = DbManager.getConnectoin(); // 2. 组装sql语句 String sql = "inser...

Oracle Namespace 说明

一. 初识Namespace Oracle通过namespace来管理schema object的名字,关于Namespace 的定义,在官网文档上没有找到一个详细的定义,在网上搜到一些相关信息: SchemaObject Namespaces A namespace defines a group of object types, within whic...

Kali学习笔记39:SQL手工注入(1)

终于到了SQL注入 最大的、最经典的、最常见的Web漏洞就是SQL注入漏洞 SQL注入的原理这里就不说了,百度 打开DVWA,SQL注入测试模块 测试单引号,发现出错,于是想到测试语句: 1' or '1'='1 成功: 测试是否存在漏洞: 1' and '1'='1 如果返回数据,但是1' and '1'='0 不返回数据,代表存在sql注入 或者简...

屌炸天,Oracle 发布了一个全栈虚拟机 GraalVM,支持 Python!

前阵子,Oracle 发布了一个黑科技 “GraalVM”,号称是一个全新的通用全栈虚拟机,并具有高性能、跨语言交互等逆天特性,真有这么神奇? GraalVM 简介 GraalVM 是一个跨语言的通用虚拟机,不仅支持了 Java、Scala、Groovy、Kotlin 等基于 JVM 的语言,以及 C、C++ 等基于 LLVM 的语言,还支持其他像 Jav...

SQL语句的三大类

数据定义语言(DDL Data Defination Language):用于创建和定义数据库对象,并且将对这些对象的定义保存到数据库字典中,通过DDL语句可以创建数据库对象、修改数据库对象、删除数据库对象等。 数据控制语言(DCL Data Control Language):用于修改数据库结构的操作权限。 数据操纵语言(DML Data Manipul...