–进程视图
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.