Oracle中V$session及session相关信息 – john2522的专栏 – 博客频道 – CSDN.NET

2025-03-27Oracle / RAC / 性能优化

[

    Oracle中V$session及session相关信息            
    ](http://blog.csdn.net/john2522/article/details/7971320)    

.

        标签:
          [session](http://www.csdn.net/tag/session)[oracle](http://www.csdn.net/tag/oracle)[sql](http://www.csdn.net/tag/sql)[object](http://www.csdn.net/tag/object)[terminal](http://www.csdn.net/tag/terminal)[user](http://www.csdn.net/tag/user)
        2012-09-12 15:5010115人阅读 [评论](http://blog.csdn.net/john2522/article/details/7971320#comments)(0) [收藏](#) [举报](http://blog.csdn.net/john2522/article/details/7971320#report).![1756814889519-735e7f16-85c9-4ef5-8456-215ded5c0e59.jpg](./img/fiAg31b2EkA2NjxR/1756814889519-735e7f16-85c9-4ef5-8456-215ded5c0e59-109613.jpeg)分类:
                    oracle_(37)_
                  ![1756814889606-c8490bc7-a5e8-482d-a732-f5adc037daf2.jpg](./img/fiAg31b2EkA2NjxR/1756814889606-c8490bc7-a5e8-482d-a732-f5adc037daf2-010093.jpeg)
                .版权声明:本文为博主原创文章,未经博主允许不得转载。

V$session参数

SADDR: session address

SID: session identifier,常用于连接其它列。

SERIAL#: sid 会重用,但是同一个sid被重用时,serial#会增加,不会重复。

AUDSID: audit session id。可以通过audsid查询当前session的sid。select sid from v$session where audsid=userenv('sessionid');

PADDR: process address,关联v$process的addr字段,可以通过这个字段查处当前session对应操作系统的那个进程的id。

USER#: session's user id。等于dba_users中的user_id。Oracle内部进程的user#为0。关联all_usersch的user_id查询username

USERNAME: session's username。等于dba_users中的username。Oracle内部进程的username为空。关联all_usersch的user_id查询username

COMMAND: session正在执行的SQL Id。1代表create table,3代表select。

TADDR: 当前的transaction address。可以用来关联v$transaction的addr字段。

LOCKWAIT: 可以通过这个字段查询出当前正在等待的锁的相关信息。sid & lockwait与v$lock中的sid & kaddr相对应。

STATUS: 用来判断session状态。Active:正执行SQL语句。Inactive:等待操作。Killed:被标注为删除。

SERVER: server type (dedicated or shared)

SCHEMA#: schema user id。Oracle内部进程的schema#为0。

SCHEMANAME: schema username。Oracle内部进程的schemaname为sys。

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

PROCESS: 客户端process id。

MACHINE: 客户端machine name。

TERMINAL: 客户端执行的terminal name。

PROGRAM: 客户端应用程序。比如ORACLE.EXE (PMON)或者sqlplus.exe

TYPE: session type (background or user)

SQL_ADDRESS, SQL_HASH_VALUE, SQL_ID, SQL_CHILD_NUMBER: session正在执行的sql statement,和v$sql中的address, hash_value, sql_id, child_number相对应。

PREV_SQL_ADDR, PREV_HASH_VALUE, PREV_SQL_ID, PREV_CHILD_NUMBER: 上一次执行的sql statement。

MODULE, MODULE_HASH, ACTION, ACTION_HASH, CLIENT_INFO: 应用通过DBMS_APPLICATION_INFO设置的一些信息。

FIXED_TABLE_SEQUENCE: 当session完成一个user call后就会增加的一个数值,也就是说,如果session inactive,它就不会增加。因此可以根据此字段的值变化来监控某个时间点以来的session的性能情况。例如,一个小时以前,某个session的FIXED_TABLE_SEQUENCE是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_BLOCK#: Identifier for the block containing the row specified in ROW_WAIT_ROW#

ROW_WAIT_ROW#: session当前正在等待的被锁定的行。

LOGON_TIME: session logon time

ADDR: process address。可以和v$session的paddr字段关联。

PID: Oracle进程identifier。

SPID: 操作系统进程identifier。

USERNAME: 操作系统进程的用户名。并非Oracle用户名。

SERIAL#:: process serial number。

TERMINAL: 操作系统terminal identifier(e.g., computer name)。

PROGRAM: 进程正在执行的程序(e.g., ORACLE.EXE (ARC0)),和v$session中的program类似。

BACKGROUND: 1代表oracle background process,null代表normal process。

查看当前用户的sid和serial#:

select sid, serial#, status from v$session where audsid=userenv('sessionid');

查看当前用户的spid:

select spid from v$process p, v$session s where s.audsid=userenv('sessionid') and s.paddr=p.addr;

select spid from v$process p join v$session s on p.addr=s.paddr and s.audsid=userenv('sessionid');

查看当前用户的trace file路径:

select p.value || '/' || t.instance || '_ora_' || ltrim(to_char(p.spid,'fm99999')) || '.trc'

from v$process p, v$session s, v$parameter p, v$thread t
where p.addr = s.paddr and s.audsid = userenv('sessionid') and p.name = 'user_dump_dest';

已知spid,查看当前正在执行或最近一次执行的语句:

select /*+ ordered */ sql_text from v$sqltext sql

where (sql.hash_value, sql.address) in (
    select decode(sql_hash_value, 0, prev_hash_value, sql_hash_value), decode(sql_hash_value, 0, prev_sql_addr, sql_address)
    from v$session s where s.paddr = (select addr from v$process p where p.spid = to_number('&pid')))
order by piece asc;

查看锁和等待:

col user_name format a10

col owner format a10

col object_name format a15

col sid format 999999

col serial# format 999999

col spid format a6

查看session相关信息以及相关操作

1、查询用户相关的session的ID和session的序列号,这里没有显示系统用户的,因为系统用户在V$SESSION的表里面的

USERNAME为空,只可以通过关联ALL_USERS表,通过user#和user_id相关联。 view plain copy

  1. SELECT USERNAME || '(' || SID || ',' || SERIAL# || ')' USERNAME,
  2. MODULE,
  3. ACTION,
  4. CLIENT_INFO
  5. FROM V$SESSION
  6. WHERE MODULE || ACTION || CLIENT_INFO IS NOT NULL;
  7. –关联用户表,查询出用户的名字。 view plain copy

  8. SELECT AU.USERNAME, V.ACTION, V.SID
  9. FROM V$SESSION V
  10. LEFT JOIN ALL_USERS AU ON AU.USER_ID = V.USER#
  11. ORDER BY AU.USERNAME;
  12. 2、查询session视图中的SQL_ID对应的SQL语句: view plain copy

  13. SELECT VS.SQL_TEXT
  14. FROM V$SESSION V
  15. LEFT JOIN V$SQL VS ON V.SQL_ID = VS.SQL_ID
1756814889687-8d330859-d6e1-41d4-aac7-03467893dab9.jpg

3、查询当前的锁模式:

当前的用户为空,代表为系统用户,要显示系统用户的名字,可以通过v$session中的user#与all_users的user_id相关联,来显示用户名字: view plain copy

  1. SELECT SESSION_ID "SID",
  2. LOCK_TYPE "Lock Type",
  3. MODE_HELD "Mode Held",
  4. BLOCKING_OTHERS "Blocking?",
  5. V.USERNAME, –为空,代表为系统用户
  6. V.MACHINE,
  7. V.ACTION
  8. FROM DBA_LOCKS DL
  9. LEFT JOIN V$SESSION V ON V.SID = DL.SESSION_ID
1756814889778-1647d0a9-cda3-4123-a407-77f116ac4530.jpg

view plain copy

  1. SELECT NAME, VALUE FROM V$SYSSTAT
1756814889862-cabbf4ab-75bd-453e-a2af-4a09949796a7.jpg

5、查询出死锁的次数: view plain copy

  1. select name, value from v$sysstat where name = 'enqueue deadlocks';
  2. 6、查看被锁定的对象 view plain copy

  3. SELECT * FROM V$LOCKED_OBJECT;
  4. 可以查询出OBJECT_ID和SESSION_ID分别和V$SESSION和USER_OBJECT关联查询更具体的信息。 view plain copy

  5. SELECT * FROM v$session t WHERE t.SID = '139';–根据会话ID查询
  6. SELECT * FROM USER_OBJECTS U WHERE U.OBJECT_ID = '61151';–根据OBJECT_ID查询
  7. 7、KILL_SESSION

注意:BLOCK表示的是阻塞的, TYPE != 'BACKGROUND'表示防止杀死系统进程 view plain copy

  1. SELECT 'alter system kill session ''' || SID || ',' || SERIAL# || ''';' "Deadlock"
  2. FROM V$SESSION
  3. WHERE SID IN (SELECT SID FROM V$LOCK WHERE BLOCK = 1)
  4. AND TYPE != 'BACKGROUND';
  5. 8、查询死锁的SQL语句,&sid为上面查出的ID,查询出的死锁的会话ID view plain copy

  6. SELECT s.sid, q.sql_text
  7. FROM v$sqltext q, v$session s
  8. WHERE q.address = s.sql_address
  9. AND s.sid = &sid
  10. 9、查看锁住对象,所有者,类型,会话ID view plain copy

  11. SELECT o.owner, o.object_name, o.object_type, s.sid, s.serial#
  12. FROM v$locked_object l, dba_objects o, v$session s
  13. WHERE l.object_id = o.object_id
  14. AND l.session_id = s.sid
  15. ORDER BY o.object_id, xidusn DESC
  16. view plain copy

  17. SELECT v.sql_text, v.sql_fulltext, t.action, t.type, t.event, t.*
  18. FROM v$session t
  19. LEFT JOIN v$sql v ON v.sql_id = t.sql_id
  20. WHERE t.type != 'BACKGROUND'
  21. view plain copy

  22. alter system kill session 'sid,serial#' immediate;–使用immediate关键字
  23. alter system kill session 'sid,serial#';
  24. 注意:被标记为killed 的进程由PMON 进程kill,但是这个也是有条件的:PMON will notdelete the session object itself until the client connected to that sessionnotices that it has been killed.

12、使用系统命令杀掉进程:操作系统级别的杀掉会话

windows命令:

To kill the session on the Windows operating system, first identify the session, then substitute the relevant SID and SPID values into the following command issued from the command line. view plain copy

  1. C:> orakill ORACLE_SID(数据库实例名) spid(v$process表中获取)
  2. 测试 view plain copy

  3. SELECT Spid, Osuser, s.Program
  4. FROM V$session s, V$process p
  5. WHERE s.Paddr = p.Addr
  6. AND s.Sid = 137;
1756814889946-9f1d5a53-8023-4d21-9569-3c0d0a8ebc58.png
        [http://junsansi.itpub.net/post/29894/292558](http://junsansi.itpub.net/post/29894/292558)
        [http://blog.csdn.net/tianlesoftware/article/details/7412555](http://blog.csdn.net/tianlesoftware/article/details/7412555)

http://blog.csdn.net/tianlesoftware/article/details/7417058 ..

    .#### 我的同类文章

                                oracle_(37)_