v$process v$sesson 通过会话号查找进程号 查看会话信息

来源:互联网 发布:windows更新卸载工具 编辑:程序博客网 时间:2024/04/30 20:05
--进程视图
v$process
--会话视图
v$session 
v$mystat
v$sql 
v$transaction
v$lock

v$transaction.ADDR=v$lock.ADDR 
v$lock.SID=v$session.SID
v$session.SQL_ID=v$sql.SQL_ID
v$session.PADDR=v$process.SPID

查看有哪些进程
[oracle@orale ~]$ ps -ef |grep LOCAL |grep -v grep
oracle    4245  4202  0 09:18 ?        00:00:02 oraclemypl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle    4298     1  0 09:20 ?        00:00:00 oraclemypl (LOCAL=NO)

当连接oracle后会自动分配一个会话号
--查当前会话号

SQL> select distinct sid from v$mystat;
       SID
----------

        17


--通过会话号查进程号
SQL> select a.spid from v$process a ,v$session b where a.addr=b.paddr and b.sid
in (select sid from v$mystat where rownum=1); 
SPID
------------------------

4298


--通过进程号查会话号
SQL> select b.sid from  v$process a ,v$session b where a.addr=b.paddr and a.spid=4298;
       SID
----------
        17

--查看进程占用的CPU内存情况
[oracle@orale ~]$ ps aux|grep 4298
oracle    4298  0.0  2.5 772120 37076 ?        Ss   09:20   0:00 oraclemypl (LOCAL=NO)
oracle    8317  0.0  0.0   3920   660 pts/2    R+   15:04   0:00 grep 4298

[oracle@orale ~]$ ps aux |grep oracle
oracle    4245  0.0  4.8 774612 70128 ?        Ss   09:18   0:02 oraclemypl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle    4248  0.0  1.0 770252 14792 ?        Ss   09:18   0:00 ora_qmnc_mypl
oracle    4263  0.0  3.5 773904 51968 ?        Ss   09:18   0:08 ora_cjq0_mypl
oracle    4267  0.0  1.8 771808 26480 ?        Ss   09:19   0:00 ora_q000_mypl
oracle    4271  0.0  1.0 770248 15628 ?        Ss   09:19   0:00 ora_q002_mypl
oracle    4298  0.0  2.5 772120 37076 ?        Ss   09:20   0:00 oraclemypl (LOCAL=NO)
root      4332  0.0  0.0   4920  1236 pts/2    S    09:20   0:00 su - oracle
oracle    4333  0.0  0.1   4668  1496 pts/2    S    09:20   0:00 -bash
oracle    4395  0.0  0.9 770252 13860 ?        Ss   09:23   0:00 ora_smco_mypl
oracle    5766  0.0  2.6 772112 38864 ?        Ss   10:48   0:00 oraclemypl (LOCAL=NO)
oraclemypl (LOCAL=NO)表示用户连上来的 其他的后台进程是查看不了的

例如看到某个进程占用内存CPU很大 
--通过进程号查会话号
SQL> select b.sid from  v$process a ,v$session b where a.addr=b.paddr and a.spid=4298;
       SID
----------
        17

--通过会话号查看会话的所有操作
select * from v$session where sid=17;  

[oracle@orale ~]$ kill -9 5766  --强制干掉某个进程



v$session 视图一些重要的字段

v$session.TADDR = v$transaction.addr = v$lock.addr

v$session.lockwait = v$lock.kaddr

字段 STATUS    ACTIVE活跃  表示sql正在执行或被阻塞  等待-锁 (没有commit) 

字段TADDR 事务/锁的地址 = v$transaction.addr = v$lock.addr  v$tran 如果有值就有事务

字段SQL_ID 如果有值要么SQL正在执行,要么被阻塞了 肯定是ACTIVE状态
利用v$session.SQL_ID 可以找出被阻塞的语句
select sql_text from v$sql where sql_id ='';
select a.SQL_TEXT from v$sql a ,v$session b where a.SQL_ID=b.SQL_ID;

字段ROW_WAIT_OBJ#  dba_objects.object_id=  通过对象ID可以找出表名
字段BLOCKING_SESSION_STATUS 阻塞状态  VALID 表示被阻塞了
字段BLOCKING_SESSION 被哪个会话阻塞了 (没有commit的会话)
字段STATE 等待事件 enq: TX - row lock contention 行锁争用(两个对话同时执行同一行

知道是被哪个会话阻塞了就好办了

SQL> select sid,serial# from v$session where sid=35;
       SID    SERIAL#
---------- ----------

        35         45


查看事物

select * from v$transaction;

--确认后执行下面的语句就可以干掉
SQL> alter system kill session '35,45';

System altered.
原创粉丝点击