2012. 7. 11. 17:36

No. 11001

Oracle 8 NEW : Recovery manager 란 ?
====================================

- 소개

Oracle 8 은 새로운 backup와 recovery 방법인 Recovery manager 를 제공한다.
Recovery manager(이하  RMAN) 는 backup,restore,recover process를 관리하는
tool 이다. Oracle Enterprise Manager 를 통해 GUI mode 로 가능하고,
rman 이라는 command line interface 를 함께 제공한다.

특히, OS device control 기능이 보완 되었기 때문에, 현재 backup catalog 를
유지하고,  이 정보를 이용해 OS level 에서 file 을 auto-restore 해 주기
때문에, database recovery 전에 file 을 manual 하게 restore 할 필요가
없어졌다.

Incremental backup 을 제공하고, backup 이나 restore 중에 current block
detection 을 해 주며(v$backup_corruption, v$copy_corruption 또는 alert
log 에 report), Rman 작업시에 parallelization 을 제공하며, open database
backup 동안 특별한 redo 를 발생하지 않는다.


- 구조

Recovery                          
manager in OEM(oracle                  
                enterprise             --->         Database
                manager)          <---               (catalog)                
or  RMAN
        
        /|   |
         |   |/

       DATABASE                    --->   OS
       (target to backup)   <---   Device


- 구성 요소 설명

1) recovery manager
Command 를 해석하고, backup, restore, recover 를 실행하기 위해 target
database 로 command 를 전달한다. recovery catalog 를 update 한다. 실행
과정을 조정, 모니터링 한다.

2) Target database
backup,restore,recovery action 이 수행될 데이타베이스

3) Recovery Catalog
Information 저장장소. 즉, target database 의 물리적 스키마, datafile 과
archivelog 의 backup sets 과 pieces, backup script 등을 포함하고 있음.
rman 작업시 recovery catalog 정보를 이용한다.

4) channel
allocation channel 은 target database 의 backup,restore,recover 에 대한
server process 초기화를 한다. 즉, 이 channel 은 disk 를 포함 기타 OS
device 를 지정하게 되며, 이 갯수에 따라 parallelization 의 degree 가 결정
된다.


- recovery catalog 를 사용할 것인지를 결정하기
catalog 없이 RMAN 을 사용할 때의 단점은  recovery catalog 의 overhead 가
없는 대신, Point-In-Time recovery 를 쉽게 할 수 없다. 또한, control file
손상시에 recovery 할 수 없고, stored script 를 사용할 수 없다.
(datafile 이 20개 이상일 경우에는 recovery catalog 사용을 권장한다.)


- Setup

가. Recovery catalog 생성

1. Backup(target) db 외의 별도의 db 생성 (8.0.3 이상)

2. catalog DB 에 분리된 tablespace 생성

create tablespace rcvcat datafile '/oracle/rcvcat/rcvcat01.dbf'      
size 20 M;

3. catalog 의 owner 생성과 권한부여

        create user rman identified by rman
        temporary tablespace temp
        default tablespace rcvcat;

        grant dba,connect,resource,recovery_catalog_owner to rman;

4. catalog 저장에 필요한 object 생성

        cd $ORACLE_HOME/rdbms/admin
        sqlplus rman/rman
        @catrman

나. Recovery manager 기동

1. recovery catalog DB 를 사용하는 경우

rman target \"system/manager\"  rcvcat \"rman/rman@orabeta1\"

(orabeta1 은 catalog DB 로 접속하는 tnsname 입니다.
즉, sqlplus rman/rman@orabeta1 하면, catalog db 와 접속되어야 합니다.)

2. recovery catalog DB 를 사용하지 않는 경우
rman target system/manager@target nocatalog

위 경우 모두, target database 를 catalog 에 등록해야 한다.
RMAN> register database;

다. Backup 시작
- Backup 은 database 가 open 또는 close(close 후에는 반드시 mount
  상태이어야 한다)
- Backup 의 단위
        full database
        tablespace
        datafile
        control file
        archived logs
- Backup 의 예

--full database
        
run {  
allocate channel dev1 type disk;
allocate channel dev2 type disk;
backup full filesperset 2  
(database format '/user7/ora8/backup.%n_%p') ;
release channel dev1;
release channel dev2;
}  

-- tablespace

run {
allocate channel dev_1 type disk ;
  backup incremental level 0
    filesperset 1
    (tablespace system channel dev_1 format '/vol312/net8%d_%u');
release channel dev_1;

}


-- datafile

run{  
allocate channel dev1 type disk;
copy datafile "/vo3/orabeta6/backup/copy_tools.dbf"
to "/vo3/orabeta6/oradata/orabeta6/tools01.dbf"
tag "org_tools";
release channel dev1;
}  


-- archived logs

create script beta_arch_full {  
allocate channel dev1 type disk;
allocate channel dev2 type disk;
backup full filesperset 10  
(archivelog all delete input
format '/vo3/orabeta6/backup/beta_arch.%s_%p') ;
release channel dev1;
release channel dev2;
}  

-- backup to tape

run {
   allocate channel t1 type 'sbt_tape';
     backup
     format 'dbfull_sunday_s%s_t%t'
     tag 'Sunday full backup'
     (database);
   }

라. Restore

- Backup 으로 부터 원래 위치로 복원

- Archive log file 은 manual 하게 restore 할 수도 있고, 필요하다면
recovery 시 자동으로 restore 된다.

restore (archivelog all| like <filename | <archivelog range>);

- restore 명령
database : restore (database);
tablespace : restore (tablespace <name>,...,<name>);
datafile : restore (datafile <name>,...,<name>);
control file : restore control file to location;

- recovery 시에 database 는 어떤 상태에 있어야 하는가 ?
1) control file restore - not mount
        SVRMGRL> startup nomount

2) whole database, or system tablespace - not open
        SVRMGRL> startup mount

3) tablespace or datafile - open but tablespace or datafile offline
        SVRMGRL> alter tablespace user_data offline temporary;
        SVRMGRL> alter database datafile '/oracle/file/user_data1.dbf'                 offline;


마, Recovery

- Recoervy 는 file restore 후의 과정이다.

1) Archive log mode : complete recovery, incomplete recovery 가 가능하다        
2) No archive log mode : consistent whole database backup 으로 부터
   restore 하는 것이 유일한 option 이다.

- whole database recovery 의 예

svrmgrl
connect internal
shutdown abort
startup mount
-------------------------------------------------------------------
rman target \"system/manager\"  rcvcat \"rman/rman@orabeta1\"

run {
allocate channel dev1 type disk;
allocate channel dev2 type disk;
restore database;
recover database;
release channel dev1;
release channel dev2;
}

or

run {
allocate channel dev1 type disk;
allocate channel dev2 type disk;
restore tablespace 'SYSTEM';
restore tablespace 'USERS';
recover tablespace 'SYSTEM';
recover tablespace 'USERS';
sql "alter database open ";
release channel dev1;
release channel dev2;
}

- datafile 하나가 사용할 수 없을 경우의 recovery
가정) full backup set 이 있을 경우

ORA-01157: cannot identify data file 3 - file not found
ORA-01110: data file 3: '/user7/ora8/oradata/ORA8/temp01.dbf'

SVRMGR> startup mount

rman target \"system/manager\"  rcvcat \"rman/rman@orabeta1\"
RMAN> run {
allocate channel dev1 type disk;
restore database;
recover database;
release channel dev1;
};

Posted by 몰라욧