TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-18 |
제목 | ROLLBACK SEGMENT의 OFFLINE 과정(PENDING OFFLINE, XACTS, OR | ||
---|---|---|---|
ROLLBACK SEGMENT의 OFFLINE 과정(PENDING OFFLINE, XACTS, ORA-1545)
================================================================= rollback segment를 drop하기 위해서는 우선 해당 rollback segment를 offline 시켜야 한다. 여기서는 rollback segment가 offline되는 과정에 대한 설명을 하며, 이 과정에서 생길 수 있는 의문 사항에 대한 설명을 덧붙인다. 기본개념 1. v$rollstat에는 rollback segment에 대한 dynamic information이 기록되어진다. 단, 해당 instance가 현재 online하여 사용하고 있는 rollback segment에 대한 정보만이 존재한다. (offline되면 v$rollstat에서는 정보가 없어진다.) 2. dba_rollback_segs에는 rollback segment에 대한 static information이 기록되어 있다. v$rollstat과는 달리 db 내의 모든(online되었건 offline되었건 간에) rollback segment에 대한 정보가 기록된다. 3. rollback segment를 offline하는 시점에 해당 rollback segment에 active transaction이 존재한다면(v$rollstat의 xacts column이 0보다 큰 경우), offline은 active transaction이 종료될 때까지 지연된다. (v$rollstat의 status column에 'PENDING OFFLINE'로 mark) 4. rollback segment를 offline하는 작업은 smon이 수행한다. 1) 'alter rollback segment ... offline' 명령이 수행되는 시점에 smon에 post되어 smon이 수행한다. 2) 일정한 간격(5분)마다 한번씩 smon이 wake-up하여 'PENDING OFFLINE' 인 rollback segment에 active transaction이 존재하는지를 확인하여 없다면 offline한다. 5. rollback segment의 drop은 완전히 offline된 rollback segment에 대해서만 가능하다. 위의 기본 개념을 근거로 rollback segment의 offline 시의 흐름을 정리해 보면 다음과 같다. 1. 해당 rollback segment에 active transaction이 없을 경우 (v$rollstat의 xacts=0) 1) 'alter rollback segment ... offline' 하는 시점에 이 명령이 smon에 post되어 smon이 바로 offline 수행 2) v$rollstat에서 해당 rollback segment 정보는 바로 사라짐. dba_rollback_segs에서 status는 offline 2. 해당 rollback segment에 active transaction이 있을 경우 (v$rollstat의 xacts>0) 1) 'alter rollback segment ... offline' 하는 시점에 이 명령이 smon에 post됨 2) smon은 해당 rollback segment에 active transaction이 있으므로 v$rollstat의 status column에 'PENDING OFFLINE'으로 mark만 해둠. 3) 이후 5분에 한번씩 active transaction이 사라졌는지 check 4) 5분 interval로 check를 하다가 active transaction이 사라진 것을 detect하는 시점에 v$rollstat에서 정보 삭제하고 dba_rollback_segs 의 status는 offline 간혹 rollback segment를 offline하고 drop하는 과정에서, v$rollstat의 xacts가 0임(active transaction이 없음을 의미)에도 불구하고 'drop rollback segment ...'를 수행하면 'ORA-1545 rollback segment ... specified not available' 에러가 발생되는 경우가 있다. 이는 일반적으로 1. 'alter rollback segment ... offline' 시 해당 rollback segment에 active transaction이 존재하여, 당장 offline시키지 못하고 'PENDING OFFLINE'으로 mark만 해둔 후 2. active transaction이 모두 종료되어 xacts column이 0으로 변경되었으나 3. smon의 wake-up interval(5분)이 아직 도달되지 않아서 정리가 되지 않은 경우로서 4. 최대 5분을 기다리면 자동적으로 smon에 의해서 detect가 되어 v$rollstat에서 정리가 될 것이며, 이 상태에서 다시 한 번 'alter rollback segment ... offline'을 수행해도 바로 정리가 될 것이다. |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |