Oracle V$SESSION详解

V$SESSION是APPS用户下面对于SYS.V_$SESSION 视图的同义词。

在本视图中,每一个连接到数据库实例中的session都拥有一条记录。包括用户session及后台进程如DBWR,LGWR,arcchiver等等。

V$SESSION中的常用列

V$SESSION是基础信息视图,用于找寻用户SID或SADDR。不过,它也有一些列会动态的变化,可用于检查用户。如例:

SQL_HASH_VALUE,SQL_ADDRESS:这两列用于鉴别默认被session执行的SQL语句。如果为null或0,那就说明这个session没有执行任何SQL语句。PREV_HASH_VALUE和PREV_ADDRESS两列用来鉴别被session执行的上一条语句。

注意:当使用SQL*Plus进行选择时,确认你重定义的列宽不小于11以便看到完整的数值。

STATUS:这列用来判断session状态是:

l        Achtive:正执行SQL语句(waiting for/using a resource)

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

l        Killed:被标注为删除

下列各列提供session的信息,可被用于当一个或多个combination未知时找到session。

Session信息

l        SID:SESSION标识,常用于连接其它

l        SERIAL#:如果某个SID又被其它的session使用的话则此数值自增加(当一个       SESSION结束,另一个SESSION开始并使用了同一个SID)。

l        AUDSID:审查session ID唯一性,确认它通常也用于当寻找并行查询模式

l        USERNAME:当前session在oracle中的用户名。

Client信息

数据库session被一个运行在数据库服务器上或从中间服务器甚至桌面通过SQL*Net连接到数据库的客户端进程启动,下列各列提供这个客户端的信息

l        OSUSER:  客户端操作系统用户名

l        MACHINE:客户端执行的机器

l        TERMINAL:客户端运行的终端

l        PROCESS:客户端进程的ID

l        PROGRAM:客户端执行的客户端程序

要显示用户所连接PC的TERMINAL、OSUSER,需在该PC的ORACLE.INI或Windows中设置关键字TERMINAL,USERNAME。

Application信息

调用DBMS_APPLICATION_INFO包以设置一些信息区分用户。这将显示下列各列。

l        CLIENT_INFO:DBMS_APPLICATION_INFO中设置

l        ACTION:DBMS_APPLICATION_INFO中设置

l        MODULE:DBMS_APPLICATION_INFO中设置

下列V$SESSION列同样可能会被用到:

l        ROW_WAIT_OBJ#

l        ROW_WAIT_FILE#

l        ROW_WAIT_BLOCK#

l        ROW_WAIT_ROW#

V$SESSION中的连接列

  1. Column                                         View                                  Joined Column(s)
  2. SID                  V$SESSION_WAIT,V$SESSTAT,V$LOCK,V$SESSION_EVENT,V$OPEN_CURSOR   SID
  3. (SQL_HASH_VALUE, SQL_ADDRESS)        V$SQLTEXT, V$SQLAREA, V$SQL                     (HASH_VALUE, ADDRESS)
  4. (PREV_HASH_VALUE, PREV_SQL_ADDRESS)  V$SQLTEXT, V$SQLAREA, V$SQL                     (HASH_VALUE, ADDRESS)
  5. TADDR                                V$TRANSACTION                                    ADDR
  6. PADDR                                V$PROCESS                                        ADDR

示例:

1.查找你的session信息

  1. SELECTSID, OSUSER, USERNAME, MACHINE, PROCESS
  2. FROMV$SESSIONWHEREaudsid = userenv(‘SESSIONID‘);

2.当machine已知的情况下查找session

  1. SELECTSID, OSUSER, USERNAME, MACHINE, TERMINAL
  2. FROMV$SESSION
  3. WHEREterminal =‘pts/tl‘ANDmachine =‘rgmdbs1‘;

3.查找当前被某个指定session正在运行的sql语句。假设sessionID为100

  1. selectb.sql_text
  2. fromv$session a,v$sqlarea b
  3. wherea.sql_hash_value=b.hash_valueanda.sid=100

寻找被指定session执行的SQL语句是一个公共需求,如果session是瓶颈的主要原因,那根据其当前在执行的语句可以查看session在做些什么。

视图应用:

V$session 表的妙用

v$session 表中比较常用的几个字段说明:

1. sid,serial#
通过sid我们可以查询与这个session相关的各种统计信息,处理信息.

  1. select * from v$sesstat where sid = :sid;

查询用户相关的各种统计信息.

  1. SELECT a.sid, a.statistic#, b.name, a.value
  2. FROM v$sesstat a, v$statname b
  3. WHERE a.statistic# = b.statistic#
  4. AND a.sid = :sid;

b. 查询用户相关的各种io统计信息

  1. select * from v$sess_io where sid = :sid;

c. 查询用户想在正在打开着的游标变量.

  1. select * from v$open_cursor where sid = :sid;

d. 查询用户当前的等待信息. 以查看当前的语句为什么这么慢/在等待什么资源.

  1. select * from v$session_wait where sid = :sid ;

e. 查询用户在一段时间内所等待的各种事件的信息. 以了解这个session所遇到的瓶颈

  1. select * from v$session_event where sid = :sid;

f. 还有, 就是当我们想kill当前session的时候可以通过sid,serial#来处理.

  1. alter system kill session ‘:sid,:serail#‘;

2. paddr.字段, process addr, 通过这个字段我们可以查看当前进程的相关信息, 系统进程id,操作系统用户信息等等.

  1. SELECT a.pid,
  2. a.spid,
  3. b.name,
  4. b.description,
  5. a.latchwait,
  6. a.latchspin,
  7. a.pga_used_mem,
  8. a.pga_alloc_mem,
  9. a.pga_freeable_mem,
  10. a.pga_max_mem
  11. FROM v$process a, v$bgprocess b
  12. WHERE a.addr = b.paddr(+)
  13. AND a.addr = :paddr

3. command 字段, 表明当前session正在执行的语句的类型.请参考reference.

4. taddr 当前事务的地址,可以通过这个字段查看当前session正在执行的事务信息, 使用的回滚段信息等

  1. SELECT b.name rollname, a.*
  2. FROM v$transaction a, v$rollname b
  3. WHERE a.xidusn = b.usn
  4. AND a.addr = ‘585EC18C‘;

5. lockwait字段, 可以通过这个字段查询出当前正在等待的锁的相关信息.

  1. SELECT *
  2. FROM v$lock
  3. WHERE (id1, id2) = (SELECT id1, id2 FROM v$lock WHERE kaddr = ‘57C68C48‘)

6. (sql_address,sql_hash_value) (prev_sql_addr,prev_hash_value) 根据这两组字段, 我们可以查询到当前session正在执行的sql语句的详细信息.

  1. SELECT *
  2. FROM v$sqltext
  3. WHERE address = :sql_address
  4. AND hash_value = :sql_hash_value;

7.ROW_WAIT_OBJ#,ROW_WAIT_FILE#,ROW_WAIT_BLOCK#,ROW_WAIT_ROW#
可以通过这几个字段查询现在正在被锁的表的相关信息.^_^
a. 首先得到被锁的的信息

  1. SELECT * FROM dba_objects WHERE object_id = :row_wait_obj#;

b. 根据row_wait_file#可以找出对应的文件的信息.

  1. SELECT * FROM v$datafile WHERE file# = :row_wait_file#.

c. 在根据以上四个字段构造出被锁的字段的rowid信息.

  1. SELECT dbms_rowid.ROWID_CREATE(1,
  2. :row_wait_obj#,
  3. :row_wait_file#,
  4. :row_wait_block#,
  5. :row_wait_row#)
  6. FROM dual;

8. logon_time 当前session的登录时间.
9. last_call_et 该session idle的时间, 每3秒中更新一次.

转载:http://blog.csdn.net/cunxiyuan108/article/details/5999220

时间: 2024-10-18 16:34:26

Oracle V$SESSION详解的相关文章

Oracle 11g数据库详解(2015-1-18更新)

Oracle 11g数据库详解 整理者:高压锅 QQ:280604597 Email:[email protected] 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的 1   简介 数据库操作主要有以下几步: 1.  启动.停止数据库 2.  连接.断开数据库 3.  创建.修改.删除数据库用户 4.  表空间 5.  新建.修改.删除表 6.  查询.插入.修改.删除表数据 7.  新建.修改.删除视图 8.  新建.修改.删除存储过程 9.  新建.修改.删除触发

Oracle cursor_sharing 参数 详解

一. 官网的说明 http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/initparams042.htm#REFRN10025 1.1 CURSOR_SHARING Property Description Parameter type String Syntax CURSOR_SHARING = { SIMILAR | EXACT | FORCE } Default value EXACT Modifiable ALTE

ORACLE用户PROFILE详解

ORACLE用户PROFILE详解   一.官网说明 Oraclerecommends that you use the Database Resource Manager rather than the SQLstatement to establish resource limits. The Database Resource Manager offers amore flexible means of managing and tracking resource use. Purpose

Oracle 11g数据库详解(2015-02-28更新)

Oracle 11g数据库详解 整理者:高压锅 QQ:280604597 Email:[email protected] 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的 1   简介 数据库操作主要有以下几步: 1.  启动.停止数据库 2.  连接.断开数据库 3.  创建.修改.删除数据库用户 4.  表空间 5.  新建.修改.删除表 6.  查询.插入.修改.删除表数据 7.  新建.修改.删除视图 8.  新建.修改.删除存储过程 9.  新建.修改.删除触发

ORACLE物化视图详解

一.物化的一般用法物化视图是一种特殊的物理表,"物化"(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,oracle都实际上转换为视图SQL语句的查询.这样对整体查询性能的提高,并没有实质上的好处. 1.物化视图的类型ON DEMAND.ON COMMIT.二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图"需要"被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一

Oracle AWR 报告详解

转自:http://blog.csdn.net/laoshangxyc/article/details/8615187 持续更新中... Oracle awr报告详解 DB Name DB Id Instance Inst num Startup Time Release RAC ORCL 1295334343 orcl 1 09-1月 -12 18:01 11.2.0.1.0 NO DB Name :数据库名 DB Id :数据库Id(获取方法select dbid from v$databa

Oracle数据库备份详解

Oracle数据库备份详解 Oracle官方提供多种备份方式,日常使用最多的有exp/imp常规方式,及数据泵expdp/impdp方式:下面对这两种方式进行详解. 常规方式 exp/imp imp/exp是Oracle导入导出命令,可以用作数据的迁移,expdp/imdp也是Oracle数据导入导出的命令,效率比imp/exp效率要高,这个后面再讨论 一  EXP导出命令 exp 是数据的导出命令,可以用于表,用户,整个数据库,exp -help查看帮助 Export: Release 11.

oracle HA 高可用性详解(之二,深入解析TAF,以及HA框架)

oracle HA 高可用性详解(之一,client.server端服务详解):http://write.blog.csdn.net/postedit 我们已经看到TAF是的Oracle的会话能够自动重新连接,需要说明的是,这个能力是基于OCI的,是OCI的一个功能,JDBC Thin Driver无效,因为这种驱动不是构建在OCI库上的. 虽然这个功能发起于RAC,但TAF并不局限于RAC,单实例.DG环境都可以享受这个好处.Oralce声称其TAF能够保证用户会话自动的转移到另一个实例上.这

oracle sqlplus命令详解

涉及到的知识要点a.带有一个&的替换变量的用法b.带有两个&的替换变量用法c.define命令用法d.accept命令用法e.定制SQL*Plus环境f.在glogin.sql文件中保存定制结果g.sqlplus编辑命令 a.带有一个&的替换变量的用法1).使用带有一个&号的变量值来提示用户输入一个值.eg.SQL> SELECT     empno, ename, sal, deptno FROM  emp WHERE empno = &empno;输入 e