programing tip

Oracle DB에서 실행중인 프로세스를 어떻게 표시합니까?

itbloger 2020. 12. 5. 09:23
반응형

Oracle DB에서 실행중인 프로세스를 어떻게 표시합니까?


Oracle 데이터베이스에서 진행중인 다른 프로세스를 표시 할 수 있습니까? Sybase와 같은 것sp_who


V $ SESSION에서 몇 개의 열을 가져오고 V $ SQL에서 SQL 문을 가져오고 싶을 것입니다. Oracle 자체가 실행중인 백그라운드 프로세스를 제외하려고한다고 가정합니다.

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 열을 가져올 수도 있습니다. V $ SQL은 처음 1000자가 아닌 전체 SQL 문을 포함하지만 CLOB이므로 처리하기가 좀 더 복잡 할 수 있습니다.

현실적으로, SP_WHO가 제공하는 것보다 더 많은 정보를 얻을 수 있기 때문에 V $ SESSION에서 사용할 수있는 모든 것을보고 싶을 것입니다.


sp_who를 살펴본 후에 Oracle은 그 자체로 그러한 능력을 가지고 있지 않습니다. Oracle에는 db를 실행하는 최소 8 개의 프로세스가 실행되고 있습니다. RMON 등

테이블 쿼리처럼 실행중인 쿼리를 DB에 요청할 수 있습니다. V $ 테이블을보십시오.

빠른 예 :

SELECT sid,
       opname,
       sofar,
       totalwork,
       units,
       elapsed_seconds,
       time_remaining
FROM v$session_longops
WHERE sofar != totalwork;

이것은 현재 "ACTIVE"인 SQL을 보여줍니다.

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
/

이것은 자물쇠를 보여줍니다. 때때로 상황이 느리게 진행되지만 잠금을 기다리는 것이 차단되기 때문입니다.

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
/

이것은 긴 작업 (예 : 전체 테이블 스캔)을 찾는 데 적합합니다. 짧은 작업이 많기 때문에 아무 것도 표시되지 않습니다.

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
/

현재 세션을 지원하지 않을 수있는 프로세스가 데이터베이스에 있음을 기억하십시오.

모든 프로세스에 관심이 있다면 v $ process (또는 RAC의 gv $ process)를 살펴보고 싶을 것입니다.

참고URL : https://stackoverflow.com/questions/199508/how-do-i-show-running-processes-in-oracle-db

반응형