컨트롤 파일 백업과 복구
컨트롤 파일 백업 형식과 남은 파일에 따른 다중화 사본 복사, 재생성 및 RMAN 자동 백업 복원
#핵심 요약
컨트롤 파일은 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
#백업 전 확인
SELECT name, dbid, open_mode, log_mode FROM v$database;
SHOW PARAMETER control_files
SELECT name FROM v$controlfile;결과 해석:
DBID는 컨트롤 파일을 잃은 뒤 카탈로그 없이 자동 백업을 찾을 때 쓰므로 백업 위치와 함께 기록해 둠
#RMAN 자동 백업과 수동 백업
SHOW CONTROLFILE AUTOBACKUP;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
BACKUP DATAFILE 1;
LIST BACKUP OF CONTROLFILE;결과 해석:
설명: CONFIGURE ... ON은 설정 변경일 뿐 바로 백업하지 않음
데이터 파일 백업이 끝나면 Control File and SPFILE Autobackup 메시지와 조각 경로가 나옴
열린 상태에서 데이터 파일을 백업하려면 ARCHIVELOG 모드여야 함
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로 봄
#사용자 관리 백업
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: 정상 다중화 파일로 복원
SHUTDOWN ABORT;cd <CTL_DIR>
cp control01.ctl control03.ctlSTARTUP;
SELECT name FROM v$controlfile;
SELECT name, open_mode FROM v$database;결과 해석:
실습 조건: control01.ctl은 정상인 최신 파일이고 control03.ctl만 사라졌음
정상 종료가 되면 SHUTDOWN IMMEDIATE를 씀
과거 바이너리 백업(control01.bak)을 이 절차의 정상 파일로 쓰면 안 됨
#복구 2: 텍스트 스크립트로 재생성
STARTUP NOMOUNT;
@<BACKUP_DIR>/create_controlfile2.sql결과 해석:
실행 전에 스크립트의 DB 이름, 모든 데이터 파일과 리두 그룹, Set 구간, STARTUP NOMOUNT 중복 여부, 뒤따르는 RECOVER와 OPEN, 임시 파일 추가 구문을 확인함
이미 NOMOUNT로 기동했다면 스크립트 안의 STARTUP NOMOUNT를 뺌
#복구 3: 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로 임의로 진행하지 않음
#복구 뒤 확인과 새 백업
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;BACKUP DATABASE PLUS ARCHIVELOG;
LIST BACKUP OF CONTROLFILE;결과 해석:
설명: 재생성 뒤 임시 파일이 빠졌으면 추가함
RESETLOGS 직후 새 전체 백업을 받는 것은 권장 조치이지 동작에 꼭 필요한 조건은 아니며, RESETLOGS 이전 백업이 무조건 무효가 되는 것도 아님
#사용 조건과 주의사항
트러블슈팅: CREATE CONTROLFILE을 인스턴스 없이 실행하면 ORA-01034, RMAN 연결이 끊긴 뒤 같은 세션에서 다시 실행하면 ORA-03135, ORA-03114가 났음
연결 오류의 처음 원인은 확인 불가
ASM 환경의 컨트롤 파일 다중화는 ASM 환경의 백업과 복구 글에서 다룸