• 【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——标记是否绑定跟踪可用与否

  • 相关阅读:
    leetcode刷题11. 盛最多水的容器
    docker报错Service 'pwn_deploy_chroot' failed to build: Get https://registry-1.docker.io/v2/library/ubuntu/manifests/16.04:net/http: request canceled
    常用断点记录
    c++继承学习
    leetcode刷题正则表达式
    x64类型的程序逆向思考
    vs2013下配置x64版c++
    MFC学习RepositionBars
    flask权限控制
    leetcode刷题七<整数反转>
  • 原文地址:https://www.cnblogs.com/husam/p/10242510.html
Copyright © 2020-2023  润新知