BACKRUSH  유닉스명령  다음  자료실  Ascii Table   원격접속  달력,시간   프로세스  
지하철노선   RFC문서   SUN FAQ   SUN FAQ1   C메뉴얼   PHP메뉴얼   너구리   아스키월드 아이피서치

글쓴이: rman Rman 백업세부사항 조회수: 25197


RMAN BACKUP

1. RMAN (Recovery Manager) 개념



- 기존 방식의 백업과 복구는 수행하는 주체가 사람이지만 RMAN 부터는 사람이 RMAN에게 명령을 하고 실제 작업을 수행하는 주체가 RMAN으로 바뀜

- 아주 편리한 유틸리티지만 현실적으로 여러 가지 문제점이나 새로 배워야만 쓸 수 있는 등의 문제점 때문에 널리 사용되지는 않고 있음

- oracle 10g 버전부터 본격적으로 사용되고 있는 ASM (Automatic Storage Management) 기반의 백업 및 복구는 RMAN 밖에 할 수 없음



* RMAN의 주요 장점

- 자주 실행하는 작업을 스크립트로 저장 (Recovery Catalog를 사용할 경우에만 지원)

- 증분 블록 레벨 백업 기능 지원

- 사용되지 않은 블록 건너뛰고 백업 수행

- 백업 수행 중 훼손된 블록 감지



2. RMAN 구성 및 구조



- 관리자가 RMAN 유틸리티에게 백업이나 복구를 명령하면 RMAN 유틸리티는 관리자를 대신하여 대상 서버 (target database)에 접속하여 server process에게 백업을 수행하게 함

- recover catalog server 가 있을 경우 관련 정보를 catalog database 에 저장을 하고 만약 없을 경우에는 target database 의 control file에 기록



- RMAN은 백업 및 복구를 수행할 때 기본적으로 PGA를 사용하며 PGA 공간이 부족할 경우 SGA (large pool, shared pool)을 사용



* RMAN Memory 구조



- RMAN은 백업 받을 때 사용하는 Input buffer 가 있고 백업 피스에(백업 파일) 저장하기 위해서 사용하는 output buffer 가 있음

- data file 별로 input buffer 가 생성. -> input buffer에 data file에서 백업 받아야 할 블록을 가져옴 -> 여러 개의 input buffer 중 하나가 가득 차면 output buffer로 블록을 복사 -> output buffer 에는 여러 data file의 블록이 존재 -> output buffer 가 가득 차게 되면 backup set 에 내려 씀



1) Input Buffer



- 현재 수행하고 있는 백업 작업의 파일의 개수와 용량에 따라 버퍼의 개수와 메모리의 양이 달라짐

- 메모리는 channel 단위로 할당 --> 메모리는 하나의 channel 별로 할당이 됨. --> 여러 channel에서 작업을 한다면 메모리는 각 channel 별로 할당



< 백업파일별로 input buffer의 사용내역과 크기 조회하는 SQL >
2) Output Buffer



- 백업 피스에 내려 쓰이기 전에 사용되는 버퍼

- 출력 장치가 무엇이냐에 따라 작동 방식이 달라짐

- 디스크 : channel 당 4개의 버퍼가 할당. 각 버퍼의 크기는 1m

- 테이프 : 테이프 디바이스의 속도에 따라 달라짐



3. RMAN Packages



- RMAN은 백업작업과 channel을 관리하기 위해서 sys 스키마 소유의 두 개의 패키지를 사용



1) SYS. DBMS_RCVMAN



- 백업과 복구 작업을 수행하기 위해서 control file에 접근해서 관련 정보를 RMAN에게 전달해 주기 위한 패키지

- control file 안의 시간정보와 체크포인트 정보 및 파일의 위치와 파일의 크기 등을 확인하여 작업의 부하와 스케줄 등을 channel 별로 조정



2) SYS. DBMS_BACKUP_RESTORE



- control file에 접근해서 필요한 모든 정보들을 검증하는 역할

- 검증된 정보를 RMAN Server Process 에게 넘겨주면 RMAN Server Process는 recover.bsq 를 기반으로 해서 백업과 복구에 필요한 PL/SQL block을 생성 -> 이렇게 생성된 PL/SQL block이 DBMS_BACKUP_RESTORE 패키치

- 실제 data file, archive log file, control file 백업을 수행하는 실제 패키치



- RMAN 은 DBMS_RCVMAN에서 받은 정보를 가지고 로드 밸런싱이나 channel별 작업을 조정 한 후 DBMS_BACK_RESTORE 패키지를 호출해서 실제 백업 작업을 수행



4. RMAN 작동 원리



User - RMAN - Server Process - PGA



1) rman target / 로 대상 데이터베이스 접속



- RMAN은 서버쪽의 SID를 체크하고 sys 사용자로 로그인 함

- 인스턴스에 접속하기 위해 channel server process를 생성하게 됨(spawn)

- channel server process 의 기본값은 1개

- server process의 메모리인 PGA 할당



2) SYS.DBMS_RCVMAN 패키지 호출



- 대상 데이터베이스의 버전과 전체적인 물리적 구조를 알기 위해 SYS.DBMS_RCVMAN 패키지를 호출

- control file 의 정보를 읽어서 데이터베이스 전체의 파일들에 관한 정보와 체크포인트 정보, 생성 시간 정보, 각 data file의 온라인/오프라인 정보 및 위치 정보들을 모음

- 본격적인 백업작업을 수행하기 전에 백업되는 동안 변경되는 정보들로부터 현재 시점의 정보를 지키기 위해 control file을 스냅샷 해서 보관



3) DBMS_BACKUP_RESTORE



- 정해진 위치에 백업 피스를 만들고 백업파일을 읽어 들이기 위한 입력 버퍼를 생성

- 메모리 할당 작업 후 백업 피스 초기화

- 백업 피스를 저장하기 위해 디스크의 백업 저장 위치에 기본값인 50MB의 공간을 우선 할당(가득 차면 새로이 50MB 확보. 백업 끝나면 남은 공간은 할당 해제)

- 출력버퍼가 가득 차면 출력버퍼의 내용을 백업 피스에 저장



- 모든 백업 파일이 백업 피스에 저장 완료되면 RMAN은 다시 DBMS_BACKUP_RESTORE 패키지를 호출해서 백업 피스의 이름과 시간, 마지막 체크포인트 정보 등을 control file에 기록



5. Recovery Catalog(복구 카탈로그)



- RMAN 사용시에 RMAN으로 백업 복구 작업을 하고 관련 정보를 저장해 두는 저장소

- Recovery Catalog Server가 없을 경우 RMAN은 백업 서버의 control file 에 해당 정보를 저장하게 되고 Recovery catalog server 가 있을 경우 recover catalog 에 정보를 저장



* Recovery Catalog 에 저장되는 정보

1) Data file 및 아카이브 리두 로그 파일의 백업 셋과 copy된 이미지에 대한 정보

2) 백업 대상서버의 물리적인 구조

3) 자주 사용하는 백업 스크립트 (Recovery Catalog Server 를 사용할 경우에만 해당)



- Catalog Server 사용시 접속 방법 : rman / catalog rcuser/rcuser@rcserver

- Catalog Server 사용 안할 경우 접속 방법 : rman target /



* 유닉스 계열에서 rman 실행 시 에러 나는 경우(경로 달라서 생기는 에러 조치법)

root 로 접속하여 cp /home/oracle/product/10g/bin/rman /usr/X11R6/bin 덮어씌움~

[출처] RMAN (Recovery Manager)|작성자 유즈


1. RMAN 을 이용한 Backup 수행


RMAN> backup tablespace example;
-- 자동으로 channel 할당

* backup option
#1 check / nocheck : 불량 block / block 손상 여부 확인 On/Off
#2 max_corrupt : 손상된 block 의 최대 갯수 지정 가능
(200으로 지정했을 경우 200개 이상 손상되면 백업 중단)
#3 validate : 백업 가능 여부 체크 (Info 파일의 정합성 여부 확인)
#4 copies : 백업 파일을 이중으로 생성함
#5 reuse : 동일한 이름의 백업본이 이미 존재하는 경우 덮어쓰기 수행


2. Backup 수행시 고려사항

1) RMAN 수행으로 backup 수행 시 Database 가 Mount 혹은 Open 상태여야 한다.
- Online Backup : Open 상태
- Offline Backup : Mount 상태
- meta 정보를 controlfile 에 기록을 하기 위해서, Controlfile 이 열린 단계가 되어야 함.
-> mount 이상의 단계에서 수행되어야 하는 이유

2) Archive Mode 에 따른 백업
- Nocarchive Log Mode 일 때? Online Backup 이 불가능하기 때문에 반드시 Target DB 를 Mount 상태로
맞춘 후 Backup 수행

- Archive Log Mode 일 때? Online Backup 가능함. 그렇기 때문에 mount / open 단계 양 쪽 다 백업 가능함


3. Channel 병렬도 지정
- default 는 1로 지정되어 있지만, 단기적으로 지정이 가능함

예제) 3개의 Channel 로 Backup을 받고 싶을 때

RMAN> RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE sbt;
ALLOCATE CHANNEL c2 DEVICE TYPE sbt;
ALLOCATE CHANNEL c3 DEVICE TYPE sbt;
BACKUP
INCREMENTAL LEVEL = 0
(DATAFILE 1,4,5 CHANNEL c1)
(DATAFILE 2,3,9 CHANNEL c2)
(DATAFILE 6,7,8 CHANNEL c3);
sql ‘ALTER SYSTEM ARCHIVE LOG CURRENT’;
}

dataFile 을 위의 예제에서 지정해놓은 이유?
-> Datafile 이 1~9까지 있는 경우, Datafile 을 지정하지 않으면 default 설정에 의해
순차적으로 3개의 채널이 1,2,3/4,5,6/7,8,9 나누어 가지게 된다
datafile 의 Size 간의 불균형을 이루는 경우 다중 채널의 효율이 떨어지기 때문에
DBA가 임의로 지정해 줄 수 있다.


4. 압축 백업 (Compresed Backups)
-> 압축 해서 Backup을 받는 경우 용량측면에서는 공간을 적게 차지하는 장점이 있지만,
Restore 할 때 속도가 떨어지는 단점이 있다. (복구 시 압축 푼 후 복구 수행해야 함)

1) 이번 백업 수행 시 압축 백업 수행
RMAN> BACKUP AS
COMPRESSED BACKUPSET DATABASE;

2) default 로 압축 백업 수행
RMAN> CONFIGURE BACKUP TYPE TO
COMPRESSED BACKUPSET;


5. Image Copy 백업 수행
. 보통 기본적으로 backup set 으로 backup 권고됨. (default)
. 단기 / 혹은 configure 설정 가능함

1) 단기적으로 image copy 수행
RMAN> backup as copy tablespace example;

-> [format] 백업 위치 지정
-> [like] archive log file 파일 형식

2) Tag 설정 [Image copy]
. 파일 이름이 의미 없는 문자 열이기 때문에 ADMIN이 이해할 수 있는 논리적인 이름을 붙이는 것
. 물리적인 이름으로는 확인 불가
. Meta 정보 조회 시 물리적인 이름과 함께 조회 가능함
RMAN> BACKUP TAG 'month_full_backup' DATAFILE 1,2,3,4;


6. Archive Log File Backup

. Archive Backup 수행도 RMAN을 통하여 수행 가능함
. 단일 백업 혹은 log sequence # 를 기준으로 다중 백업 가능함

RMAN> BACKUP FORMAT '/disk1/backup/ar_%t_%s_%p' ARCHIVELOG
FROM SEQUENCE=234 DELETE INPUT)
-- sequence : 234 이상의 # 를 가진 backup file 만 backup 가능함
-- delete input : 백업 완료 이후 archive log file 삭제

RMAN> backup database plus archivelog;
-- archive log 파일을 포함한 전체 DB 백업 수행
-- archive log file 은 다른 종류의 파일과 섞여서 백업 파일로 만들어질 수 없음
-- 백업 결과 물 : DB 백업 파일 set + archive log 파일 set


7. 전체 Database + Archive Log file 백업 수행

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
-- RMAN이 지원해줄 수 있는 모든 Data에 대해서 백업을 수행


* 참고 * Backup Type 별 비교

. 상황 : 100MB짜리 Datafile에서 80MB 만 사용하고 있는 경우

1) Image Copy : 1:1 file match가 되므로 100MB 파일 통짜로 cp

2) Backupset
- backup 결과 1개의 파일이 생성됨
- DB 에서는 사용하고 있는 공간에 대해서 highwater marking 을 해 놓는다.
- 사용된 공간 만큼 까지만 Backup set에 기록한다.
-> 공간의 효율성이 좋다

3) Compresed Backup
- 파일 중간 중간에 사용하고 있지 않은 빈 블럭까지 제외하여 백업 수행
- 빈 블럭이 차지하고 있는 공간에 따라 압축도가 달라진다.
- 복구 시 빈 블럭의 위치까지 원복 하기 때문에 Restore 할 경우 속도가 많이 떨어진다.


출처 - http://l0vemode.tistory.com/145



2.rman에서 아카이브 삭제시 문제해결 방법

archive를 수동으로 삭제를 하시는 것인가요?

만약에 수동으로 삭제를 하게 되면 control에 있는 rman 정보들과 physical
한 곳에 있는 archive file이 다르겠습니다.

그러면 crosscheck을 수행해서 physical한 곳의 archive file과 rman정보를
맞추어야 합니다.

RMAN>list archivelog all;

정보로 physical 한 곳의 archive를 확인합니다. 만약 다르다면 crosscheck을
합니다.

테스트>

1. 수동으로 archive삭제
PROD@/data/archive2 $mv 1_172.arc ../archive
PROD@/data/archive2 $mv 1_171.arc ../archive
PROD@/data/archive2 $mv 1_170.arc ../archive

2. archive백업 실패
PROD@/data/archive2 $rman target /

Recovery Manager: Release 9.2.0.7.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database: PROD (DBID=13949627)

RMAN>

RMAN>

RMAN> backup archivelog all;

Starting backup at 14-NOV-06
current log archived
using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=9 devtype=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 11/14/2006 01:28:51
RMAN-06059: expected archived log not found, lost of archived log compromises recoverability
ORA-19625: error identifying file /data/archive/1_1.arc
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
3. list backup 확인
RMAN> list archivelog all;
List of Archived Log Copies
Key Thrd Seq S Low Time Name
----
-
----
308 1 1 A 30-SEP-06 /data/archive/1_1.arc
309 1 2 A 30-SEP-06 /data/archive/1_2.arc
310 1 3 A 30-SEP-06 /data/archive/1_3.arc
311 1 4 A 30-SEP-06 /data/archive/1_4.arc
312 1 5 A 30-SEP-06 /data/archive/1_5.arc
313 1 6 A 30-SEP-06 /data/archive/1_6.arc
314 1 7 A 30-SEP-06 /data/archive/1_7.arc
315 1 8 A 30-SEP-06 /data/archive/1_8.arc
316 1 9 A 30-SEP-06 /data/archive/1_9.arc
317 1 10 A 30-SEP-06 /data/archive/1_10.arc
....
....
303 1 339 A 30-SEP-06 /data/archive/1_339.arc
304 1 340 A 30-SEP-06 /data/archive/1_340.arc
305 1 342 A 30-SEP-06 /data/archive/1_342.arc
306 1 343 A 30-SEP-06 /data/archive/1_343.arc
307 1 344 A 30-SEP-06 /data/archive/1_344.arc

RMAN>

4. crosscheck 수행
RMAN> crosscheck archivelog all;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=9 devtype=DISK

validation failed for archived log
archive log filename=/data/archive/1_1.arc recid=308 stamp=602478075
validation failed for archived log
archive log filename=/data/archive/1_2.arc recid=309 stamp=602478078
validation failed for archived log
archive log filename=/data/archive/1_3.arc recid=310 stamp=602478079
validation failed for archived log
archive log filename=/data/archive/1_343.arc recid=306 stamp=602477610
validation failed for archived log
archive log filename=/data/archive/1_344.arc recid=307 stamp=602477825
Crosschecked 461 objects
5. list backup 확인. 상태만 x로 바뀜
RMAN> list archivelog all;
List of Archived Log Copies
Key Thrd Seq S Low Time Name
----
-
----
308 1 1 X 30-SEP-06 /data/archive/1_1.arc
309 1 2 X 30-SEP-06 /data/archive/1_2.arc
310 1 3 X 30-SEP-06 /data/archive/1_3.arc

6. expire시킴

RMAN> delete expired archivelog all;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=9 devtype=DISK

List of Archived Log Copies
Key Thrd Seq S Low Time Name
----
-
----
308 1 1 X 30-SEP-06 /data/archive/1_1.arc
309 1 2 X 30-SEP-06 /data/archive/1_2.arc
310 1 3 X 30-SEP-06 /data/archive/1_3.arc
311 1 4 X 30-SEP-06 /data/archive/1_4.arc
312 1 5 X 30-SEP-06 /data/archive/1_5.arc
313 1 6 X 30-SEP-06 /data/archive/1_6.arc
314 1 7 X 30-SEP-06 /data/archive/1_7.arc
315 1 8 X 30-SEP-06 /data/archive/1_8.arc
....

Do you really want to delete the above objects (enter YES or NO)? yes
deleted archive log
archive log filename=/data/archive/1_1.arc recid=308 stamp=602478075
deleted archive log
archive log filename=/data/archive/1_2.arc recid=309 stamp=602478078
deleted archive log
archive log filename=/data/archive/1_3.arc recid=310 stamp=602478079
deleted archive log
archive log filename=/data/archive/1_4.arc recid=311 stamp=602478080
....
deleted archive log
archive log filename=/data/archive/1_343.arc recid=306 stamp=602477610
deleted archive log
archive log filename=/data/archive/1_344.arc recid=307 stamp=602477825
Deleted 457 EXPIRED objects
RMAN> list archivelog all;
List of Archived Log Copies
Key Thrd Seq S Low Time Name
----
-
----
477 1 170 A 14-NOV-06 /data/archive/1_170.arc
478 1 171 A 14-NOV-06 /data/archive/1_171.arc
479 1 172 A 14-NOV-06 /data/archive/1_172.arc
480 1 173 A 14-NOV-06 /data/archive/1_173.arc

7. backup 재시도 정상완료
RMAN> backup archivelog all;

Starting backup at 14-NOV-06
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=170 recid=477 stamp=606443504
input archive log thread=1 sequence=171 recid=478 stamp=606443809
input archive log thread=1 sequence=172 recid=479 stamp=606446774
input archive log thread=1 sequence=173 recid=480 stamp=606446929
input archive log thread=1 sequence=174 recid=481 stamp=606447313
channel ORA_DISK_1: starting piece 1 at 14-NOV-06
channel ORA_DISK_1: finished piece 1 at 14-NOV-06
piece handle=/u/ora9i/product/9.2.0/dbs/02i2b9mh_1_1 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 14-NOV-06








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

10g RMAN에서는 따로 catalog database가 필요 없이 local control file을 이용해도
크게 문제가 발생하지 않는듯 하다.


[oracle@localhost ~] $ rman target /

# database에 full backup을 수행한다.
RMAN> BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 0 DATABASE
2 TAG rman_db_full
3 FORMAT '/home/oracle/backup/%d.%T.%u.dbfull.rman';

# level 0 full backup 수행이후의 증분에 대해 incremental backup을 수행한다.
RMAN> BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 DATABASE
2 TAG rman_db_inc
3 FORMAT '/home/oracle/backup/%d.%T.%u.dbinc.rman';

#### archive log를 백업한다.
# 현재의 redolog 파일을 아카이브화 시킨다.
RMAN> SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
# archive log를 백업하고, 원본 archive log는 삭제한다.
RMAN> BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG ALL DELETE INPUT
2 TAG rman_arc
3 FORMAT '/home/oracle/backup/%d.%T.%u.arc.rman';

# 컨트롤 파일 백업.
# 컨트롤 파일이 없다면 컨트롤 파일 장애시 복구 할 수 없을 것이다.
RMAN> BACKUP AS COMPRESSED BACKUPSET CURRENT CONTROLFILE
2 TAG rman_ctl
3 FORMAT '/home/oracle/backup/%d.%T.%u.ctl.rman';

# 과거 백업본중 만료된 백업본 삭제.
RMAN> DELETE NOPROMPT EXPIRED BACKUP;
RMAN> DELETE NOPROMPT EXPIRED COPY;

# 과거 백업본 중 지금의 백업에 의해 필요없어진 백업본 삭제.
RMAN> DELETE NOPROMPT OBSOLETE;

# 실제 archivelog 목록과 DB상에 기록된 archivelog 목록을 비교 검사한다.
RMAN> CROSSCHECK ARCHIVELOG ALL;

# archivelog를 삭제한다.
# NOPROMPT 옵션이 있을경우 Y/N를 묻지 않는다.
RMAN> DELETE [NOPROMPT] ARCHIVELOG ALL;

////////////////////////// 참고 (백업결과 확인) ////////////////////////////////////////

list backup summary;
list backupset;
list backup of controlfile;
///////////////////////////////////////////////////////////////////////////////////

관련글 : 없음 글쓴시간 : 2021/10/27 19:44 from 112.150.54.78

  목록보기 새글 쓰기 지우기 응답글 쓰기 글 수정 Rman 복구  
BACKRUSH  유닉스명령  다음  자료실  Ascii Table   원격접속  달력,시간   프로세스  
지하철노선   RFC문서   SUN FAQ   SUN FAQ1   C메뉴얼   PHP메뉴얼   너구리   아스키월드 아이피서치