어떤 session 이 rollback segment 를 잡고 비정상 작동 시 해당 rollback segment 를 찾아 이를 drop 후 재생성 해주어야 한다.

1. 해당 session 이 잡고 있었던 rollback segment 찾기

이때 rollback segment 를 offline 해도 pending offline 상태로 빠지므로 DB의 재기동이 필요하다.

DB 재기동 후

select * from v$rollstat;

을 보면 XACTS 의 수가 1이상이면서 writes 수가 0인것이 있다.

이는 session 이 잡고 있으면서 rollback 혹은 commit을 하지 못한 상태이다.

이를 Offline Drop 하여야 한다.

select segment_name, writes,xacts from v$rollstat, dba_rollback_segs
where usn = segment_id;

 

 

2. init 파일 수정 후 drop 시행

rollback_segments = (rbs01,rbs02,rbs03,rbs05,rbs06)

 

# 해당 rollback segment 삭제
_offline_rollback_segments = (rbs04,rbs07)

 

# 삭제할 rollback segment 를 DB 기동시 offline으로 setting

3. init 파일 수정 후 DB 재기동 하면 해당 rollback segment 가 offline으로 setting 되어 있다.
이를 Drop 하고 재생성한다.

Drop rollback segment rbs04;
Create rollback segment rbs04 tablespace RBS storage (……);

4. init 파일을 원상복구하고 DB 재기동을 수행한다.

 

 

* truncate table 시 도중 cancel로 인하여 위와 같은 상황 발생시는 해당 table을 drop 해 주어야 한다.

이때 trace file을 보면 해당 table이 나타나므로 이를 먼저 drop 하고 위의 작업을 수행해야 한다.

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다