RMAN ( Recovery Manager )

Recovery Catalog 저장소 
저장소에는 다음과 같은 정보들이 저장된다. 
RMAN 은 두가지 종류 저장소로 나눌 수 있다. 
접속 

Recovery Catalog Server 구성 
Recover Catalog 에 Tablespace 생성( Server ) 
Recover Catalog 사용자 생성 및 권한 부여( Server ) 
tnsname.ora , listener.ora 수정  
Server 접속 ( client ) 
Catalog Tablespace 생성 ( Client ) 
Target Database 등록 ( Client )

백업  
Backup Database ( Client ) 

복구 
시나리오  
1. 운영중 컨트롤 파일 삭제 (client & sysdba) 
2. 비정상 종료 
3. RMAN 으로 Control File Restore ( client ) 
4. recover database
5. open 




RMAN 은 사용자로 하여금 보다 편리하고 간편하게 백업과 복구를 할 수 있도록 한다. 특히 ASM 환경에서는 RMAN 을 사용하여 백업 및 복구를 하기 때문에 반드시 익혀야한다. 

RMAN 은 Recovery Catalog 라는 복구에 필요한 정보를 저장하는 저장소를 필요로 한다.



Recovery Catalog 저장소

백업이 존재해도 Catalog 저장소가 잘못되면 데이터를 복구를 하지 못한다.  
만약 Catalog 저장소가 날라갔다면 다시 저장소에 정보를 등록해야 한다. ( http://gyh214.tistory.com/132  을 참고하자.)

저장소에는 다음과 같은 정보들이 저장된다.
 - Data File 및 Archive Backup Set 과 Copy 된 이미지 정보
 - 백업 대상서버의 물리적 주소
 - 백업 스크립트 (Recovery Catalog Server 를 사용시)

RMAN 은 두가지 종류 저장소로 나눌 수 있다. 
 - Control file 사용
 - Catalog Server

Control file 사용 
 - 기본적으로 사용하면 운영서버의 Control File에 정보가 저장된다. 
 - 특별한 설정이 필요 없다.

Catalog Server 
 - 따로 Instance를 생성하여 운영하는 방법이다.
 - Oracle에서는 이 방법을 사용하는 것을 권장한다.
 - 서버를 추가로 구축해야 함으로 비용이 발생하는 단점이 있다.


접속
control file 사용시
> rman target /

Catalog Server 사용시
> rman target / catalog rcuser/rcuser@rcserver

Unix 계열에서는 rman 을 실행하면 별 반응이 없다. 다음과 같은 조치가 필요하다.

# which rman

/usr/X11R6/bin/rman

# cp /home/oracle/product/10g/bin/rman /usr/X11R6/bin/

cp: overwrite `/usr/X11R6/bin/rman'? y





Recovery Catalog Server 구성

Recovery Catalog Server 를 구성하게 되면 총 Instance 는 최소 두개가 되어야 한다. 그렇기 때문에 기존의 데이터베이스를 이용하여 Clone DB 를 만들고 SID 는 rcserver 으로한다.
관계에 정리하자면 Recover Catalog Server 가 존재하는 Clone DB 는 Server 입장이 되고, 이를 사용하게 되는 testdb 는 Client 가 된다. 

clone DB 과정 생략

Recover Catalog 에 Tablespace 생성( Server )
-
create tablespace rc_tbs
datafile '/data/temp/rctbs01.dbf' size 10M
autoextend on next 1m maxsize unlimited
-

Recover Catalog 사용자 생성 및 권한 부여( Server )
-
SYS> create user rcuser identified by rcuser
default tablespace rc_tbs;
User created.

SYS> grant connect, resource, recovery_catalog_owner to rcuser;
Grant successded.
-

tnsname.ora , listener.ora 수정 
파일의 위치는  $ORACLE_HOME/network/admin 에 위치하고 있다.
만약 파일이 존재하지 않는다면 netca 를 실행하여 만들거나 그냥 파일을 만들어도 된다.


tnsname.ora
RCSERVER 를 추가한다. Port 와 Service_Name 에 주의한다.
-
TESTDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = server1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = testdb)
    )
  )
-- net service name 추가
RCSERVER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = server1)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RCSERVER)
    )
  )
-
listener.ora 
 포트번호에 주의하여 추가한다.
-
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = server1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = server1)(PORT = 1522))
    )
  )
-



Server 접속 ( client )

$ rman target / catalog rcuser/rcuser@rcserver


Recovery Manager: Release 10.2.0.1.0 - Production on Wed Apr 4 18:40:32 2012


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


connected to target database: TESTDB (DBID=2562882750)

connected to recovery catalog database


RMAN>



만약 아래와 같이 에러가 발생했다면 네트워크 설정상의 문제이다. listener.ora와 tnsname.ora 파일을 적절히 수정하고 lsnrctl, tnsping 등의 명령어를 이용하여 처리 한다.

$ rman target / catalog rcuser/rcuser@rcserver


Recovery Manager: Release 10.2.0.1.0 - Production on Wed Apr 4 18:05:29 2012


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


connected to target database: TESTDB (DBID=2562882750)



RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-00554: initialization of internal recovery manager package failed

RMAN-04004: error from recovery catalog database: ORA-12154: TNS:could not resolve the connect identifier specified



Catalog Tablespace 생성 ( Client )
-
RMAN> create catalog tablespace rc_tbs;
recovery catalog created
-

Target Database 등록 ( Client ) 
 이 과정은 Target 이 되는 Client 를 등록하는 과정이다. 반드시 ORACLE_SID 환경변수에 Client 의 SID가 등록되어 있어야 한다.
-
$ sqlplus rcuser/rcuser@rcserver

SQL> select * from rc_database;
no rows selected -- 등록이 되어 있지 않다.

-- RMAN 에서 Target Database를 등록한다.
RMAN> register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

--  조회 재시도 TESTDB 가 등록된 것을 알 수 있다.
SQL>select * from rc_database;

    DB_KEY  DBINC_KEY       DBID NAME     RESETLOGS_CHANGE# RESETLOGS_TI
---------- ---------- ---------- -------- ----------------- ------------
         1          2 2562882750 TESTDB              632887 04-APR-12
-






백업 

Backup Database ( Client )

전체 데이터베이스 백업을 수행하는 과정이다.

$ rman target / catalog rcuser/rcuser@rcserver


Recovery Manager: Release 10.2.0.1.0 - Production on Wed Apr 4 18:40:32 2012


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


connected to target database: TESTDB (DBID=2562882750)

connected to recovery catalog database



RMAN> backup database;


Starting backup at 04-APR-12

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=153 devtype=DISK

channel ORA_DISK_1: starting full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

input datafile fno=00001 name=/home/oracle/oradata/testdb/system01.dbf

input datafile fno=00003 name=/home/oracle/oradata/testdb/sysaux01.dbf

input datafile fno=00005 name=/home/oracle/oradata/testdb/example01.dbf

input datafile fno=00002 name=/home/oracle/oradata/testdb/undotbs01.dbf

input datafile fno=00006 name=/home/oracle/oradata/testdb/test01.dbf

input datafile fno=00004 name=/home/oracle/oradata/testdb/users01.dbf

channel ORA_DISK_1: starting piece 1 at 04-APR-12

channel ORA_DISK_1: finished piece 1 at 04-APR-12

piece handle=/home/oracle/flash_recovery_area/TESTDB/backupset/2012_04_04/o1_mf_nnndf_TAG20120404T192926_7qr8nhwc_.bkp tag=TAG20120404T192926 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:05:41

channel ORA_DISK_1: starting full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

including current control file in backupset

including current SPFILE in backupset

channel ORA_DISK_1: starting piece 1 at 04-APR-12

channel ORA_DISK_1: finished piece 1 at 04-APR-12

piece handle=/home/oracle/flash_recovery_area/TESTDB/backupset/2012_04_04/o1_mf_ncsnf_TAG20120404T192926_7qr8z1w1_.bkp tag=TAG20120404T192926 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:04

Finished backup at 04-APR-12





복구
운영중 컨트롤파일이 삭제되고 비정상 종료되었다는 가정아래 복구를 실시하도록 한다. 시나리오는 아래와 같다.

시나리오 

1. 운영중 컨트롤 파일 삭제
2. 비정상 종료
3. RMAN 으로 Control File Restore
4. recover database
5. open



1. 운영중 컨트롤 파일 삭제 (client & sysdba)

SQL> select name from v$controlfile;


NAME

--------------------------------------------------------------------------------

/home/oracle/oradata/testdb/control01.ctl

/home/oracle/oradata/testdb/control02.ctl

/home/oracle/oradata/testdb/control03.ctl


SQL> !rm -fr /home/oracle/oradata/testdb/control0*




2. 비정상 종료

SQL> shutdown abort

ORACLE instance shut down.


SQL> startup

ORACLE instance started.


Total System Global Area  419430400 bytes

Fixed Size                  1219760 bytes

Variable Size             163578704 bytes

Database Buffers          251658240 bytes

Redo Buffers                2973696 bytes

ORA-00205: error in identifying control file, check alert log for more info



SQL>



3. RMAN 으로 Control File Restore ( client )

$ rman target / catalog rcuser/rcuser@rcserver


Recovery Manager: Release 10.2.0.1.0 - Production on Wed Apr 4 19:47:12 2012


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


connected to target database: testdb (not mounted)  // nomount 상태이다.

connected to recovery catalog database


RMAN> restore controlfile;


Starting restore at 04-APR-12

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=155 devtype=DISK


channel ORA_DISK_1: starting datafile backupset restore

channel ORA_DISK_1: restoring control file

channel ORA_DISK_1: reading from backup piece /home/oracle/flash_recovery_area/TESTDB/backupset/2012_04_04/o1_mf_ncsnf_TAG20120404T192926_7qr8z1w1_.bkp

channel ORA_DISK_1: restored backup piece 1

piece handle=/home/oracle/flash_recovery_area/TESTDB/backupset/2012_04_04/o1_mf_ncsnf_TAG20120404T192926_7qr8z1w1_.bkp tag=TAG20120404T192926

channel ORA_DISK_1: restore complete, elapsed time: 00:00:09

output filename=/home/oracle/oradata/testdb/control01.ctl

output filename=/home/oracle/oradata/testdb/control02.ctl

output filename=/home/oracle/oradata/testdb/control03.ctl

Finished restore at 04-APR-12

RMAN>  alter database mount;


database mounted

released channel: ORA_DISK_1



4. recover database

RMAN> alter database open resetlogs;


RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of alter db command at 04/04/2012 19:52:47

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


컨트롤 파일을 restore 를 했지만 recovery 과정을 하지 않았기 때문에 open 이 안된다.

RMAN> recover database;


Starting recover at 04-APR-12

Starting implicit crosscheck backup at 04-APR-12

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=154 devtype=DISK

Crosschecked 1 objects

Finished implicit crosscheck backup at 04-APR-12


Starting implicit crosscheck copy at 04-APR-12

using channel ORA_DISK_1

Crosschecked 1 objects

Finished implicit crosscheck copy at 04-APR-12


searching for all files in the recovery area

cataloging files...

cataloging done


List of Cataloged Files

=======================

File Name: /home/oracle/flash_recovery_area/TESTDB/backupset/2012_04_04/o1_mf_ncsnf_TAG20120404T192926_7qr8z1w1_.bkp


using channel ORA_DISK_1


starting media recovery


archive log thread 1 sequence 5 is already on disk as file /home/oracle/oradata/testdb/redo01.log

archive log filename=/home/oracle/oradata/testdb/redo01.log thread=1 sequence=5

media recovery complete, elapsed time: 00:00:05

Finished recover at 04-APR-12



5. open

open 을 시도한다. resetlogs 옵션으로 open을 해야 한다.

RMAN> alter database open resetlogs;


database opened

new incarnation of database registered in recovery catalog

starting full resync of recovery catalog

full resync complete








&