本文共 1685 字,大约阅读时间需要 5 分钟。
(1)关于v$process
在使用Oracle数据库监控进程时,v$process视图是一个非常有用的工具。然而,需要注意的是,v$process中的spid字段并不是直接对应于我们通过ps命令查询到的进程ID。spid实际上是指当前正在执行SQL语句的进程ID,而process字段才是通过ps命令获取的系统进程ID。因此,如果想要通过ps命令查询到的进程ID来查看相关信息,需要使用以下SQL语句:
select spid,sid,process,sql_address from v$session where process='12345'
这里的process字段就是通过ps命令查询到的进程ID,而spid则是对应于该进程执行的具体SQL语句的进程ID。通过sql_address字段,我们还可以查看正在执行的具体SQL语句内容:
select sql_text from v$sqlarea s,v$session ses where s.address=ses.sql_address and ses.process='12345'
(2)关于v$session
v$session视图在数据库监控和分析中非常有用,尤其是在需要快速了解Oracle系统内部情况时。为了便于查询,可以对v$session中的command字段进行解码,这样可以更直观地了解用户的操作类型。以下是一个常用的查询示例:
select substr(s.username,1,18) username, substr(s.program,1,15) program, p.spid,s.process,decode(s.command,0,'No Command',1,'Create Table',2,'Insert',3,'Select',6,'Update',7,'Delete',9,'Create Index',15,'Alter Table',21,'Create View',23,'Validate Index',35,'Alter Database',39,'Create Tablespace',41,'Drop Tablespace',40,'Alter Tablespace',53,'Drop User',62,'Analyze Table',63,'Analyze Index',s.command||': Other') commandfrom v$session s, v$process p, v$transaction t, v$rollstat r, v$rollname nwhere s.paddr = p.addrand s.taddr = t.addr (+)and t.xidusn = r.usn (+)and r.usn = n.usn (+)order by username
(3)几个相关的SQL
--查看系统进程对应的信息select se.saddr,se.sid,se.serial#,p.pid,se.paddr,s.sql_id,s.sql_textfrom v$session se ,v$process p, v$sqlarea swhere se.paddr=p.addr and se.sql_address=s.address and se.process='&1'
--查看所有的会话select se.username,se.saddr,se.sid,se.serial#,se.process,s.sql_idfrom v$session se,v$sqlarea swhere se.sql_address=s.address
--查看会话对应的sql内容select se.username,se.process,s.sql_textfrom v$session se,v$sqlarea swhere se.sql_address=s.address and s.sql_id='&1'
转载地址:http://zgffk.baihongyu.com/