Oracle/RMAN

백업&복구 16번째(RMAN) ; RMAN설명, RMAN으로 백업하기, 백업된 set 관리하기

에몽이ㅋ 2012. 2. 25. 21:56
RMAN : Recovery Manager
; 8i때부터 생긴 유틸리티이고, 10g부터 대폭 개선이 된 기능입니다.

주요장점
1. 증분블럭백업가능 ; 과거에 백업받은 자료를 비교해서 그 이후에 추가된 자료만 백업(저장공간 대폭감소)
2. 백업시 자료가 있는 블록만 백업
 
(datafile들의 합이 모두 5G라도 사용하는 블럭만 추려서 백업합니다.(백업하면 5G보다는 당연히 적게 되겠죠?)

3. DB가 File System말고, ASM으로 운영될 시 백업은 무조건 RMAN으로밖에 하지 못함

RMAN 구성도


RMAN Memory구조 : 기본적으로 PGA사용하고, 부족하면 SGA(Large Pool, Shared Pool)를 사용합니다.

  --> 위와같은 방식으로 백업파일이 저장이 되기때문에 Control file이나 Catalog안에 들어있는 정보들이 필수로 필요합니다.

Recovery Catalog (복구카탈로그)
; RMAN에서 작업한 내역을 저장하는 공간입니다. user를 하나 생성해서 catalog를 사용하는 tablespace를 할당하고, RMAN으로 해당 유저에 접속해서 작업을 하게되면, 해당 user에 자동으로 view나 table들이 생성되어 백업내역이나, RMAN관련정보들을 조회해볼 수 있습니다.
보통은 catalog를 사용하지 않고, 자신의 DB내에 RMAN정보를 저장(control file에)합니다.

Recovery Catalog 구성 및 catalog를 이용한 rman접속http://dinggur.tistory.com/178 보세요 ^^;

RMAN 사용하기 : rman target /  (해당 명령어로 접속시 catalog사용하지 않습니다)
RMAN Default값들 보기 : show all;
RMAN> show all;
using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name TESTDB are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default  << 백업시 몇개의 채널을 할당할지 정합니다.
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/app/rman/%U_%T.rman';  << 백업시 어떤 형태로 저장할지 지정합니다.
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/app/oracle/product/11g/dbs/snapcf_testdb.f'; # default


현재 DB의 상태보기(어떤 Datafile, Tablespace가 있는지)
report schema;
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    710      SYSTEM               ***     /app/oracle/oradata/testdb/system01.dbf
2    520      SYSAUX               ***     /app/oracle/oradata/testdb/sysaux01.dbf
3    100      UNDOTBS1             ***     /app/oracle/oradata/testdb/undotbs01.dbf
4    12       USERS                ***     /app/oracle/oradata/testdb/users01.dbf
5    343      EXAMPLE              ***     /app/oracle/oradata/testdb/example01.dbf
6    10       KOO                  ***     /app/oracle/oradata/testdb/koo01.dbf
7    5        TEST                 ***     /app/oracle/oradata/testdb/test01.dbf
8    10       FBDA                 ***     /app/oracle/oradata/testdb/fbda01.dbf
9    10       KOO                  ***     /app/oracle/oradata/testdb/koo02.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    29       TEMP                 29          /app/oracle/oradata/testdb/temp01.dbf
2    10       SCOTT_TEMP           10          /app/oracle/oradata/testdb/scott_temp.dbf


전체 데이터베이스 백업 
RMAN> backup database;

전체 데이터베이스 압축해서 백업
(as compressed backupset은 하나의 옵션으로 다른 백업에도 다 사용가능합니다.) 

RMAN> backup as compressed backupset database;  

tablespace 단위 백업 
RMAN> backup tablespace 'KOO', 'TEST';

datafile 단위 백업(숫자는 위 report schema; 화면에서 datafile 번호입니다.) 
RMAN> backup datafile 6,7;

control file 백업
RMAN> backup current controlfile;
(전체 데이터베이스 압축시나 configure controlfile autobackup on; 되어있으면 따로 백업 받지 않아도
아무 백업이나 수행하면 자동으로 백업받습니다.)


백업된 파일들의 list와 정보보기
RMAN> list backupset;
(특정 tbs의 백업정보를 보고 싶으면 of tablespace 'KOO', 'TEST';
control file의 백업정보를 보고 싶으면 of controlfile; 
을 추가하면 됩니다.)
RMAN> list backupset;


List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
4       Incr 0  295.57M    DISK        00:01:01     2012-02-24:11:37:45
        BP Key: 4   Status: AVAILABLE  Compressed: YES  Tag: TAG20120224T113643
        Piece Name: /app/rman/06n4492c_1_1_20120224.rman
  List of Datafiles in backup set 4
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  1    0  Incr 878154     2012-02-24:11:36:44 /app/oracle/oradata/testdb/system01.dbf
  2    0  Incr 878154     2012-02-24:11:36:44 /app/oracle/oradata/testdb/sysaux01.dbf
  3    0  Incr 878154     2012-02-24:11:36:44 /app/oracle/oradata/testdb/undotbs01.dbf
  4    0  Incr 878154     2012-02-24:11:36:44 /app/oracle/oradata/testdb/users01.dbf

.....생략.....

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
9       Full    2.49M      DISK        00:00:00     2012-02-26:11:03:34
        BP Key: 9   Status: AVAILABLE  Compressed: NO  Tag: TAG20120226T110334
        Piece Name: /app/rman/0bn49fs6_1_1_20120226.rman
  List of Datafiles in backup set 9
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  6       Full 921697     2012-02-26:11:03:34 /app/oracle/oradata/testdb/koo01.dbf
  7       Full 921697     2012-02-26:11:03:34 /app/oracle/oradata/testdb/test01.dbf


백업set지우기
RMAN> delete backupset 9;
(숫자는 list backupset;해서 BS Key번호입니다., 숫자를 쓰지 않으면 모든 백업set를 지웁니다.)

전체 backupset 과 target 서버에 저장된 backupset의 정보 비교하기
RMAN> crosscheck backupset;
RMAN> crosscheck backupset;

using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=71 device type=DISK
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/app/rman/06n4492c_1_1_20120224.rman RECID=4 STAMP=776086604
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/app/rman/07n4494d_1_1_20120224.rman RECID=5 STAMP=776086670
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/app/rman/08n49fea_1_1_20120226.rman RECID=6 STAMP=776256971
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/app/rman/09n49fn6_1_1_20120226.rman RECID=7 STAMP=776257255
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/app/rman/0an49fr9_1_1_20120226.rman RECID=8 STAMP=776257386
Crosschecked 5 objects


위의 EXPIRED(실제파일은 없지만 control file에는 저장된 RMAN정보)된 정보 삭제해주기
RMAN> delete expired backupset;
RMAN> delete expired backupset;

using channel ORA_DISK_1

List of Backup Pieces
BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
8       8       1   1   EXPIRED     DISK        /app/rman/0an49fr9_1_1_20120226.rman

Do you really want to delete the above objects (enter YES or NO)? yes
deleted backup piece
backup piece handle=/app/rman/0an49fr9_1_1_20120226.rman RECID=8 STAMP=776257386
Deleted 1 EXPIRED objects


수동으로 백업받은 파일을 RMAN에 등록하기(rman에서 관리하기 위해서)
RMAN> catalog datafilecopy '/backup/example01.dbf';  
(RMAN에서 정보삭제하고 싶으면
change datafilecopy '/backup/example01.dbf' uncatalog;  )