** 아래의 명령은 원래 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 홈페이지에서 이동 됨]

윤진한
07-08-07 16:13
0개
584회
Oracle
DB SESSION 상태 체크 및 프로세스 죽이기
추천
0
비추천
0
댓글목록
등록된 댓글이 없습니다.