데이터베이스 연구실.log

온라인 핫 백업 (BEGIN BACKUP, END BACKUP)

백업 모드에서 OS 명령으로 파일을 복사하는 핫 백업, 분할 블록과 리두의 관계 및 복구 절차

HOT BACKUPBEGIN BACKUPEND BACKUPV$BACKUPSPLIT BLOCKBACKUP CONTROLFILEARCHIVELOGORA-01113

#핵심 요약

핫 백업은 데이터베이스를 연 채 서비스하면서 데이터 파일을 백업 모드로 바꾸고 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 모드 확인과 전환

SQL*Plus (SYSDBA)조회만 함
ARCHIVE LOG LIST
SELECT name, log_mode FROM v$database;
SQL*Plus (SYSDBA)인스턴스 또는 서비스 중단이 필요함
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

결과 해석: 개별 실행 출력은 기재 없음

#데이터 파일 전체 핫 백업

SQL*Plus (SYSDBA)객체 또는 설정을 변경함
ALTER DATABASE BEGIN BACKUP;
SQL*Plus (SYSDBA)조회만 함
SELECT status, COUNT(*) FROM v$backup GROUP BY status;
SELECT file#, status, change# FROM v$backup;

결과 해석:

설명: 모두 ACTIVE여야 함
ACTIVE가 아닌 파일은 파일 번호로 테이블스페이스를 찾아 확인함

OS 셸 (oracle 사용자)객체 또는 설정을 변경함
mkdir -p <BACKUP_DIR>
cp <DATAFILE_DIR>/*.dbf <BACKUP_DIR>/

결과 해석:

실습에서는 데이터 파일이 세 디렉터리에 나뉘어 있어 cp를 세 번 실행했음
데이터 파일 위치를 DBA_DATA_FILES로 확인하고 모두 복사함

SQL*Plus (SYSDBA)객체 또는 설정을 변경함
ALTER DATABASE END BACKUP;
ALTER DATABASE BACKUP CONTROLFILE TO '<BACKUP_DIR>/control01.bak';
ALTER SYSTEM ARCHIVE LOG CURRENT;
OS 셸 (oracle 사용자)객체 또는 설정을 변경함
cp <ARCH_DIR>/*.arc <BACKUP_DIR>/

결과 해석:

설명: 데이터 파일, 컨트롤 파일, 아카이브 로그 세 가지를 함께 보관해야 핫 백업으로 복구할 수 있음
END BACKUP 뒤 V$BACKUP은 모두 NOT ACTIVE임

#복원과 복구

구분 복원(Restore) 복구(Recover)
작업 백업 파일을 필요한 위치로 복사 리두를 적용해 일관성과 변경 내용 복구
명령 운영체제 cp Oracle RECOVER
재료 백업 데이터 파일 아카이브 로그, 필요하면 온라인 리두
SQL*Plus (SYSDBA, MOUNT)조회만 함
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>;
OS 셸 (oracle 사용자)객체 또는 설정을 변경함
cp <BACKUP_DIR>/<FILE_NAME>.dbf <DATAFILE_DIR>/<FILE_NAME>.dbf
SQL*Plus (SYSDBA, MOUNT)객체 또는 설정을 변경함
RECOVER DATAFILE <FILE_NO>;
ALTER DATABASE OPEN;

결과 해석:

실습 기록: V$RECOVER_FILE의 오류 열에 FILE NOT FOUND가 보였음
장애 직전까지 복구하려면 그 시점까지의 리두가 빠짐없이 있어야 함

#사용 조건과 주의사항

백업 모드를 길게 두면 리두가 크게 늘어남

RMAN 백업에는 BEGIN BACKUP, END BACKUP이 필요 없음(RMAN 기본 백업과 복원)

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기