首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何显示Oracle DB中正在运行的进程?

如何显示Oracle DB中正在运行的进程?
EN

Stack Overflow用户
提问于 2008-10-14 00:04:53
回答 4查看 329.4K关注 0票数 66

是否可以显示Oracle数据库上正在进行的其他进程?像Sybases sp_who这样的东西

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-14 00:28:27

我怀疑您可能只想从V$SESSION中抓取几列,并从V$SQL中抓取SQL语句。假设您想要排除Oracle本身正在运行的后台进程

代码语言:javascript
复制
SELECT sess.process, sess.status, sess.username, sess.schemaname, sql.sql_text
  FROM v$session sess,
       v$sql     sql
 WHERE sql.sql_id(+) = sess.sql_id
   AND sess.type     = 'USER'

外部连接是处理那些当前不活动的会话,假设您想要这些会话。您也可以从V$SQL获取sql_fulltext列,它将包含完整的SQL语句,而不是前1000个字符,但这是一个CLOB,因此处理起来可能会有点复杂。

实际上,您可能希望查看V$SESSION中的所有可用信息,因为您可能会获得比SP_WHO提供的更多的信息。

票数 90
EN

Stack Overflow用户

发布于 2008-10-14 00:11:40

看过sp_who之后,甲骨文本身就没有这方面的能力。Oracle至少有8个运行数据库的进程正在运行。如RMON等。

您可以询问DB正在运行哪些查询,因为这只是一个表查询。看看V$表。

快速示例:

代码语言:javascript
复制
SELECT sid,
       opname,
       sofar,
       totalwork,
       units,
       elapsed_seconds,
       time_remaining
FROM v$session_longops
WHERE sofar != totalwork;
票数 5
EN

Stack Overflow用户

发布于 2014-07-25 09:03:29

它显示了当前处于“活动”状态的SQL:

代码语言:javascript
复制
select S.USERNAME, s.sid, s.osuser, t.sql_id, sql_text
from v$sqltext_with_newlines t,V$SESSION s
where t.address =s.sql_address
and t.hash_value = s.sql_hash_value
and s.status = 'ACTIVE'
and s.username <> 'SYSTEM'
order by s.sid,t.piece
/

这显示了锁。有时事情会变慢,但这是因为它在等待锁时被阻塞了:

代码语言:javascript
复制
select
  object_name, 
  object_type, 
  session_id, 
  type,         -- Type or system/user lock
  lmode,        -- lock mode in which session holds lock
  request, 
  block, 
  ctime         -- Time since current mode was granted
from
  v$locked_object, all_objects, v$lock
where
  v$locked_object.object_id = all_objects.object_id AND
  v$lock.id1 = all_objects.object_id AND
  v$lock.sid = v$locked_object.session_id
order by
  session_id, ctime desc, object_name
/

这是一个很好的查找长操作(例如全表扫描)的方法。如果是因为大量的短操作,什么都不会显示出来。

代码语言:javascript
复制
COLUMN percent FORMAT 999.99 

SELECT sid, to_char(start_time,'hh24:mi:ss') stime, 
message,( sofar/totalwork)* 100 percent 
FROM v$session_longops
WHERE sofar/totalwork < 1
/
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/199508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档