데이터베이스 연구실.log

컨트롤 파일 백업과 복구

컨트롤 파일 백업 형식과 남은 파일에 따른 다중화 사본 복사, 재생성 및 RMAN 자동 백업 복원

CONTROL FILECONTROLFILE AUTOBACKUPBACKUP CONTROLFILE TO TRACECREATE CONTROLFILERESTORE CONTROLFILE FROM AUTOBACKUPSET DBIDRESETLOGSNORESETLOGS

#핵심 요약

컨트롤 파일은 DB 이름, 데이터 파일과 리두 로그 위치, 체크포인트, RMAN 백업 기록 등을 담은 바이너리 파일임
데이터베이스가 열려 있어도 RMAN이나 SQL로 백업할 수 있음

복구 방법은 남아 있는 것에 따라 고름
정상인 최신 다중화 파일이 있으면 복사, 재생성용 텍스트가 있으면 CREATE CONTROLFILE, 과거 자동 백업만 있으면 RMAN 복원임

과거 백업 컨트롤 파일을 복원했으면 데이터 파일을 복원하지 않았어도 RECOVER DATABASE가 필요하고, 완전 복구를 했더라도 OPEN RESETLOGS로 엶

RESETLOGS는 새 incarnation을 시작하고 로그 시퀀스를 다시 시작함
테이블 데이터를 초기화하거나 SCN을 0으로 만드는 작업이 아님

#개념과 동작 원리

컨트롤 파일에는 데이터 파일과 리두 로그의 위치, 체크포인트 정보, 백업 이력 같은 데이터베이스 구조 정보가 들어 있음
데이터가 아니라 지도에 해당하므로, 잃으면 데이터 파일이 멀쩡해도 DB를 열 수 없음
그래서 컨트롤 파일을 여러 개 두고 Oracle이 항상 같은 내용을 동시에 기록하게 하는 다중화(multiplexing)를 함

모든 데이터 파일과 모든 컨트롤 파일을 함께 잃은 최악의 경우에는 백업한 컨트롤 파일 복원, MOUNT, 모든 데이터 파일 복원, 백업 컨트롤 파일로 RECOVER DATABASE, OPEN RESETLOGS 순서로 복구하고 바로 전체 백업을 받음

다중화를 추가할 때는 ALTER SYSTEM SET control_files = ... SCOPE = SPFILE로 경로를 더하고 SELECT * FROM v$spparameter WHERE name = 'control_files'로 SPFILE 반영을 확인한 뒤, 종료 상태에서 기존 파일을 복사하고 기동함
기동 뒤 ALTER SYSTEM CHECKPOINT를 하고 ls -l로 파일들의 수정 시각이 함께 바뀌는지 보아 동기화를 확인함

백업 방식 저장하는 것
RMAN 자동 백업(Autobackup) 자동으로 만드는 컨트롤 파일 백업 조각
SPFILE로 기동했다면 SPFILE도 함께
RMAN 이미지 카피 현재 컨트롤 파일의 바이너리 복사본
사용자 관리 텍스트 컨트롤 파일 재생성용 CREATE CONTROLFILE SQL
사용자 관리 바이너리 현재 컨트롤 파일의 바이너리 백업
남아 있는 것 복구 방법 RECOVER, RESETLOGS
정상인 최신 다중화 컨트롤 파일 정상 파일을 손상 위치로 복사 컨트롤 파일만 손상이면 둘 다 불필요
재생성용 텍스트 SQL CREATE CONTROLFILE 데이터 파일과 리두 상태, 고른 방식(NORESETLOGS 또는 RESETLOGS)에 따라 다름
과거 컨트롤 파일 자동 백업 RMAN RESTORE CONTROLFILE RECOVER 뒤 OPEN RESETLOGS 필요

컨트롤 파일 백업에는 업무 데이터가 없음
데이터 파일과 필요한 리두는 따로 확보함

데이터 파일 추가, 삭제, 이름 변경, 테이블스페이스나 리두 구성 변경 뒤에는 컨트롤 파일 백업과 텍스트 백업을 새로 만듦
예전 텍스트 스크립트에는 새 데이터 파일이 빠져 있을 수 있음

사용 중인 컨트롤 파일을 단순 cp로 백업하지 않음

#필수 명령어 또는 SQL

#백업 전 확인

SQL*Plus (SYSDBA)조회만 함
SELECT name, dbid, open_mode, log_mode FROM v$database;
SHOW PARAMETER control_files
SELECT name FROM v$controlfile;

결과 해석:

DBID는 컨트롤 파일을 잃은 뒤 카탈로그 없이 자동 백업을 찾을 때 쓰므로 백업 위치와 함께 기록해 둠

#RMAN 자동 백업과 수동 백업

RMAN객체 또는 설정을 변경함
SHOW CONTROLFILE AUTOBACKUP;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
BACKUP DATAFILE 1;
LIST BACKUP OF CONTROLFILE;

결과 해석:

설명: CONFIGURE ... ON은 설정 변경일 뿐 바로 백업하지 않음
데이터 파일 백업이 끝나면 Control File and SPFILE Autobackup 메시지와 조각 경로가 나옴
열린 상태에서 데이터 파일을 백업하려면 ARCHIVELOG 모드여야 함

RMAN객체 또는 설정을 변경함
BACKUP AS COPY CURRENT CONTROLFILE FORMAT '<BACKUP_DIR>/control_copy.ctl';
LIST COPY OF CONTROLFILE;

BACKUP CURRENT CONTROLFILE;

결과 해석:

AS COPY 없는 BACKUP CURRENT CONTROLFILE은 설정된 기본 형식(기본은 백업셋)으로 백업함
백업셋은 LIST BACKUP OF CONTROLFILE, 이미지 카피는 LIST COPY OF CONTROLFILE로 봄

#사용자 관리 백업

SQL*Plus (SYSDBA)객체 또는 설정을 변경함
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '<BACKUP_DIR>/create_controlfile.txt';
ALTER DATABASE BACKUP CONTROLFILE TO '<BACKUP_DIR>/control01.bak';

결과 해석:

텍스트 파일에는 Set #1(온라인 리두를 쓸 수 있을 때의 NORESETLOGS 재생성)과 Set #2(RESETLOGS 재생성)가 들어 있음
둘은 골라 쓰는 것이며 이어서 실행하지 않음
실습에서는 vi에서 Set #1 구간만 별도 파일로 저장했음(:39,99w <파일>, 줄 번호는 파일마다 다름)
텍스트 파일은 .ctl 위치에 복사해 쓸 수 없음

#복구 1: 정상 다중화 파일로 복원

SQL*Plus (SYSDBA)인스턴스 또는 서비스 중단이 필요함
SHUTDOWN ABORT;
OS 셸 (oracle 사용자)객체 또는 설정을 변경함
cd <CTL_DIR>
cp control01.ctl control03.ctl
SQL*Plus (SYSDBA)객체 또는 설정을 변경함
STARTUP;
SELECT name FROM v$controlfile;
SELECT name, open_mode FROM v$database;

결과 해석:

실습 조건: control01.ctl은 정상인 최신 파일이고 control03.ctl만 사라졌음
정상 종료가 되면 SHUTDOWN IMMEDIATE를 씀
과거 바이너리 백업(control01.bak)을 이 절차의 정상 파일로 쓰면 안 됨

#복구 2: 텍스트 스크립트로 재생성

SQL*Plus (SYSDBA)객체 또는 설정을 변경함
STARTUP NOMOUNT;
@<BACKUP_DIR>/create_controlfile2.sql

결과 해석:

실행 전에 스크립트의 DB 이름, 모든 데이터 파일과 리두 그룹, Set 구간, STARTUP NOMOUNT 중복 여부, 뒤따르는 RECOVER와 OPEN, 임시 파일 추가 구문을 확인함
이미 NOMOUNT로 기동했다면 스크립트 안의 STARTUP NOMOUNT를 뺌

#복구 3: RMAN 자동 백업으로 복원

RMAN객체 또는 설정을 변경함
STARTUP NOMOUNT;
SET DBID <DBID>;
RESTORE CONTROLFILE FROM AUTOBACKUP;
ALTER DATABASE MOUNT;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;

결과 해석:

설명: 카탈로그 없이 자동 백업을 찾으므로 DBID를 지정함
기본이 아닌 자동 백업 경로를 썼다면 SET CONTROLFILE AUTOBACKUP FORMAT으로 맞춤
백업을 찾지 못하면 다음 단계로 가지 않음
필요한 로그가 없다는 오류가 나면 CANCEL이나 RESETLOGS로 임의로 진행하지 않음

#복구 뒤 확인과 새 백업

SQL*Plus (SYSDBA)조회만 함
SELECT name, open_mode FROM v$database;
SELECT name FROM v$controlfile;
SELECT group#, status, sequence# FROM v$log ORDER BY group#;
SELECT file#, name FROM v$datafile;
SELECT file#, name FROM v$tempfile;
RMAN객체 또는 설정을 변경함
BACKUP DATABASE PLUS ARCHIVELOG;
LIST BACKUP OF CONTROLFILE;

결과 해석:

설명: 재생성 뒤 임시 파일이 빠졌으면 추가함
RESETLOGS 직후 새 전체 백업을 받는 것은 권장 조치이지 동작에 꼭 필요한 조건은 아니며, RESETLOGS 이전 백업이 무조건 무효가 되는 것도 아님

#사용 조건과 주의사항

트러블슈팅: CREATE CONTROLFILE을 인스턴스 없이 실행하면 ORA-01034, RMAN 연결이 끊긴 뒤 같은 세션에서 다시 실행하면 ORA-03135, ORA-03114가 났음
연결 오류의 처음 원인은 확인 불가

ASM 환경의 컨트롤 파일 다중화는 ASM 환경의 백업과 복구 글에서 다룸

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

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

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