상세 컨텐츠

본문 제목

2024년 1월 24일 1교시 RMAN의 개념, RMAN을 이용한 백업 및 리커버리

오라클 백업 리커버리

by 병아리 엔지니어 2024. 1. 24. 10:35

본문

 

2024년 1월 24일 1교시 퍼티 창.txt
0.01MB

 

★ Recovery Manager

 

- RMAN (Recovery Manager, a.k.a. RMAN) 은 오라클 데이터베이스에서 백업, 복구 작업을 관리하는 데 사용하는

  오라클 유틸리티이다.

- RMAN 은 운영체제와는 독립적인, 강력한 명령 언어를 사용한다.

 

1. 백업 대상

① 디스크 디렉토리

② 미디어 매니지먼트 라이브러리 media management librarry (테이프 장치)

③ 플래시 리커버리 에어리어 Flash Recovery Area (= Fast Recovery Area) 를 사용

    - FRA: 백업과 복구 및 flashback database 를 위해 마련된 디스크 영역, RMAN 을 이용한 백업의 destination

    - 파일은 필요에 따라 자동으로 보관 및 삭제된다.

 

① (QUESTION. 이게 뭔 소리여? 백업 대상이 디스크 디렉토리?... 나 이거 이해가 안가...

      아. 디스크에 있는 파일들, 그러니까 데이터파일, 컨트롤파일, 리두로그 파일을 백업한다는 뜻인가?)

     (ANSWER. 그냥 외워)

② (QUESTION. 이건 또 뭔 소리야? 미디어 매니지먼트 라이브러리가 뭔데?

      내가 아는 라이브러리는 라이브러리 캐시밖에 없어...)

      (ANSWER. 그냥 외워!)

③  (QUESTION. 그리고 테이프 장치는 또 뭐야? 내가 아는 테이프는 그 상자에 붙이는 테이프밖에 없다고...)

      (ANSWER. 테이프 장치 = 하나의 저장 디스크, 그냥 외워)

 

SYS@ora11g> show parameter db_recovery_file_dest

플래시 리커버리 에어리어 (패스트 리커버리 에어리어) 위치 보기

위치: /u01/app/oracle/fast_recovery_area

 

 

SYS@ora11g> show parameter db_recovery_file_dest_size

플래시 리커버리 에어리어 (패스트 리커버리 에어리어) 크기 보기

근데 어차피 크기 위에 파라미터 확인했을 때 다 나와있었어... 따로 안봐도 될 것 같아...

 

 

플래시 리커버리 에어리어의 위치와 크기는 DB 생성시에 결정된다.

 

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

 

리두 정보 확인하기

SYS@ora11g> select * from v$log;

 

 

근데 이거 말고

 

select a.group#, b.sequence#, a.member, b.bytes/1024/1024MB, b.archived, b.status
from v$logfile a, v$log b
where a.group# = b.group#
order by 1;

 

이걸로 보는 게 훨씬 낫네...

커런트한 리두 그룹 2번, 시퀀스 번호 5번

나머지는 인액티브 상태

 

 

 

(퍼티 102 창에서)

1. rman 프로그램 띄우기

 

SYS@ora11g> !

OS 로 나가서

 

[oracle@oracle ~]$ rman target /

rman target / 명령어를 수행하면

 

RMAN>

RMAN 이 뜬다.

 

2. 여러 가지 확인 작업

 

RMAN> report schema;

현재 ora11g 에 생성되어 있는 테이블스페이스와, 그 각각의 테이블스페이스에 속한 데이터파일 및 그 크기 보기

 

 

RMAN 에서의 필수 백업 대상 : 컨트롤파일, 데이터파일

(보통 백업 때와 똑같다. 리두는 필수 아님)

 

RMAN> list backup;
백업받은 것이 있는지 확인하기:

specification does not match any backup in the repository

하나도 없다고 나온다.

 

RMAN> report need backup;

백업이 필요한 파일들 보기 (한번도 백업을 받지 않은 상태에서 해야 보여준다.

백업을 받은 상태에서 저 명령어를 수행하면 아무것도 안보여준다)

 

RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
Report of files with less than 1 redundant backups
File #bkps Name
---- ----- -----------------------------------------------------
1    0     /u01/app/oracle/oradata/ora11g/system01.dbf
2    0     /u01/app/oracle/oradata/ora11g/sysaux01.dbf
4    0     /u01/app/oracle/oradata/ora11g/users01.dbf
5    0     /u01/app/oracle/oradata/ora11g/example01.dbf
6    0     /u01/app/oracle/oradata/ora11g/undotbs01.dbf

 

RMAN> show all;

환경 보기

뭔가 기~~~~~인 내용이 나오는데 그 중에서

 

CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default

5번째 줄 : 컨트롤파일을 자동 백업 설정할지 안할지에 대한 문장인데

지금 OFF 로 되어 있다.

(OFF: 수동, ON: 자동 - 지금은 컨트롤파일을 자동 백업 안한다는 뜻,

그렇지만 ON 으로 바꿔 놓는 것 즉 컨트롤파일을 자동으로 백업하도록 설정해놓는 것을

선생님은 추천하심)

 

RMAN> configure controlfile autobackup ON;

컨트롤파일 자동 백업 설정 ON 으로 바꾸기:

이렇게 하면 RMAN 을 통해서 백업할 때마다 컨트롤파일을 자동으로 백업받게 된다.

 

그리고 RMAN 을 통해서 백업하면: 백업파일은 기본적으로

/u01/app/oracle/fast_recovery_area/ORA11G 이라 물리적 위치에 저장된다.

 

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored

 

컨트롤파일 자동 백업 설정 완료

 

다시 RMAN> show all;

로 확인해보면:

다섯번째 줄이 CONFIGURE CONTROLFILE AUTOBACKUP ON; 으로 바뀌어 있다.

 

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

 

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default

6번째 줄: 컨트롤파일 백업시에 백업파일 이름 설정에 관한 내용이 나와 있다.

 

%F = c-DBID-YYYYMMDD-QQ

QQ: 16진수, QQ 는 00으로 시작하고 최대값이 FF 인 16진수 시퀀스이다.

QQ 가 바뀌면서 %F 값은 절대 중복되지 않는다.

이런 식으로 컨트롤파일의 백업파일 이름이 만들어진다.

 

(QUESTION. c-DBID-YYYYMMDD-QQ 이런 이름의 백업파일이 만들어진다고?

이건 어디가면 볼 수 있어? 난 이런 거 없던데...

난 /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_24 에서

o1_mf_s_1159093340_lv0slfbg_.bkp 이런 것밖에 못봤는데... YYYYMMDD 같은 거 1도 없었어...

저기 말고 다른 데 만들어졌는데 내가 못 본 거야?)

(ANSWER. 저거 그냥 16진수로 바꾼 거... 그냥 그런가보다 하고 받아들여.

날짜 뒤에 16진수를 붙인 거)

 

(QUESTION. 그리고 최대값이 FF? 최대값이 FF 라는 게 무슨 말이야?)

(ANSWER. 12이면 C, 15이면 F 로 표시된다.)

 

 

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

 

맨 마지막 줄:  

CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0.4/db_1/dbs/snapcf_ora11g.f'; # default

 

컨트롤파일을 백업하고 있는 도중에 control file 의 내용이 변경된다면 - 백업 전과 백업 후의 내용이 달라지게 된다. 그런 문제가 발생하지 않도록, 백업하고 있는 도중에 백업받던 컨트롤파일의 스냅샷을 생성하고 백업 후에 동기화시켜서 문제를 해결한다.

 

백업받던 도중에 scn 번호가 100번이었는데 체크포인트가 발생 : 컨트롤파일에 써야 한다.

그런데 컨트롤파일은 백업 중에 쓸 수 없다 - 그래서 일단은 스냅샷을 찍어놓고

백업 후에 스냅샷의 내용을 컨트롤파일에 쓴다.

(QUESTION. 스냅샷이 뭐야?... 내가 아는 스냅샷은 스냅샷 투 올드 에러밖에 없어...

 long query 문 던질 때 뜨는 그거...)

(ANSWER. 아직 안배움, 그런데 일종의 백업의 종류 같은 거라고 보면 된다.)

(QUESTION. 스냅샷은 SCN 번호가 바뀔 때마다 찍어? 백업이 다 끝날 때까지?

그래서 그 찍어놓은 것들을 컨트롤파일에 기록하는 거야?

리두로그 파일로 하나하나 적용해서 리커버리할 때 마냥 첫번째 거 적용하고 두번째 거 적용하고...

하나하나씩 차례대로 적용하는 그런 식이야?)

(ANSWER. 한 번만 찍는 거야...)

 

아무튼 저 맨 마지막 줄은 디폴트인 채로 건드리지 말고 그대로 놔두기

 

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

 

3. 백업

 

RMAN> backup database;

일관성없는 백업 (핫 백업) 받기:

백업 대상 파일들을 지가 알아서 찾아서 백업한다.

지금 백업은 PGA 메모리에서 하는 중인데, PGA 메모리가 부족하면 LP 에서 메모리를 가져다 쓰고

LP 메모리가 부족하면 ShP 에서 메모리를 가져다 쓴다.

 

결과화면 1.

#########################################################################################

channel ORA_DISK_1: starting piece 1 at 24-JAN-24
channel ORA_DISK_1: finished piece 1 at 24-JAN-24
piece handle=/u01/app/oracle/fast_recovery_area/ORA11G/backupset/2024_01_24/o1_mf_nnndf_TAG20240124T102114_lv0sjc3c_.bkp tag=TAG20240124T102114 comment=NONE

(/u01/app/oracle/fast_recovery_area/ORA11G/backupset/ 백업본이 저장되는 주소)

#########################################################################################

 

RMAN 백업에서는 비어있는 블록들은 가져오지 않는다. 사용한 블록들만 뽑아내서 가져온다.

(와우! 공간 낭비할 일 없을 듯!)

기존의 copy 방식에서는 비어있는 블록들도 가져온다.

(RMAN 이 훨씬 스마트하네...)

 

결과화면 2.

#########################################################################################

Starting Control File and SPFILE Autobackup at 24-JAN-24
piece handle=/u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_24/o1_mf_s_1159093340_lv0slfbg_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 24-JAN-24

컨트롤파일과 spfile도 같이 받아짐 (DB 를 pfile 로 띄운 경우 spfile 은 받아지지 않는다)

#########################################################################################

 

4. (또) 여러가지 확인 작업

 

RMAN> list backup;
백업받은 것이 있는지 확인하기

 

 

  List of Datafiles in backup set 1
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1       Full 2079021    24-JAN-24 /u01/app/oracle/oradata/ora11g/system01.dbf

 

  Control File Included: Ckp SCN: 2079062      Ckp time: 24-JAN-24

 

백업 당시의 SCN 번호와 컨트롤파일 백업 당시의 SCN 번호가 다르지만

스냅샷이 있기 때문에 걱정이 없다.

 

RMAN> report need backup;

RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
Report of files with less than 1 redundant backups
File #bkps Name
---- ----- -----------------------------------------------------

 

백업이 필요한 파일들 보기 : 하나도 없다고 나온다.

 

RMAN> exit

RMAN 종료시키기

 

Recovery Manager complete.

 

5. 물리적인 위치로 가서 백업본들이 잘 받아졌는지 확인해보기

 

물리적인 위치:

cd /u01/app/oracle/fast_recovery_area/

 

[oracle@oracle fast_recovery_area]$ ls
ora11g  ORA11G

 

백업본은 ORA11G 폴더에 있다.

 

[oracle@oracle ORA11G]$ ls
archivelog  autobackup  backupset  onlinelog

 

여기서 또 autobackup 폴더로 가고


[oracle@oracle ORA11G]$ cd autobackup


[oracle@oracle autobackup]$ ls
2024_01_24


[oracle@oracle autobackup]$ cd 2024_01_24


[oracle@oracle 2024_01_24]$ ls
o1_mf_s_1159093340_lv0slfbg_.bkp

(QUESTION. 얘는 정체가 뭐야? 일단 너무 길고 이름도 이상해...

맨 끝에 확장자가 .bkp 로 되어 있는 걸 보니 백업파일인가?

근데 왜 YYYYMMDD 가 아니야? 년도는 1도 없고 1159... 이건 그냥 11시 59분이란 소리 같은데?)

(ANSWER. 위에를 봐... 그리고 파일명 별로 안중요하대

그냥 그런가보다 해)

 

잠깐 휴식 후 RMAN 을 가지고 장애 복구를 해보자.

관련글 더보기