본문 바로가기
Dev/Oracle

[Oracle] RMAN 특정 테이블 스페이스 제외하고 복구

by 흰바다제비 2022. 10. 18.
728x90

이전 글 : 2022.09.02 - [Dev/Oracle] - [Oracle] RMAN backup - 특정 테이블 스페이스 제외

 

[Oracle] RMAN backup - 특정 테이블 스페이스 제외

매일 새벽 진행되는 백업 데이터가 너무 커서 불필요한 데이터는 제외하고 백업하고자 한다. 특정 테이블 스페이스를 제외하고 백업 CONFIGURE 설정시 EXCLUDE FOR TABLESPACE 구문을 넣어준다. RMAN> run{ .

dev-kwon.tistory.com

 

특정 테이블 스페이스를 제외하고 백업한 경우, 일부 데이터를 제외하고 백업 했기 때문에 복구할 때도 동일한 옵션을 주어야한다. 동일한 옵션 없이 복구를 시도한다면, 백업본에 존재하지 않는 데이터를 찾기 때문에 다음과 같은 오류가 발생한다.

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 14/09/2022 09:25:19
RMAN-06094: datafile 1 must be restored

 

recover database 구문에 skip tablespace 옵션을 주어 특정 테이블 스페이스를 제외하고 복구할 수 있다. 이때, 새로운 DB에 복구하는 경우 UNDO, SYSTEM, SYSAUX 테이블 스페이스는 필수적으로 복구되어야 한다.

 

skip tablespace 옵션은 아래와 같이 준다. 아래의 경우 TEST1, TEST2 테이블 스페이스를 제외하고 복원/복구할 수 있다. 복원할 때 준 옵션을 복구할 때도 동일하게 주어야 한다.

restore database skip tablespace 'TEST1','TEST2'; 
recover database skip tablespace 'TEST1','TEST2';

 

run 스크립트로 전체 과정을 실행하면 다음과 같다.

run{
set dbid=1234567890
startup nomount
restore controlfile from '/backup/db/rman/db_ctl_c-1234567890-20220914-01';
alter database mount;
set until time="to_date('2022-09-14 01:00:00','yyyy-mm-dd hh24:mi:ss')";
restore database skip tablespace 'TEST1','TEST2'; 
recover database skip tablespace 'TEST1','TEST2';
alter database open resetlogs;
}

 

run 스크립트로 실행하고자 한다면, run 스크립트를 실행하기 전에 DB는 shutdown 된 상태여야 한다. nomount 일때만 controlfile restore이 가능하다.

 

@dbid는 RMAN 백업을 받은 DB에서 SELECT * FROM V$DATABASE 쿼리를 통해 DBID를 조회할 수 있다.

SELECT * FROM V$DATABASE

 

 

 

728x90

댓글