본문 바로가기

오라클 백업/복구

Data File 장애 복구 3 - Undo Tablespace 복구




관련 파라미터 값들

undo_management: 언두 관리 방식

- auto

오라클이 자동으로 관리, STARTUP 할 때 undo datafile의 무결성을 확인해,

장애가 있을 경우는 DB OPEN 실패


- manual

DBA가 수동으로 관리, STARTUP 할 때 undo datafile의 무결성을 확인하지 않음, 

그래서 undo datafile이 없어도 OPEN 가능하다

undo에 장애가 발생했을 때 manual로 값을 수정한 후 복구 작업.


undo_tablespace: undo의 테이블 스페이스 지정

undo tablespace 변경을 원할 때는

> alter system set undo_tablespace='새언두테이블스페이스이름' ;


영구적으로 계속 사용하고 싶다면 parameter file 에서 수정을 해줘야 한다. (실습참고)


undo_retention: undo 에서의 데이터 보유시간 설정



undo 정보 조회

> show parameter undo ;



사용중인 Rollback Segment 확인하는 방법

SELECT s.sid, s.serial#, s.username, r.name "ROLLBACK SEG"

FROM v$session s, v$transaction t, v$rollname r

WHERE s.taddr = t.addr

AND t.xidusn = r.usn ;

commit 안된 데이터가 있다면 이 쿼리로 조회 가능 


Rollback Segment 정보 조회 (상태도 조회가능)

SELECT segment_name, owner, tablespace_name, status

FROM dba_rollback_segs ;





1. 운영중인 undo tablespace 장애 복구하기


사용중이던 rollback segment로 인해 undo tablespace 가 삭제 되지 않는다.

새로 만든 undo로 undo tablespace를 바꿔서 쓰고 있지 않은 기존의 undo tablespace는 쓰고있다면서 drop 이 안된다.

그래서 강제로 해당 undo tablespace를 오프라인 시키고 drop 시켜야함


방법은

Parameter File를 수정


undo_tablespace='새언두TS이름'

undo_management=manual

_offline_rollback_segments=(사용중이던롤백세그먼트)


management를 우선 manual로 바꾸고 

_offline_rollback_segments 파라미터를 사용해 사용중이던 Rollback Segment를 강.제.로 오프라인 시킨 후 

나중에 STARTUP 했을 때 MOUNT->OPEN 과정에서 에러가 발생하는데

그때 

> alter database datafile '언두데이터파일' offline drop ;

으로 드랍시킨 후 DB OPEN 하면 된다.


[실습]






2. No archive log mode 에서 undo tablespace 장애 복구


우선 Parameter File 에서

undo_management=manual

#undo_tablespace=                <- 주석처리

_offline_rollback_segments=(현재사용중인rollback_segment들)


> startup mount ;


> alter database datafile '언두데이터파일' offline drop ;


> alter database open ;


신규 undo tablespace 생성

> create undo tablespace 이름 datafile '경로' size *M ;


> shutdown immediate ;


다시 Parameter File 수정

undo_management=auto

undo_tablespace=새로생성된언두TS

#_offline_rollback_segments=(현재사용중인rollback_segment들) 

-> 이거 주석처리 안하면 바로 ▶ 여기로 넘어갈 수 있음, 에러없이 바로 drop 가능.


> startup ;


> drop tablespace 쓰고있던undo including contents and datafiles ;

했을 때 에러가 남! 사용중인 롤백 세그먼트 에러!


> SELECT segment_name, owner, tablespace_name, status FROM dba_rollback_segs ; 로 조회하고

Status 가 "NEEDS RECOVERY" 인 세그먼트를 강제로 오프라인 시켜야 함


> shutdown immediate ;


Parameter File 수정

_offline_rollback_segments=(복구필요한세그먼트입력)


> startup ;


 이제 drop 가능해짐

> drop tablespace 쓰고있던undo including contents and datafiles ;



[실습]