본문 바로가기

oracle

[ORACLE] rollback 남은 시간 확인 쿼리

728x90

/* --------------------------
   object_name 의 경우, 나오다가 안나오다가 하므로 몇 번 조회하면 확인 가능.
   v$session 정보이므로 현재 rollback 대상 object 가 나올 뿐이며, 전체 대상 object 정보는 구할 수 없음.
*/

set linesize 180 pagesize 1000
col state           format a11
col undoblocksdone  format 999,999,999
col sid             format 99999
col program         format a20
col object_name     format a40
col pid             format 999999999
col xid             format a20
break on xid

select f.state
     , f.undoblocksdone
     , s.sid
     , substr(decode(substr(s.program,1,7),'oracle@',substr(s.program,instr(s.program,'(',1)),s.program), 1, 20) program
     , substr((SELECT OBJECT_NAME FROM DBA_OBJECTS C WHERE C.OBJECT_ID = ROW_WAIT_OBJ# ),1,30) object_name
     , p.spid
     , f.xid
from   v$fast_start_servers f, v$process p, v$session s
where  f.pid   = p.pid
and    p.addr  = s.paddr
and    f.state <> 'IDLE'
order by f.xid, f.state, s.program;

 


/* --------------------------
   object_name 의 경우, 나오다가 안나오다가 하므로 몇 번 조회하면 확인 가능.
   v$session 정보이므로 현재 rollback 대상 object 가 나올 뿐이며, 전체 대상 object 정보는 구할 수 없음.
*/

set linesize 180 pagesize 1000
col usn             format a15
col state           format a11
col undoblocksdone  format 999,999,999
col undoblockstotal format 999,999,999
col sid             format 99999
col program         format a20
col object_name     format a20
col pid             format 999999999
col parentusn       format a15
col xid             format a20
col pxid            format a20

! date

select t.usn||'.'||t.slt||'.'||t.seq usn
     , t.state
     , t.undoblocksdone
     , t.undoblockstotal
     , round((t.undoblocksdone/t.undoblockstotal)*100, 2) "COMPLETE(%)" -- Total이 줄어들기 때문에 현 시점의 %임
     , s.sid
     , substr(decode(substr(s.program,1,7),'oracle@',substr(s.program,instr(s.program,'(',1)),s.program), 1, 20) program
     , substr((SELECT OBJECT_NAME FROM DBA_OBJECTS C WHERE C.OBJECT_ID = ROW_WAIT_OBJ# ),1,20) object_name
     , p.spid
     , t.cputime
--     , t.parentusn||'.'||t.parentslt||'.'||t.parentseq parentusn
--     , t.xid
--     , t.pxid
     , t.rcvservers
from   v$fast_start_transactions t, v$process p, v$session s
where  t.pid  = p.pid
and    p.addr = s.paddr;


/* --------------------------
   parallel 로 수행될 경우에도 여기에 정보가 나옴.
*/
-- SQL1
set linesize 180 pagesize 1000
col usn      format a15
col undosize format 999,999,999
select ADDR
     , KTUXEUSN||'.'||KTUXESLT||'.'||KTUXESQN USN
     , KTUXESIZ UNDOSIZE
     , KTUXESTA TXSTATUS
from   x$ktuxe 
where  KTUXECFL = 'DEAD' 
and    KTUXESTA = 'ACTIVE';

-- SQL2
set linesize 180 pagesize 1000
col USN        format a15
col UNDOBLOCKS format 999,999,999
SELECT
B.NAME      USEG,
B.INST#     INSTANCE,
B.STATUS$   STATUS,
A.KTUXEUSN||'.'||A.KTUXESLT||'.'||A.KTUXESQN USN,
A.KTUXESIZ  UNDOBLOCKS,
A.KTUXESTA  TXSTATUS
FROM X$KTUXE A, UNDO$ B
WHERE A.KTUXECFL LIKE '%DEAD%'
AND A.KTUXEUSN = B.US#;

728x90