데이터베이스

Total 205
Today 0
profile_image
윤진한
07-08-07 16:13 0개 585회
Oracle
DB SESSION 상태 체크 및 프로세스 죽이기
** 아래의 명령은 원래 system 계정으로 사용하게 되어 있으나,

    DBA 권한을 가진 계정을 사용해도 조회가 가능합니다.

 

select s.username username, s.osuser, s.program, a.sql_text SQL
from v$sqltext a, v$session s
where s.sid = sid번호 and s.serial# = serial번호 /* SQL 문 조회 : system 으로 수행 */
and a.address = s.sql_address and a.hash_value = s.sql_hash_value

 

 

0. 가장 오래 동안 맺고 있는 세션부터 리스트업 합니다.


select sid, serial#, username, status, machine, program, logon_time  from v$session
where  username='DBA권한 계정명'  order by logon_time asc

 

1. 먼저 문제가 있는 사용자 세션을 찾아야 합니다.(더 자세히 조회합니다.)

 

select s.username, s.sid, p.spid, s.serial#, s.status, s.osuser, s.machine, s.logon_time
from v$session s, v$process p
where p.addr = s.paddr

and s.status = 'INACTIVE' --(r o'ACTIVE')
and s.username in ('문제가 있는 사용자명')
and p.spid = 'spid 번호'
order by logon_time, username desc

 

위 쿼리수행결과에서 sid 와 serial#를 알아냅니다.

 

2. SQL 추출 (위에서 추출한 sid와 serial# 으로 문제있는 SQL문을 확인합니다.)

 

select s.username username, s.osuser, s.program, a.sql_text SQL, a.piece 순서
from v$sqltext a, v$session s
where s.sid = sid번호 and s.serial# = serial번호
and a.address = s.sql_address and a.hash_value = s.sql_hash_value
order by piece

 

그러면 해당 세션에서 물고 있는 SQL 문이 조회가 됩니다.

 

3. 1번 SQL 문에서 조회가 되는 spid 는 시스템의 프로세스 ID입니다.
  만약 alter system kill session ... 명령으로 세션이 죽지 않을때 강제적으로

  DB 서버에 TELNET로 접속하여 해당 프로세스 ID를 kill -9 로 죽이면,

  잠시뒤 세션이 해제가 됩니다.
 

4. SPID를 이용하여 쿼리문을 조회할 수도 있습니다.

 

select s.username username, s.osuser, s.program, a.sql_text SQL, a.piece 순서
from v$sqltext a, v$session s, v$process p
where p.spid='16516'
and a.address = s.sql_address and a.hash_value = s.sql_hash_value
and p.addr = s.paddr
order by piece

출처 : Tong - 드렁크수달스님의 ★ DATABASE ★통
[이 게시물은 최고관리자님에 의해 2007-08-07 16:29:47 홈페이지에서 이동 됨]

추천 0 비추천 0

댓글목록

등록된 댓글이 없습니다.