온라인 핫 백업 (BEGIN BACKUP, END BACKUP)
백업 모드에서 OS 명령으로 파일을 복사하는 핫 백업, 분할 블록과 리두의 관계 및 복구 절차
#핵심 요약
핫 백업은 데이터베이스를 연 채 서비스하면서 데이터 파일을 백업 모드로 바꾸고 cp로 복사하는 방식임
ARCHIVELOG 모드가 필요함
백업 모드에서는 블록을 바꾸기 전에 블록 전체 이미지를 리두에 기록함
그래서 복사 중 변경 전후 내용이 섞인 분할 블록(split block)이 생겨도 리두로 복구할 수 있음
백업 모드에서는 리두가 늘어나므로 복사가 끝나면 바로 END BACKUP으로 해제함
핫 백업은 복원만으로 쓸 수 있는 상태가 되지 않고, 아카이브 로그로 복구해야 함
#개념과 동작 원리
열려 있는 데이터베이스에서 온라인 읽기, 쓰기 테이블스페이스의 사용자 관리 백업을 받으려면 백업 모드로 둬야 함
백업 모드에서는 바뀐 블록 전체를 리두 스트림에 복사함
V$BACKUP.STATUS가 ACTIVE면 백업 모드, NOT ACTIVE면 아님
백업 모드인 데이터 파일을 열려고 하면 복구 명령을 실행하거나 백업 모드를 해제할 때까지 열지 않음(ORA-01113: file ... needs media recovery)
END BACKUP을 잊은 채 장애가 났다면, MOUNT 상태에서 ALTER DATABASE END BACKUP으로 모든 파일의 백업 모드를 한 번에 해제할 수 있음
이 문장은 MOUNT 상태에서만 씀
백업에서 파일을 복원했다면 이 방법을 쓰지 말고 RECOVER로 처리함
읽기 전용 테이블스페이스는 백업 모드 없이 그냥 복사함
실습의 원리 정리:
| BEGIN BACKUP이 하는 일 | 목적 |
|---|---|
| 대상 파일 체크포인트 | 바뀐 버퍼를 데이터 파일에 기록 |
| 헤더의 체크포인트 SCN 고정 | 복구 시작 기준점 유지 |
| 백업 모드에서 블록을 처음 바꿀 때 전체 이미지 기록 | 복사본의 깨진 블록을 리두로 복구 |
데이터 파일 쓰기는 백업 모드에서도 계속됨
| 파일 | 백업 방법 |
|---|---|
| 데이터 파일 | BEGIN BACKUP, 운영체제 복사, END BACKUP |
| 컨트롤 파일 | ALTER DATABASE BACKUP CONTROLFILE TO '<경로>' |
| 아카이브 리두 로그 | 백업 중 생긴 리두까지 아카이브한 뒤 필요한 로그 복사 |
| 온라인 리두 로그 | 복사하지 않고 다중화로 보호 |
#필수 명령어 또는 SQL
#ARCHIVELOG 모드 확인과 전환
ARCHIVE LOG LIST
SELECT name, log_mode FROM v$database;SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;결과 해석: 개별 실행 출력은 기재 없음
#데이터 파일 전체 핫 백업
ALTER DATABASE BEGIN BACKUP;SELECT status, COUNT(*) FROM v$backup GROUP BY status;
SELECT file#, status, change# FROM v$backup;결과 해석:
설명: 모두 ACTIVE여야 함
ACTIVE가 아닌 파일은 파일 번호로 테이블스페이스를 찾아 확인함
mkdir -p <BACKUP_DIR>
cp <DATAFILE_DIR>/*.dbf <BACKUP_DIR>/결과 해석:
실습에서는 데이터 파일이 세 디렉터리에 나뉘어 있어 cp를 세 번 실행했음
데이터 파일 위치를 DBA_DATA_FILES로 확인하고 모두 복사함
ALTER DATABASE END BACKUP;
ALTER DATABASE BACKUP CONTROLFILE TO '<BACKUP_DIR>/control01.bak';
ALTER SYSTEM ARCHIVE LOG CURRENT;cp <ARCH_DIR>/*.arc <BACKUP_DIR>/결과 해석:
설명: 데이터 파일, 컨트롤 파일, 아카이브 로그 세 가지를 함께 보관해야 핫 백업으로 복구할 수 있음END BACKUP 뒤 V$BACKUP은 모두 NOT ACTIVE임
#복원과 복구
| 구분 | 복원(Restore) | 복구(Recover) |
|---|---|---|
| 작업 | 백업 파일을 필요한 위치로 복사 | 리두를 적용해 일관성과 변경 내용 복구 |
| 명령 | 운영체제 cp |
Oracle RECOVER |
| 재료 | 백업 데이터 파일 | 아카이브 로그, 필요하면 온라인 리두 |
SELECT r.file#, d.name FROM v$recover_file r, v$datafile d WHERE r.file# = d.file#;
SELECT * FROM v$recover_file;
SELECT name FROM v$datafile WHERE file# = <FILE_NO>;cp <BACKUP_DIR>/<FILE_NAME>.dbf <DATAFILE_DIR>/<FILE_NAME>.dbfRECOVER DATAFILE <FILE_NO>;
ALTER DATABASE OPEN;결과 해석:
실습 기록: V$RECOVER_FILE의 오류 열에 FILE NOT FOUND가 보였음
장애 직전까지 복구하려면 그 시점까지의 리두가 빠짐없이 있어야 함
#사용 조건과 주의사항
백업 모드를 길게 두면 리두가 크게 늘어남
RMAN 백업에는 BEGIN BACKUP, END BACKUP이 필요 없음(RMAN 기본 백업과 복원)