RMAN으로 복구 하기
Oracle/Backup & Recovery
1. RMAN으로 복구 하기
RMAN 복구 방법 역시 전통적인 방법과 동일하게 Restore 와 Recovery 라는 개념으로 나뉘게 된다.
Restore 는 백업 파일로부터의 복원이고 Recovery 는 Redo Log / ArchiveLog 를 적용시켜 복구 하는 것임
전통적인 방법과의 차이라면 순서와 원리는 동일하지만 전통적인 방법은 이 과정을 관리자가 수동으로 수행했던 것을
RMAN 유틸리티가 수행한다는 것입니다. 아래에서 자세히 각 Case 별로 어떻게 복구하는 지 살펴 보겠다.

Step 1. 실습을 위해 신규 테이블 스페이스를 생성 후 full backup 을 수행
SYS>create tablespace rtest
2 datafile '/app/oracle/oradata/testdb/rtest01.dbf' size 10M;

Tablespace created.

(RMAN으로 접속해서 전체 백업을 수행.)
RMAN> backup as compressed backupset database
2> format '/data/backup/rman/%T_full_%U';

Step 2. rtest01.dbf 파일을 삭제
RMAN> report schema;
Report of database schema for database with db_unique_name TESTDB
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ---------- --------------------------------------------------
1 720 SYSTEM *** /app/oracle/oradata/testdb/system01.dbf
2 660 SYSAUX *** /app/oracle/oradata/testdb/sysaux01.dbf
3 354 UNDOTBS1 *** /app/oracle/oradata/testdb/undotbs01.dbf
4 748 USERS *** /app/oracle/oradata/testdb/users01.dbf
5 345 EXAMPLE *** /app/oracle/oradata/testdb/example01.dbf
6 10 RTEST *** /app/oracle/oradata/testdb/rtest01.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ---------------- -----------------------------------------------
1 100 TEMP100 100 /app/oracle/oradata/testdb/temp100.dbf
(-- rtest01.dbf 파일을 삭제합니다 --)

RMAN> exit

Recovery Manager complete.

[oracle@localhost ~]$ rm -f /app/oracle/oradata/testdb/rtest01.dbf
[oracle@localhost ~]$ ls /app/oracle/oradata/testdb/rtest01.dbf
ls: /app/oracle/oradata/testdb/rtest01.dbf: 그런 파일이나 디렉토리가 없음

Step 3. 삭제된 파일을 복구
1) 독립형 명령어
RMAN> sql 'alter tablespace rtest offline immediate' ;

RMAN> restore tablespace rtest ;

RMAN> recover tablespace rtest ;

RMAN> sql 'alter tablespace rtest online' ;
2. 작업형 명령어(장애를 한번더 일으켜서 복구)
[oracle@localhost ~]$ rm -f /app/oracle/oradata/testdb/rtest01.dbf
[oracle@localhost ~]$ ls /app/oracle/oradata/testdb/rtest01.dbf
ls: /app/oracle/oradata/testdb/rtest01.dbf: 그런 파일이나 디렉토리가 없음

[oracle@localhost ~]$ rman target sys/oracle

Recovery Manager: Release 11.2.0.2.0 - Production on Sun Aug 18 00:27:31 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: TESTDB (DBID=2581382545)

RMAN> run {
2> sql 'alter tablespace rtest offline immediate';
3> restore tablespace rtest ;
4> recover tablespace rtest ;
5> sql 'alter tablespace rtest online ';
6> }
2.Offline 이 안되는 데이터 파일이 삭제된 경우 - DB 종료 후 복구
이번 경우는 Offline 이 안되는 system tablespace 를 삭제 한 후 복구한다.
1 ) 현재 상태 확인 후 system01.dbf 삭제하기
RMAN> report schema;

Report of database schema for database with db_unique_name TESTDB
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ---------- --------------------------------------------------
1 720 SYSTEM *** /app/oracle/oradata/testdb/system01.dbf
2 660 SYSAUX *** /app/oracle/oradata/testdb/sysaux01.dbf
3 354 UNDOTBS1 *** /app/oracle/oradata/testdb/undotbs01.dbf
4 748 USERS *** /app/oracle/oradata/testdb/users01.dbf
5 345 EXAMPLE *** /app/oracle/oradata/testdb/example01.dbf
6 10 RTEST *** /app/oracle/oradata/testdb/rtest01.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ---------------- -----------------------------------------------
1 100 TEMP100 100 /app/oracle/oradata/testdb/temp100.dbf

RMAN> exit

Recovery Manager complete.

[oracle@localhost ~]$ rm -f /app/oracle/oradata/testdb/system01.dbf
[oracle@localhost ~]$ ls /app/oracle/oradata/testdb/system01.dbf
ls: /app/oracle/oradata/testdb/system01.dbf: 그런 파일이나 디렉토리가 없음
2) DB종료 후 재시작하여 에러 확인
[oracle@localhost ~]$ rman target sys/oracle

Recovery Manager: Release 11.2.0.2.0 - Production on Sun Aug 18 00:36:19 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: TESTDB (DBID=2581382545)

RMAN> shutdown immediate;

using target database control file instead of recovery catalog

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of shutdown command at 08/18/2013 00:36:24
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/app/oracle/oradata/testdb/system01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3 <--- 정상 종료가 안되는 것이 확인 됩니다.
RMAN> shutdown abort; <--- 강제로 비정상 종료를 시킵니다.
Oracle instance shut down

RMAN> startup


connected to target database (not started)
Oracle instance started
database mounted
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of startup command at 08/18/2013 00:36:42
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/app/oracle/oradata/testdb/system01.dbf'
(system01.dbf 파일이 없어서 open 이 안됩니다.)
3) 파일을 복원
RMAN> restore tablespace system ;
( 지면 관계상 복원 내용은 생략합니다. 파일 크기가 커서 오래 걸릴 수도 있습니다 )


RMAN> recover database; <-- 비정상 종료가 되었기에 전체 데이터베이스를 복구합니다.
(지면 관계상 복구 내용은 생략합니다)


RMAN> alter database open;
database opened
정상적으로 복구 완료되었다. 위에서는 독립형 명령어로 작업을 했지만 당연히 작업형 명령어로도 가능하다. 직접 해 보시기 바랍니다.