본문 바로가기

IT관련

오라클 RMAN 백업/복구 관련 주요 커맨드 모음, 개괄적인 설명

Oracle 백업/복구 툴인 RMAN (Recovery Manager) 에 대한 개괄적인 설명을 유튜브 영상으로 만들었습니다.

 

 

 

그리고, 관련해서 주요 RMAN 커맨드를 아래와 같이 모아서 정리했습니다.

 

    * === 백업 세트형식의 백업 ===
      RMAN> backup database;
      RMAN> backup database format '/u02/backup/%U';
      RMAN> backup as compressed backupset database;     -- 압축
      RMAN> backup tablespace USERS;
      RMAN> backup datafile 1,2;
      RMAN> backup archivelog all;

    * === 이미지 카피형식의 백업 ===
      RMAN> backup as copy database;
      RMAN> backup as copy database format '/u02/backup/%U';
      RMAN> backup as copy datafile 1,2;
      -- 아카이브도 as copy 로 백업 가능
      RMAN> backup as copy archivelog from sequence 71 until sequence 73;
      RMAN> backup as copy archivelog from sequence 71 until sequence 73 format '/u02/backup/%h_%e_resetlogs.arc';

    * === 증분 백업 ===
      RMAN> backup incremental level 0 database;
      RMAN> backup as copy incremental level 0 database;
            -- 첫회는 레벨0 으로 해야 함. but, 레벨0의 이미지 복사본이 없으면 자동으로 생성
      RMAN> backup incremental level 1 database;
      RMAN> backup incremental level 1 cumulative database;
      RMAN> backup incremental level 1 for recover of copy  with tag 'incr_update' database;

    * === 스크립트 형태 백업 ===
      RMAN> run {
                allocate channel d1 type disk;
                allocate channel d2 type disk;
                backup format '/u02/backups/%U' database plus archivelog;
                release channel d1;
                release channel d2;
            }

    * === Target DB에서 Auxiliary DB로 데이타파일 복사 ===
      $ rman target sys/oracle@orclprmy auxiliary sys/oracle@orclsby1
      RMAN> report schema;
      RMAN> backup as copy reuse datafile 5 auxiliary format '+DATA';
      - 아래에 해당되는 커맨드를 rman으로 한번에 실행한 경우임
      1. "alter tablespace test begin backup;" 실행
      2. OS copy 명령에 의해 백업
      3. "alter tablespace test end backup;" 실행
      4. FTP 등을 이용하여 Standby 로 전송


    * === show all; ===
      CONFIGURE BACKUP OPTIMIZATION OFF; # default
         -- ON: 이미 백업된 동일한(checkpoint SCN등) datafile, archive log, backup set이 있다면 skip

      CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
         -- RMAN의 BACKUP이나 COPY 명령등의 수행후 자동으로 control file backup을 수행
         -- spfile은 컨트롤파일 백업시 같은 파일에 함께 자동 백업됨. 별도 파일 없음.
      CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
         -- 디폴트로 $ORACLE_HOME/dbs 디렉토리에 백업됨.
         -- 바꾸려면, RMAN> configure controlfile autobackup format for device type disk to '/u02/backup/%F';

      CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/data/orabackup/%U';
         -- 백업파일저장 경로 설정
         -- channel 1,2 device 별로 따로 format(위치)을 지정할 수도 있음. Disk에서는 위치를 달리하여 I/O 분산.
         -- backupset 파일 이름 형식 (FORMAT)
            %c : backup piece 의 copy number
            %p : backup piece number, 1부터 시작하고 1씩 증가
            %s : backup set number, control file내의 counter, set이 생성될때 마다 증가
            %d : database name
            %n : database name, padded on the right with x char to total length oh 8 char
            %t : fixed reference time 이후 경과한 시간(초)을 4byte로 나타낸 값
            %u : backup set 번호와 생성시간에 대한 단축 표기법, 8자 이름 지정
            %U : %u_%p_%c (default)

      CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
         -- Disk로 백업, 테입은 sbt

      CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;
         -- 특정 device에 automatic channel allocation 될때 channel의 갯수를 지정

      CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
         -- datafile, control file의 backup set의 copy본 갯수를 지정
      CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
         -- archivelog file의 backup set의 copy본 갯수를 지정

      CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE; # default
         -- 압축 옵션으로 basic만 무료이고, low, medium, high 의 경우 ACO 옵션 구매가 필요함.
         -- 변경시, RMAN> configure compression algorithm 'medium';
         --         비압축  4.0G   279s
         --         basic   636M   419s
         --         low     797M   189s
         --         medium  674M   238s
         --         high    485M  3129s

      CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
      CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
         -- 사용할 수 있는 알고리즘은 아래 SQL로 조회 가능
         -- SQL> select algorithm_name from V$RMAN_ENCRYPTION_ALGORITHMS;

      CONFIGURE MAXSETSIZE TO UNLIMITED; # default
         -- backupset의 maximum size를 설정한다.
         -- 바꾸려면, RMAN> configure maxsetsize to 10G;

      CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
         -- 유지할 백업본의 갯수를 설정
         -- 동일한 데이타파일에 대해 백업본이 1개를 넘으면 최신 1개를 제외한 나머지는 obsolete로 인식.
         -- obsolete로 인식되는 백업본은 delete obsolete; 커맨드로 제거됨.

      CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
         -- 이 값이 0 이 아닌 경우, 해당 기간만큼의 RMAN Output Log가 RC_RMAN_OUTPUT, V$RMAN_OUTPUT 뷰에 기록됨.
         -- 기록을 끄려면, RMAN> configure rman output to keep for 0 days;

      CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
         -- flash recovery area의 archive log에 대한 삭제 여부를 설정 (ADG에서 사용)
      CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/12.2.0/dbhome_1/dbs/snapcf_ORA12R2.f'; # default
         -- RMAN은 resync시 생성되는 임시 snapshot control file의 이름을 지정


    * === 셸커맨드 실행 ===
      RMAN> host 'date';

    * === 백업 정보의 표시 ===
      > show all;                 -- 파라메타 설정정보 확인
      > report schema;            -- 백업 대상 DB의 TS, datafile 정보 확인
      > list backup;              -- 백업셋 백업인 경우
      > list copy;                -- 이미지 백업인 경우
      > list archivelog all;
      > list archivelog until time 'SYSDATE -7';
      > list backup of controlfile;
      > list backup of spfile;
      > list backup summary;      -- summary 로 볼때
      > list failure;             -- 데이터·리커버리·어드바이저에 의해서 기록된 장애 표시
      > report need backup;       -- 백업이 필요한 데이터 파일을 표시
      > report unrecoverable;     -- nologging 작업 등으로 백업이 필요한 걸 찾아줌

    * === 삭제 가능한(obsolete, expired) 백업파일 삭제 ===
      -- obsolete 는 백업을 받아서 더이상 필요 없는 것. expired 는 os상에서 지워진 것.
      > report obsolete;
      > delete obsolete;          -- 불필요한 백업의 삭제
      > delete noprompt obsolete; -- 확인없이 바로 삭제
      > crosscheck backup;
      > crosscheck copy;
      > delete expired backup;
      > delete expired copy;
      > crosscheck archivelog all;
      > delete noprompt expired archivelog all;

    * === archive log 파일 삭제 ===
      > delete noprompt archivelog  until time 'sysdate-14' all;
      > delete noprompt archivelog  sequence 1 thread 2;        -- RAC는 thread까지 필요
      > delete noprompt archivelog  like '%2013_10_29%';
      > crosscheck archivelog all;
      > delete noprompt expired archivelog all;

    * === 백업받고, 백업된 모든 archive log 삭제 ===
      > backup archivelog all delete input;



    * === control file 복구 ===
      RMAN> restore controlfile to '/u02/ctrl_gom1';

    * === spfile 복구 ===
      RMAN> restore spfile to '/u02/spfile_gom1';
      RMAN> restore spfile to pfile '/u02/init_gom1.ora';
            -- spfile은 컨트롤파일 백업시 같은 파일에 함께 자동 백업됨. 별도 파일 없음.

    * === archive 복구 ===
      RMAN> restore archivelog from logseq 65 until logseq 67;

    * === 데이타베이스 전체의 restore, recover ===
      RMAN> shutdown;
      RMAN> startup mount;
      RMAN> restore database;
      RMAN> recover database;
      RMAN> alter database open;

    * === 테이블스페이스 단위의 restore, recover ===
      RMAN> sql "alter tablespace users offline";
      RMAN> sql "alter tablespace data offline";
      RMAN> restore tablespace USERS, DATA;
      RMAN> recover tablespace USERS, DATA;
      RMAN> sql "alter tablespace users online";
      RMAN> sql "alter tablespace data online";
            -- datafile 에대한 restore, recover 도 같은 명령을 실행

    * === 블록 단위의 리커버리(RECOVER … BLOCK) ===
      -- 데이터 블록의 장애 위치의 확인
      SQL> select * from v$database_block_corruption;
      -- 블록·미디어·리커버리의 실행
      RMAN> recover datafile 6 block 108;
      -- v$database_block_corruption 에 기록된 모든 블록을 리커버리
      RMAN> recover corruption list;