programing

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

showcode 2023. 3. 16. 22:02
반응형

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

Oracle 데이터베이스에서 진행 중인 다른 프로세스를 표시할 수 있습니까?Sybases 같은 것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 컬럼을 얻을 수도 있습니다.이 컬럼은 처음 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

반응형