【Oracle】详解v$session

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

SYS@ORCL>desc v$session

 Name                                      Null?    Type

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

 SADDR                                              RAW(4)

 SID                                                NUMBER

 SERIAL#                                            NUMBER

 AUDSID                                             NUMBER

 PADDR                                              RAW(4)

 USER#                                              NUMBER

 USERNAME              2                             VARCHAR2(30)

 COMMAND                                            NUMBER

 OWNERID                                            NUMBER

 TADDR                                              VARCHAR2(8)

 LOCKWAIT                                           VARCHAR2(8)

 STATUS                                             VARCHAR2(8)

 SERVER                                             VARCHAR2(9)

 SCHEMA#                                            NUMBER

 SCHEMANAME                                         VARCHAR2(30)

 OSUSER                                             VARCHAR2(30)

 PROCESS                                            VARCHAR2(12)

 MACHINE                                            VARCHAR2(64)

 TERMINAL                                           VARCHAR2(30)

 PROGRAM                                            VARCHAR2(48)

 TYPE                                               VARCHAR2(10)

 SQL_ADDRESS                                        RAW(4)

 SQL_HASH_VALUE                                     NUMBER

 SQL_ID                                             VARCHAR2(13)

 SQL_CHILD_NUMBER                                   NUMBER

 PREV_SQL_ADDR                                      RAW(4)

 PREV_HASH_VALUE                                    NUMBER

 PREV_SQL_ID                                        VARCHAR2(13)

 PREV_CHILD_NUMBER                                  NUMBER

 MODULE                                             VARCHAR2(48)

 MODULE_HASH                                        NUMBER

 ACTION                                             VARCHAR2(32)

 ACTION_HASH                                        NUMBER

 CLIENT_INFO                                        VARCHAR2(64)

 FIXED_TABLE_SEQUENCE                               NUMBER

 ROW_WAIT_OBJ#                                      NUMBER

 ROW_WAIT_FILE#                                     NUMBER

 ROW_WAIT_BLOCK#                                    NUMBER

 ROW_WAIT_ROW#                                      NUMBER

 LOGON_TIME                                         DATE

 LAST_CALL_ET                                       NUMBER

 PDML_ENABLED                                       VARCHAR2(3)

 FAILOVER_TYPE                                      VARCHAR2(13)

 FAILOVER_METHOD                                    VARCHAR2(10)

 FAILED_OVER                                        VARCHAR2(3)

 RESOURCE_CONSUMER_GROUP                            VARCHAR2(32)

 PDML_STATUS                                        VARCHAR2(8)

 PDDL_STATUS                                        VARCHAR2(8)

 PQ_STATUS                                          VARCHAR2(8)

 CURRENT_QUEUE_DURATION                             NUMBER

 CLIENT_IDENTIFIER                                  VARCHAR2(64)

 BLOCKING_SESSION_STATUS                            VARCHAR2(11)

 BLOCKING_INSTANCE                                  NUMBER

 BLOCKING_SESSION                                   NUMBER

 SEQ#                                               NUMBER

 EVENT#                                             NUMBER

 EVENT                                              VARCHAR2(64)

 P1TEXT                                             VARCHAR2(64)

 P1                                                 NUMBER

 P1RAW                                              RAW(4)

 P2TEXT                                             VARCHAR2(64)

 P2                                                 NUMBER

 P2RAW                                              RAW(4)

 P3TEXT                                             VARCHAR2(64)

 P3                                                 NUMBER

 P3RAW                                              RAW(4)

 WAIT_CLASS_ID                                      NUMBER

 WAIT_CLASS#                                        NUMBER

 WAIT_CLASS                                         VARCHAR2(64)

 WAIT_TIME                                          NUMBER

 SECONDS_IN_WAIT                                    NUMBER

 STATE                                              VARCHAR2(19)

 SERVICE_NAME                                       VARCHAR2(64)

 SQL_TRACE                                          VARCHAR2(8)

 SQL_TRACE_WAITS                                    VARCHAR2(5)

 SQL_TRACE_BINDS                                    VARCHAR2(5)

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

SAD——当前会话的id号

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

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

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

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

USERNAME——会话对应用户的USERNAME

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

Table 7-5 COMMAND Column of V$SESSION and Corresponding Commands

Number

Command

Number

Command

1

CREATE TABLE

2

INSERT

3

SELECT

4

CREATE CLUSTER

5

ALTER CLUSTER

6

UPDATE

7

DELETE

8

DROP CLUSTER

9

CREATE INDEX

10

DROP INDEX

11

ALTER INDEX

12

DROP TABLE

13

CREATE SEQUENCE

14

ALTER SEQUENCE

15

ALTER TABLE

16

DROP SEQUENCE

17

GRANT OBJECT

18

REVOKE OBJECT

19

CREATE SYNONYM

20

DROP SYNONYM

21

CREATE VIEW

22

DROP VIEW

23

VALIDATE INDEX

24

CREATE PROCEDURE

25

ALTER PROCEDURE

26

LOCK

27

NO-OP

28

RENAME

29

COMMENT

30

AUDIT OBJECT

31

NOAUDIT OBJECT

32

CREATE DATABASE LINK

33

DROP DATABASE LINK

34

CREATE DATABASE

35

ALTER DATABASE

36

CREATE ROLLBACK SEG

37

ALTER ROLLBACK SEG

38

DROP ROLLBACK SEG

39

CREATE TABLESPACE

40

ALTER TABLESPACE

41

DROP TABLESPACE

42

ALTER SESSION

43

ALTER USER

44

COMMIT

45

ROLLBACK

46

SAVEPOINT

47

PL/SQL EXECUTE

48

SET TRANSACTION

49

ALTER SYSTEM

50

EXPLAIN

51

CREATE USER

52

CREATE ROLE

53

DROP USER

54

DROP ROLE

55

SET ROLE

56

CREATE SCHEMA

57

CREATE CONTROL FILE

59

CREATE TRIGGER

60

ALTER TRIGGER

61

DROP TRIGGER

62

ANALYZE TABLE

63

ANALYZE INDEX

64

ANALYZE CLUSTER

65

CREATE PROFILE

66

DROP PROFILE

67

ALTER PROFILE

68

DROP PROCEDURE

70

ALTER RESOURCE COST

71

CREATE MATERIALIZED VIEW LOG

72

ALTER MATERIALIZED VIEW LOG

73

DROP MATERIALIZED VIEW LOG

74

CREATE MATERIALIZED VIEW

75

ALTER MATERIALIZED VIEW

76

DROP MATERIALIZED VIEW

77

CREATE TYPE

78

DROP TYPE

79

ALTER ROLE

80

ALTER TYPE

81

CREATE TYPE BODY

82

ALTER TYPE BODY

83

DROP TYPE BODY

84

DROP LIBRARY

85

TRUNCATE TABLE

86

TRUNCATE CLUSTER

91

CREATE FUNCTION

92

ALTER FUNCTION

93

DROP FUNCTION

94

CREATE PACKAGE

95

ALTER PACKAGE

96

DROP PACKAGE

97

CREATE PACKAGE BODY

98

ALTER PACKAGE BODY

99

DROP PACKAGE BODY

100

LOGON

101

LOGOFF

102

LOGOFF BY CLEANUP

103

SESSION REC

104

SYSTEM AUDIT

105

SYSTEM NOAUDIT

106

AUDIT DEFAULT

107

NOAUDIT DEFAULT

108

SYSTEM GRANT

109

SYSTEM REVOKE

110

CREATE PUBLIC SYNONYM

111

DROP PUBLIC SYNONYM

112

CREATE PUBLIC DATABASE LINK

113

DROP PUBLIC DATABASE LINK

114

GRANT ROLE

115

REVOKE ROLE

116

EXECUTE PROCEDURE

117

USER COMMENT

118

ENABLE TRIGGER

119

DISABLE TRIGGER

120

ENABLE ALL TRIGGERS

121

DISABLE ALL TRIGGERS

122

NETWORK ERROR

123

EXECUTE TYPE

157

CREATE DIRECTORY

158

DROP DIRECTORY

159

CREATE LIBRARY

160

CREATE JAVA

161

ALTER JAVA

162

DROP JAVA

163

CREATE OPERATOR

164

CREATE INDEXTYPE

165

DROP INDEXTYPE

167

DROP OPERATOR

168

ASSOCIATE STATISTICS

169

DISASSOCIATE STATISTICS

170

CALL METHOD

171

CREATE SUMMARY

172

ALTER SUMMARY

173

DROP SUMMARY

174

CREATE DIMENSION

175

ALTER DIMENSION

176

DROP DIMENSION

177

CREATE CONTEXT

178

DROP CONTEXT

179

ALTER OUTLINE

180

CREATE OUTLINE

181

DROP OUTLINE

182

UPDATE INDEXES

183

ALTER OPERATOR

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

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

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

STATUS——当前会话的状态

l ACTIVE:正在执行SQL语句

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

l KILLED:被标记为已经杀死

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

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

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

l Dedicated:专用服务器模式

l Shared:共享服务器模式

SECHEMA#——模式用户标识符

SECHEMANAME——模式用户名

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

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

附:

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

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

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

MACHINE——操作系统机器名

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

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

select utl_inaddr.get_host_address(terminal) from v$session where username is not null;

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完成一个user call后就会增加的一个数值,也就是说,如果session挂起,它就不会增加。因此可以根据这个字段来监控某个时间点以来的session性能情况。例如,一个小时前某个session的此字段数值为10000,而现在是20000,则表明一个小时内其user call较频繁,可以重点关注此session的performance statistics。

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

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

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为正在等待
NO HOLDER 
GLOBAL
NOT IN WAIT
UNKNOWN

发生阻塞时候可以查询

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

       SID SQL_ID        PREV_SQL_ID   BLOCKING_SESSION_STATUS           BLOCKING_SESSION WAIT_CLASS_ID SECONDS_IN_WAIT WAIT_CLASS
---------- ------------- ------------- --------------------------------- ---------------- ------------- --------------- ----------------------------------------------------------------
       290 0hcsvq77pq2a8 dyk4dprp70d74 VALID                                          300    4217450380             118 Application
       300               0hcsvq77pq2a8 NO HOLDER                                             2723168908             124 Idle
可以看到290 的进程被300的进程阻塞。

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

SQL_TEXT
----------------------------------------------------------------
select count(*) from t2

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文档的资料:
  If WAIT_TIME = 0, then SECONDS_IN_WAIT is the seconds spent in the
  current wait condition. If WAIT_TIME > 0, then SECONDS_IN_WAIT is the
  seconds since the start of the last wait, and SECONDS_IN_WAIT - WAIT_
  TIME / 100 is the active seconds since the last wait ended.

STATE

0 - WAITING (the session is currently waiting)
-2 - WAITED UNKNOWN TIME (duration of last wait is unknown)
-1 - WAITED SHORT TIME (last wait <1/100th of a second)
>0 - WAITED KNOWN TIME (WAIT_TIME = duration of last wait)


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

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

原文地址:https://www.cnblogs.com/husam/p/10242510.html