当前位置:  数据库>oracle

【Oracle】v$session和v$process的使用

    来源: 互联网  发布时间:2017-06-01

    本文导语: 查看当前session的sid和serial#: SYS@ORCL>select sid,serial#,status from v$session where sid=userenv('sid');       SID    SERIAL# STATUS ---------- ---------- --------         89          3 ACTIVE   查看当前session对应的spid: SYS@ORCL>select spid from v$process p, v$sess...

查看当前session的sid和serial#:

SYS@ORCL>select sid,serial#,status from v$session where sid=userenv('sid');

      SID    SERIAL# STATUS

---------- ---------- --------

        89          3 ACTIVE

 

查看当前session对应的spid:

SYS@ORCL>select spid from v$process p, v$session s where s.sid=userenv('sid') and s.paddr=p.addr;

 

SPID

------------

18871

 

查看当前session的trace file的路径:

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

  2  from v$process p,v$session s,v$parameter p,v$thread t

  3  where p.addr = s.paddr and s.audsid = userenv('sessionid') and p.name = 'user_dump_dest';

 

P.VALUE||'/'||T.INSTANCE||'_ORA_'||LTRIM(TO_CHAR(P.SPID,'FM99999'))||'.TRC'

--------------------------------------------------------------------------------

/u01/app/Oracle/admin/ORCL/udump/ORCL_ora_18871.trc

 

已知spid,查看当前正在执行或者最近一次执行的SQL

SYS@ORCL>select /*+ordered*/ sql_text

  2  from v$sqltext sql

  3  where (sql.hash_value,sql.address) in (

  4    select decode(sql_hash_value,0,prev_hash_value,sql_hash_value),decode(sql_hash_value,0,prev_sql_addr,sql_address)

  5    from v$session s

  6    where s.paddr = (select addr from v$process p where p.spid = to_number('&pid')));

Enter value for pid: 18871

old  6:    where s.paddr = (select addr from v$process p where p.spid = to_number('&pid')))

new  6:    where s.paddr = (select addr from v$process p where p.spid = to_number('18871')))

 

SQL_TEXT

----------------------------------------------------------------

 from v$process p where p.spid = to_number('18871')))

sql_address)    from v$session s    where s.paddr = (select addr

ash_value,sql_hash_value),decode(sql_hash_value,0,prev_sql_addr,

value,sql.address) in (    select decode(sql_hash_value,0,prev_h

select /*+ordered*/ sql_text from v$sqltext sql where (sql.hash_

查看锁和等待:

SYS@ORCL>col user_name format a10

SYS@ORCL>col owner format a10

SYS@ORCL>col object_name format a15

SYS@ORCL>col sid format 999999

SYS@ORCL>col serial# format 999999

SYS@ORCL>col spid format a6

SYS@ORCL>SELECT /*+ rule */ lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,o.owner,o.object_name,o.object_type,s.sid,s.serial#,p.spid

  2  FROM v$locked_object l, dba_objects o, v$session s, v$process p

  3  WHERE l.object_id = o.object_id

  4    AND l.session_id = s.sid and s.paddr = p.addr

  5  ORDER BY o.object_id, xidusn DESC;

 

no rows selected

查找指定系统用户在oracle中的session信息及进程id,假设操作系统用户为:oracle

SYS@ORCL>select s.sid,s.SERIAL#,s.username,p.spid

  2  from v$session s,v$process p

  3  where s.oSUSEr='oracle'

  4  and s.PADDR=p.ADDR; 

Windows环境下

在linux环境可以通过ps查看进程信息包括pid,windows中任务管理器的PID与v$process中pid不能一一对应,这块在oracleDocument中也没有找到介绍,后来google了一下,有资料介绍说是由于windows是多线程服务器,每个进程包含一系列线程。这点于unix等不同,Unix每个Oralce进程独立存在,在Nt上所有线程由Oralce进程衍生。
要在windows中显示oracle相关进程pid,我们可以通过一个简单的sql语句来实现。
SELECT s.SID, p.pid, p.spid signaled, s.osuser, s.program
FROM v$process p, v$session s
WHERE p.addr = s.paddr;

还可以通过和 v$bgprocess 连接查询到后台进程的名字:
SELECT s.SID SID, p.spid threadid, p.program processname, bg.NAME NAME
FROM v$process p, v$session s, v$bgprocess bg
WHERE p.addr = s.paddr
  AND p.addr = bg.paddr
  AND bg.paddr '00';

 

Eygle大师写了一段sql脚本getsql.sql,用来获取指定pid正在执行的sql语句,在此也附注上来。

REM getsql.sql
REM author eygle
REM 在windows上,已知进程ID,得到当前正在执行的语句
REM 在windows上,进程ID为16进制,需要转换,在UNIX直接为10进制SELECT  /*+ ORDERED */
        sql_text
    FROM v$sqltext a
  WHERE (a.hash_value, a.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 b
            WHERE b.paddr = (SELECT addr
                                FROM v$process c
                              WHERE c.spid = TO_NUMBER ('&pid', 'xxxx')))
ORDER BY piece ASC
/


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下安装oracle后使用命令行启动的方法 linux启动oracle
  • Oracle9i 9.0.1的JDBC Drivers 可以给Oracle 8.0.5使用马?
  • Suse linux使用oracle问题
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • jbuilder中使用oracle的问题
  • 求redhat linux 9.0下可以使用的oracle 10g或9i,还有redhat linux 9.0下可以使用的eclipse下载地址
  • Oracle事务!使用游标提交过程
  • 在Jbuilder7下,使用DbPilot.exe连接oracle,报错!请教高手!
  • AIX 64位系统上如何使用32位OCI oracle driver
  • mysql iis7站长之家
  • 使用X manager连接oracle数据库的步骤
  • C++使用OCCI连Oracle10g的错误
  • 使用工具 plsqldev将Excel导入Oracle数据库
  • Linux下Oracle的sqlplus使用光标上下左右方法
  • Oracle 数据 使用游标
  • oracle使用sql脚本生成csv文件案例学习
  • ORACLE 修改表结构 之ALTER CONSTAINTS的使用
  • Linux中Oracle使用相关知识集锦
  • Oracle密码文件的使用和维护第1/3页
  • Oracle 触发器的使用小结
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,