Oracle V$SESSION详解

     

   1.V$SESSION中的常用列

       V$SESSION是基础信息视图,用于找寻用户SID或SADDR,及检查用户的动态:

(1)SQL_HASH_VALUESQL_ADDRESS

        这两列用于鉴别默认被session执行的SQL语句,如果为null或0,那就说明这个session没有执行任何SQL语句;

(2)PREV_HASH_VALUEPREV_ADDRESS

    此两列用来鉴别被session执行的上一条语句。

(3)STATUS  用来判断session状态

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

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

③  Killed:被标注为删除

2.Session信息

(1)SID:SESSION标识,常用于连接其他列

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

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

(4)USERNAME:当前session在oracle中的用户名。

 

3.Client信息

      数据库session被一个数据库服务器上中间服务器SQL*Net连接到数据库的客户端进程启动,以下各列提供这个客户端的信息

(1)OSUSER:  客户端操作系统用户名

(2)MACHINE:客户端执行的机器

(3)TERMINAL:客户端运行的终端

(4)PROCESS:客户端进程的ID

(5) PROGRAM:客户端执行的客户端程序

4.Application信息

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

(1)CLIENT_INFO:DBMS_APPLICATION_INFO中设置

(2) ACTION:DBMS_APPLICATION_INFO中设置

(3)MODULE:DBMS_APPLICATION_INFO中设置

 

5.示例

①查找你的session信息

SELECT 

SID, OSUSER, USERNAME, MACHINE, PROCESS  

FROM  V$SESSION
 
WHERE audsid = userenv('SESSIONID');  

②当machine已知的情况下查找session

SELECT

SID, OSUSER, USERNAME, MACHINE, TERMINAL  
  
FROM  V$SESSION  
  
WHERE terminal ='pts/tl' AND machine ='seedb';  

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

select  

b.sql_text  
  
from  
v$session a,

v$sqlarea b  
  
where 

a.sql_hash_value=b.hash_value and  a.sid=1000  

④ sid,serial#

  通过sid查询与这个session相关的各种统计信息:

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

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

(2)查询用户相关的各种io统计信息. 

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

(3)查询用户正在打开着的游标变量

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

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

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

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

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

(6)kill当前session的时候可以通过sid,serial#来处理

alter system kill session ':sid,:serail#'; 

(7)paddr.字段, process addr

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

SELECT 
a.pid,  
a.spid,  
b.name,  
b.description,  
a.latchwait,  
a.latchspin,  
a.pga_used_mem,  
a.pga_alloc_mem,  
a.pga_freeable_mem,  
a.pga_max_mem  
FROM 
v$process a, 
v$bgprocess b  
WHERE 
a.addr = b.paddr(+)  
AND a.addr = :paddr  

(8). taddr 当前事务的地址,

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

SELECT 
b.name rollname, a.*  
FROM 
v$transaction a, 
v$rollname b  
WHERE a.xidusn = b.usn  
   AND a.addr = '585EC18C';  

(9)lockwait字段,

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

SELECT *  
  FROM v$lock  
 WHERE 
(id1, id2) = (SELECT id1, id2 FROM v$lock WHERE kaddr = '57C68C48') 

(10)(sql_address,sql_hash_value) (prev_sql_addr,prev_hash_value)

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

SELECT *  
  FROM v$sqltext  
 WHERE address = :sql_address  
   AND hash_value = :sql_hash_value; 

 (11)ROW_WAIT_OBJ#,ROW_WAIT_FILE#,ROW_WAIT_BLOCK#,ROW_WAIT_ROW#)

 可以通过这几个字段查询现在正在被锁的表的相关信息

a. 首先得到被锁的的信息

SELECT
 * 
FROM 
dba_objects 
WHERE 
object_id = :row_wait_obj#;  

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

SELECT 
* 
FROM 
v$datafile 
WHERE 
file# = :row_wait_file#. 
  1. 在根据以上四个字段构造出被锁的字段的rowid信息.

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

SELECT 
dbms_rowid.ROWID_CREATE(1,                                
 :row_wait_obj#,  
 :row_wait_file#,  
 :row_wait_block#,  
 :row_wait_row#)  
  FROM dual;  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨的遐想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值