转载

【会话】V$SESSION视图

【会话】V$SESSION视图




讲到Oracle的会话,就必须首先对V$SESSION这个视图中的每个列都非常熟悉,下面作者以表格的形式对这个视图中的重要列详细说明。

3-26 V$SESSION视图

数据类型

说明

ACTION

VARCHAR2(32)

包含当前执行活动的名称

AUDSID

NUMBER

审计会话的ID审查SESSION ID唯一性,通常也用于寻找并行查询模式,SQL如下:

SELECT SID,

       OSUSER,

       USERNAME,

       MACHINE,

       PROCESS

FROM   V$SESSION

WHERE  AUDSID = USERENV('SESSIONID');

CLIENT_INFO

VARCHAR2(64)

DBMS_APPLICATION_INFO.SET_CLIENT_INFO过程设置的信息

COMMAND

NUMBER

正在执行的SQL语句的类型,有关值所代表的含义,请参阅V$SQLCOMMAND视图

LAST_CALL_ET

NUMBER

用户最后一条语句执行完毕后到SYSDATE的时间,单位为秒。每次用户执行一个新的语句后,该字段复位为0,重新开始记数。可以通过该字段来获得一个连接用户最后一次操作数据库后的空闲时间

LOCKWAIT

VARCHAR2(8)

等待锁的地址;如果没有,那么值为NULL

LOGON_TIME

DATE

用户的登录时间

MACHINE

VARCHAR2(64)

操作系统机器名

MODULE

VARCHAR2(48)

包含当前正在执行的模块名

OSUSER

VARCHAR(15)

操作系统用户名

OWNERID

NUMBER

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

PADDR

RAW(4)

拥有这个会话的进程地址

PDML_ENABLED

VARCHAR2(3)

此列已被PDML_STATUS所替代

PDML_STATUS

VARCHAR2(8)

如果ENABLED,那么会话正处于PARALLEL DML启用方式。如果DISABLED,那么此会话不支持PARALLEL DML启用方式。如果FORCED,那么会话已经更改为强制PARALLEL DML

PROCESS

VARCHAR2(9)

操作系统客户机进程ID

PROGRAM

VARCHAR(48)

操作系统程序名

ROW_WAIT_BLOCK#

NUMBER

包含ROW_WAIT_ROW#中指定的ROWID的数据文件的标识符

ROW_WAIT_FILE#

NUMBER

包含ROW_WAIT_ROW#中指定的ROWID的数据文件的标识符。此列仅在会话当前正在等待其它事务处理提交并且ROW_WAIT_OBJ#不为-1时有效

ROW_WAIT_OBJ#

NUMBER

包含ROW_WAIT_ROW#中指定的ROW#的表的对象ID

ROW_WAIT_ROW#

NUMBER

被锁定的当前ROWID。此列仅在会话当前正在等待其它事务处理提交并且ROW_WAIT_OBJ#不为-1时有效

SADDR

RAW(4)

会话地址,对应于V$TRANSACTION.SES_ADDR

SCHEMA#

NUMBER

模式用户标识符

SCHEMANANME

VARCHAR2(30)

模式用户名

SERIAL#

NUMBER

会话序列号。用来唯一地标识会话对象。如果该会话结束且其它会话以相同的会话ID开始,那么保证会话级的命令被应用到正确会话对象

SERVER

VARCHAR2(9)

表示服务器类型:DEDICATEDSHAREDPSEUDOPOOLEDNONE。若显示的结果中有NONESHARED,则说明当前数据库启动了共享服务器模式。其中,状态为NONE的会话表示空闲的共享服务器连接,说明当前会话没有处理任务;若进程正在执行某些任务则会表现为SHARED状态。PSEUDO和“ALTER SYSTEM KILL SESSION sid,serial#;”相关,如果发出ALTER SYSTEM去终止一个会话,被标记为终止的SESSIONV$SEESSIONSTATUSKILLED,对应的SERVER值为PSEUDOPOOLEDOracle 11g推出的驻留连接池(Database Resident Connection Pool)特性相关,驻留连接池提供了数据库层面上的连接池管理机制,为应对高并发、短会话前端应用进行有益的尝试,POOLED表示使用驻留连接池技术的连接

SID

NUMBER

会话标识符

SQL_ADDRESS

RAW(4)

SQL_HASH_VALUE一起使用,标识当前正在执行的SQL语句

SQL_HASH_VALUE

NUMBER

SQL_ADDRESS一起使用,标识当前正在执行的SQL语句

STATUS

VARCHAR2(8)

会话的状态:

ACTIVE:当前正在执行SQL语句

INACTIVE:等待操作(即等待需要执行的SQL语句)

KILLED:会话已经被删除

SNIPED:会话不活动,在客户机上等待

TADDR

VARCHAR2(8)

事务处理状态对象的地址

TERMINAL

VARCHAR2(10)

操作系统终端名

TYPE

VARCHAR2(10)

会话类型

USER#

NUMBER

Oracle用户标识符

USERNAME

VARCHAR(30)

Oracle用户名

CREATOR_ADDR

RAW(8)

对应V$PROCESSADDR列,若当前会话为KILLED状态的话,则可以使用该列来返回会话的地址

EVENT

VARCHAR2(64)

等待事件的名称,若为空则表示ON CPU





 Oracle 11g中v$session视图server列的含义 

原文地址:Oracle 11g中v$session视图server列的含义 作者:hoegh

    V$SESSION是基础信息视图,用于找寻用户SID或SADDR。不过,它也有一些列会动态的变化,可用于检查用户。在该视图中,每一个连接到数据库实例中的session都拥有一条记录,包括用户session及后台进程如DBWR,LGWR,arcchiver等等。
   V$SESSION视图包含很多列,涉及到session信息、client信息以及application信息等。其中,server列信息表示该session的连接类型,也就是咱们常说的共享服务器连接或者专用服务器连接。那有没有其他服务器连接类型呢?下面我们就看一下Oracle11g官方文档中server列的几个取值:
  • DEDICATED
  • SHARED
  • PSEUDO
  • POOLED
  • NONE
    
   其中,DEDICATED表示专用服务器连接,SHARED表示共享服务器连接,这两个大家较为熟悉;
   PSEUDO和kill session相关,如果发出ALTER SYSTEM去终止session的会话,等待60秒后没有终止session,会收到一个信息表明session已标识为终止。被标记为终止的session在v$seession的status为KILLED,对应的server值可能为PSEUDO;
   POOLED和Oracle 11g推出的驻留连接池(Database Resident Connection Pool)特性相关,驻留连接池提供了数据库层面上的连接池管理机制,为应对高并发、短会话前端应用进行有益的尝试,POOLED表示使用驻留连接池技术的连接;
   NONE表示空闲的共享服务器连接。

hoegh
2016.01.31
-- The End --



 v$session中LAST_CALL_ET参数的理解 

原文地址:v$session中LAST_CALL_ET参数的理解 作者:zhanglei_itput


    在实际的数据库应用中,我们经常遇到这样一个问题,连接到Oracle数据库的用户在作了一次操作后,再也没有后续操作,但却长时间没有和数据库断开连接。最近在研究一个中间件到数据库中的长连接异常问题,查询到v$session中LAST_CALL_ET参数,觉得这个参数很有用,下面是自己的一点理解:
    
    1. 参数定义
       
 LOGON_TIME 是一个日期型(Date)字段,为用户登陆时间; 
        LAST_CALL_ET是一个数字型(Number)字段,其含义是用户最后一条语句执行完毕后到sysdate的时间,单位为秒。每次用户执行一个新的语句后,该字段复位为0,重新开始记数。我们可以通过该字段来获得一个连接用户最后一次操作数据库后的空闲时间。
        针对这两个参数定义的测试:
        SQL> conn system/oracle@devdb2;
        已连接。
        SQL> select ses.SID,ses.username,ses.machine,ses.program,ses.last_call_et,sql.hash_value,sql.sql_text
                   from v$session ses, v$sql sql
                   where ses.sql_hash_value = sql.hash_value(+)
                   and ses.PROGRAM = 'sqlplus.exe'
        

SID USERNAME MACHINE PROGRAM LAST_CALL_ET HASH_VALUE SQL_TEXT
132 SYSTEM ZDC/BEILEI sqlplus.exe 3(登陆后的时间)    

        SQL> select count(*) from user_object_size;
SID USERNAME MACHINE PROGRAM LAST_CALL_ET HASH_VALUE SQL_TEXT
132 SYSTEM ZDC/BEILEI sqlplus.exe 24(sql执行的时间) 178228611 select count(*) from user_object_size

        SQL> select count(*) from user_object_size;
                   COUNT(*)
                   ----------
                           20
SID USERNAME MACHINE PROGRAM LAST_CALL_ET HASH_VALUE SQL_TEXT
132 SYSTEM ZDC/BEILEI sqlplus.exe 1(sql执行完,参数复位0,重新开始计算到sysdate的时间/s)    


    2. 识别超过一定空闲时间的连接
         select username,logon_time,last_call_et, 
         to_char(sysdate-(last_call_et/(60*60*24)),'hh24:mi:ss') last_work_time
         from v$session
         where username is not null;
         
         select ses.username,ses.machine,ses.program,ses.last_call_et,sql.hash_value,sql.sql_text
         from v$session ses, v$sql sql
         where ses.sql_hash_value = sql.hash_value
         and ses.last_call_et > 600
         and ses.type = 'USER'

          SELECT s.username 用户名称, s.status 状态,s.machine 机器名称,
        osuser 操作系统用户名称,spid UNIX进程号,
          'kill -9 '||spid UNIX级断开连接,
          'alter system kill session ' ||''''||s.sid||',
          '||s.serial# || ''';' Oracle级断开连接,
          TO_CHAR (logon_time, 'dd/mm/yyyy hh24:mi:ss') 登陆时间,
           last_call_et 空闲时间秒,
           TO_CHAR (TRUNC (last_call_et / 3600, 0))||' '||' HRS '||
       TO_CHAR (TRUNC ((last_call_et - TRUNC(last_call_et / 3600, 0) * 3600) / 60, 0)  ) ||' MINS' 空闲时间小时分钟,
           module 模块
          FROM v$session s, v$process p
          WHERE TYPE = 'USER'
          AND p.addr = s.paddr
         AND status != 'KILLED'
          -- AND SUBSTR (machine, 1, 19) NOT IN ('机器名')
         AND last_call_et > 60 * 60 * 1-- 空闲时间超过1小时的连接
         ORDER BY last_call_et desc;

        select  sid,username,status,
                     to_char(logon_time,'dd-mm-yy hh:mi:ss') "LOGON",
                     floor(last_call_et/3600)||':'||
                     floor(mod(last_call_et,3600)/60)||':'||
                     mod(mod(last_call_et,3600),60) "IDLE",
                    program
         from v_$session
        where type='USER'
         order by last_call_et;

        select s.process, s.sid,  t.sql_text 
        from gv$session s, gv$sql t 
        where s.sql_address =t.address  
         and s.sql_hash_value =t.hash_value 
         --and s.program like '%JDBC%' 
         and s.last_call_et > 600 
         and s.status = 'ACTIVE'

个人认为还是查清楚这些异常连接的原因,不要轻易的kill掉这些会话。
参考文献:http://www.weste.net/2006/8-7/11352794038.html
                   

Subject: Removing Sessions in Killed Status on Unix
  Doc ID: 274216.1 Type: BULLETIN
  Modified Date : 11-NOV-2008 Status: PUBLISHED










About Me

...............................................................................................................................

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客园地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 联系我请加QQ好友(646634621),注明添加缘由

● 于 2017-07-01 09:00 ~ 2017-07-31 22:00 在魔都完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

...............................................................................................................................

拿起手机使用微信客户端扫描下边的左边图片来关注小麦苗的微信公众号:xiaomaimiaolhr,扫描右边的二维码加入小麦苗的QQ群,学习最实用的数据库技术。

【会话】V$SESSION视图【会话】V$SESSION视图

【会话】V$SESSION视图
【会话】V$SESSION视图
【会话】V$SESSION视图

    V$SESSION是基础信息视图,用于找寻用户SID或SADDR。不过,它也有一些列会动态的变化,可用于检查用户。在该视图中,每一个连接到数据库实例中的session都拥有一条记录,包括用户session及后台进程如DBWR,LGWR,arcchiver等等。
   V$SESSION视图包含很多列,涉及到session信息、client信息以及application信息等。其中,server列信息表示该session的连接类型,也就是咱们常说的共享服务器连接或者专用服务器连接。那有没有其他服务器连接类型呢?下面我们就看一下Oracle11g官方文档中server列的几个取值:
  • DEDICATED
  • SHARED
  • PSEUDO
  • POOLED
  • NONE
    
   其中,DEDICATED表示专用服务器连接,SHARED表示共享服务器连接,这两个大家较为熟悉;
   PSEUDO和kill session相关,如果发出ALTER SYSTEM去终止session的会话,等待60秒后没有终止session,会收到一个信息表明session已标识为终止。被标记为终止的session在v$seession的status为KILLED,对应的server值可能为PSEUDO;
   POOLED和Oracle 11g推出的驻留连接池(Database Resident Connection Pool)特性相关,驻留连接池提供了数据库层面上的连接池管理机制,为应对高并发、短会话前端应用进行有益的尝试,POOLED表示使用驻留连接池技术的连接;
   NONE表示空闲的共享服务器连接。

hoegh
2016.01.31
-- The End --

    在实际的数据库应用中,我们经常遇到这样一个问题,连接到Oracle数据库的用户在作了一次操作后,再也没有后续操作,但却长时间没有和数据库断开连接。最近在研究一个中间件到数据库中的长连接异常问题,查询到v$session中LAST_CALL_ET参数,觉得这个参数很有用,下面是自己的一点理解:
    
    1. 参数定义
       
 LOGON_TIME 是一个日期型(Date)字段,为用户登陆时间; 
        LAST_CALL_ET是一个数字型(Number)字段,其含义是用户最后一条语句执行完毕后到sysdate的时间,单位为秒。每次用户执行一个新的语句后,该字段复位为0,重新开始记数。我们可以通过该字段来获得一个连接用户最后一次操作数据库后的空闲时间。
        针对这两个参数定义的测试:
        SQL> conn system/oracle@devdb2;
        已连接。
        SQL> select ses.SID,ses.username,ses.machine,ses.program,ses.last_call_et,sql.hash_value,sql.sql_text
                   from v$session ses, v$sql sql
                   where ses.sql_hash_value = sql.hash_value(+)
                   and ses.PROGRAM = 'sqlplus.exe'
        

SID USERNAME MACHINE PROGRAM LAST_CALL_ET HASH_VALUE SQL_TEXT
132 SYSTEM ZDC/BEILEI sqlplus.exe 3(登陆后的时间)    

        SQL> select count(*) from user_object_size;
SID USERNAME MACHINE PROGRAM LAST_CALL_ET HASH_VALUE SQL_TEXT
132 SYSTEM ZDC/BEILEI sqlplus.exe 24(sql执行的时间) 178228611 select count(*) from user_object_size

        SQL> select count(*) from user_object_size;
                   COUNT(*)
                   ----------
                           20
SID USERNAME MACHINE PROGRAM LAST_CALL_ET HASH_VALUE SQL_TEXT
132 SYSTEM ZDC/BEILEI sqlplus.exe 1(sql执行完,参数复位0,重新开始计算到sysdate的时间/s)    


    2. 识别超过一定空闲时间的连接
         select username,logon_time,last_call_et, 
         to_char(sysdate-(last_call_et/(60*60*24)),'hh24:mi:ss') last_work_time
         from v$session
         where username is not null;
         
         select ses.username,ses.machine,ses.program,ses.last_call_et,sql.hash_value,sql.sql_text
         from v$session ses, v$sql sql
         where ses.sql_hash_value = sql.hash_value
         and ses.last_call_et > 600
         and ses.type = 'USER'

          SELECT s.username 用户名称, s.status 状态,s.machine 机器名称,
        osuser 操作系统用户名称,spid UNIX进程号,
          'kill -9 '||spid UNIX级断开连接,
          'alter system kill session ' ||''''||s.sid||',
          '||s.serial# || ''';' Oracle级断开连接,
          TO_CHAR (logon_time, 'dd/mm/yyyy hh24:mi:ss') 登陆时间,
           last_call_et 空闲时间秒,
           TO_CHAR (TRUNC (last_call_et / 3600, 0))||' '||' HRS '||
       TO_CHAR (TRUNC ((last_call_et - TRUNC(last_call_et / 3600, 0) * 3600) / 60, 0)  ) ||' MINS' 空闲时间小时分钟,
           module 模块
          FROM v$session s, v$process p
          WHERE TYPE = 'USER'
          AND p.addr = s.paddr
         AND status != 'KILLED'
          -- AND SUBSTR (machine, 1, 19) NOT IN ('机器名')
         AND last_call_et > 60 * 60 * 1-- 空闲时间超过1小时的连接
         ORDER BY last_call_et desc;

        select  sid,username,status,
                     to_char(logon_time,'dd-mm-yy hh:mi:ss') "LOGON",
                     floor(last_call_et/3600)||':'||
                     floor(mod(last_call_et,3600)/60)||':'||
                     mod(mod(last_call_et,3600),60) "IDLE",
                    program
         from v_$session
        where type='USER'
         order by last_call_et;

        select s.process, s.sid,  t.sql_text 
        from gv$session s, gv$sql t 
        where s.sql_address =t.address  
         and s.sql_hash_value =t.hash_value 
         --and s.program like '%JDBC%' 
         and s.last_call_et > 600 
         and s.status = 'ACTIVE'

个人认为还是查清楚这些异常连接的原因,不要轻易的kill掉这些会话。
参考文献:http://www.weste.net/2006/8-7/11352794038.html
                   

Subject: Removing Sessions in Killed Status on Unix
  Doc ID: 274216.1 Type: BULLETIN
  Modified Date : 11-NOV-2008 Status: PUBLISHED
正文到此结束
Loading...