프린트 하기

OS환경 : Oracle Linux6.8(64bit)


DB 환경 : Oracle Database 11.2.0.4


쿼리 : undo 사용량 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT TO_CHAR(s.sid)||',' ||TO_CHAR(s.serial#) sid_serial,
         NVL(s.username, 'None') orauser,
         s.program,
         r.name undoseg,
         t.used_ublk * TO_NUMBER(x.value)/1024||'K' "Undo"
FROM   sys.v_$rollname    r,
        sys.v_$session     s,
        sys.v_$transaction t,
        sys.v_$parameter   x
WHERE s.taddr = t.addr
AND r.usn   = t.xidusn(+)
AND x.name  = 'db_block_size'
/


현재 Rollback 진행률 확인
1
2
select OPNAME,TARGET,SOFAR,TOTALWORK,UNITS,START_TIME,TIME_REMAINING, ELAPSED_SECONDS 
from v$session_longops where username='SCOTT';


Oracle Database 10g에서는 transaction rollback이 수행될때 , 진행중인 transaction이 

$SESSION_LONGOPS view에 event가 기록되어짐

이 view는 10g 이전 데이터베이스에도 존재하였지만, transaction을 rollback을 하는것은 

기록하지 못했었음. 

Rollback의 경우에 , 6초보다 길어지는 경우에 이 view에 기록되어짐


$SESSION_LONGOPS view는 모든 진행중인 작업에 대해 보여주는데, "Transaction Rollback" 

이라고 기록되어진 OPNAME 컬럼을 통해 확인할수 있음


각 컬럼 설명

TIME_REMAINING : 예상된 남겨진 시간을 보여준다. (초단위) 

ELAPSED_SECONDS : 이제까지 수행한 시간을 보여준다. (초단위) 

TOTALWORK : 수행하는 작업의 전체 양을 보여준다. 

SOFAR : 이제까지 수행한 작업의 양을 보여준다. 

UNITS : 작업한 양의 단위를 보여준다.

LAST_UPDATE_TIME : view의 내용이 현재것인지를 판단하게 한다.



세션 PID 확인
1
2
3
4
5
6
select spid from v$process where addr = (select paddr from v$session where sid='');
select vs.sid, vs.username, vs.osuser, vs.process fg_pid, 
vp.spid bg_pid 
from v$session vs, v$process vp 
where vs.paddr = vp.addr
and vs.sid='';


SQL 확인

1
2
3
4
5
6
select a.sql_text 
             from v$sqltext a, v$session b 
             where a.address=b.sql_address and 
                   a.hash_value=b.sql_hash_value and 
                   b.sid= ''
             order by a.piece; 

출처: 

http://redkite777.tistory.com/entry/ORA00031-session-marked-for-kill-의-해결책 [All Days 무한도전]

http://support.dbworks.co.kr/index.php?document_srl=3534&mid=ora_tb