RMAN NOARCHIVE 복구 시나리오

BUMSOO·2024년 9월 12일

Backup & Recovery

목록 보기
11/18

RMAN을 이용한 NOARCHIVE 백업 1

  1. DB를 정상적으로 종료 후 MOUNT 단계까지 실행

  2. recover 필요한 파일 백업
    backup database;

  1. 백업 받은 파일 확인
    list backup;
  • 데이터파일 백업본 따로 control file & spfile 백업본이 따로 만들어진다.
  • control file & spfile 백업본이 만들어진 이유는 자동으로 만들어지게 설정되어있었기 때문이다.
  1. DB를 OPEN으로 변경

  2. 특정 데이터파일 삭제로 장애유발

  3. DB 비정상 종료 후 RMAN 실행

  • DB가 종료되어있기 때문에 not started로 보임
  1. 백업정보를 보기 위해 MOUNT 단계까지 실행

  2. 백업파일이 있는지 확인
    list backup;

  3. 가장 최근에 받은 백업본을 restore
    restore database;

  4. redo 적용하기
    recover database

  5. resetlogs로 DB OPEN
    alter database open resetlogs

한번도 백업받지 않은 데이터파일 정보

report need backup

유저 관리로 time base recovery를 할때는 무조건 close 백업을 가지고만 할 수 있었다.
opend backup은 data file과 control file의 scn이 미세하게 달라서 사용할 수 없었다.
하지만 rman을 이용하면 online backup을 받을때도 data file과 control file의 scn 번호가 일치하기 때문에 time base recovery 에도 open bakcup을 사용할 수 있다.

RMAN을 이용한 NOARCHIVE 복구 2

redo가 있고 특정데이터파일 손상

rman

  1. rman에서 close 백업 받기
    backup database

sqlplus

  1. 테이블 생성 후 데이터 추가
    current한 리두로그 그룹에 저장되어있다.

  2. 수동으로 로그스위치 발생
    아직 이전 데이터추가한 리두로그는 살아있다.

  3. 특정 데이터파일 삭제후 DB를 종료하지만 오류발생으로 세션 종료됨

  4. DB를 다시 MOUNT 단계까지 실행하고 recover file 뷰로 확인

  5. 문제 있는 데이터파일을 offline으로 변경 후 DB 를 OPEN 한다.

  6. sqlplus 종료 후 rman으로 접속

rman

  1. report schema로 확인해 봤을때 사이즈가 0인 데이터파일은 물리적으로 데이터파일이 없기 때문이다.

  2. 가장 최근에 받아놓은 백업셋 중에서 필요한 데이터파일만 restore
    restore tablespace example;

  3. 특정 테이블스페이스만 recover 수행
    recover tablespace example;

  4. recover 수행한 데이터파일을 online으로 변경 후 schema 확인
    alter database datafile 5 online;

    - recover한 데이터파일의 사이즈가 다시 복구되어있다.

RMAN을 이용한 NOARCHIVE 복구 3

redo가 없고 특정데이터파일 손상

  1. log siwtch 로 redo 정보 없어짐

  2. 특정 데이터파일 삭제로 장애 유발 후 DB 비정상 종료

  3. rman 시작 후 DB MOUNT 단계까지 실행

  4. rman이 가지고 있는 백업정보 확인
    rman이 가지고 있는 백업 정보랑 redo가 가지고 있는 시퀀스 번호가 달라 완전 복구가 불가능하다.

  5. 불완전한 복구를 하기 위해 전체 데이터파일을 restore

  6. recover database로 불완전한 복구 실행

  7. DB를 resetlogs로 open 하면 된다.

  8. resetlogs로 오픈하면 이전 백업본은 의미가 없기 때문에 삭제해준다.

RMAN을 이용한 NOARCHIVE 복구 4

system datafile손상 (백업 이후에 리두가 있을경우)

  1. DB 정상적으로 종료 후 MOUNT 단계까지 실행

  2. RMAN으로 backup database해서 백업본 받기

  3. DB OPEN 후 SYSTEM 파일 삭제

  4. DB 비정상 종료 후 다시 STARTUP 하지만 MOUNT 단계까지만 실행됨

  5. RMAN에서 백업 파일 정보 확인 후 REDO가 살아 있으면 SYSTEM 파일만 RESTORE
    restore tablespace system

  6. SYSTEM 파일만 RECOVER 한 후 DB OPEN 하면 된다(완전복구)
    recover tablespace system

RMAN을 이용한 NOARCHIVE 복구 5

system datafile손상 (백업 이후에 리두가 없을 경우)

  1. DB 정상적으로 종료 후 MOUNT 단계까지 실행

  2. RMAN으로 backup database해서 백업본 받기

  3. DB OPEN 후 수동 log switch 발생으로 redo 정보 없어짐

  4. SYSTEM 파일 삭제

  5. DB 비정상 종료 후 다시 STARTUP 하지만 MOUNT 단계까지만 실행됨

  6. RMAN에서 백업 파일 정보 및 REDO 파일 정보 확인해보지만 REDO 정보가 없는걸 알게 되면 불완전 복구로 진행해야 한다.

  7. 전체 control file, data file을 resotre
    recover database

  8. cancel base recovery로 복구해야한다.
    recover database

  9. recover database를 하면 rman에서 자동으로 백업파일이 가지고 있는 scn 번호까지 백업해주는데 내가 수동으로 설정해줄수도 있다.
    recover database until scn 특정번호

  10. DB OPNE은 RESETLOGS로 해야하며, 이전 백업파일은 무의미 해졌기 때문에 삭제 하고 다시 백업 받아야 한다.

RMAN을 이용한 NOARCHIVE 복구 6

데이터파일, 리두로그파일이 손상 복구

  1. DB 정상적으로 종료 후 MOUNT 단계까지 실행
    shutdown immediate
    startup mount

  2. RMAN으로 close backup 받기
    rman backup database

  3. DB OPEN 후 작업하다가 특정 데이터파일 및 리두로그파일 삭제로 인한 장애유발

  4. DB 비정상 종료 후 RMAN으로 DB를 MOUNT 단계까지 실행
    shutdown abort
    rman startup mount

  5. 가장 최근에 백업받은 파일 확인 후 불완전 복구를 시도해야 한다.
    rman list backup;

  6. 전체 백업파일 restore
    restore database;

  7. 백업 받은 시점의 scn까지 recover 수행하기
    rman recover database until scn 특정번호;

  8. 불완전 복구 하였으니 DB OPEN 도 RESETLOGS로 해야한다.
    rman ALTER DATABASE OPEN RESETLOGS;

  9. RESETLOGS로 OPEN 하였으니 다시 RMAN 으로 백업 받아놓아야 한다.

RMAN을 이용한 NOARCHIVE 복구 7

컨트롤파일 손상 복구

  1. control file 삭제로 장애유발

  2. DB 비정상 종료 후 alert log 파일에서 최근 백업 컨트롤파일 위치 확인
    - gg : 커서 위치를 제일 앞으로
    - G로 가장 아래로 이동
    - / autobackup : 커서위치를 기준으로 아래 방향으로 검색
    - ? autobackup: 커서위치를 기준으로 위 방향으로 검색
    - n 검색어 뒤로 이동
    - N 검색어 앞으로 이동
    - :noh : 검색어 블록 제거

2024-09-12T14:04:17.185274+09:00
Control autobackup written to DISK device

handle '/u01/app/oracle/fast_recovery_area/ORA19C/autobackup/2024_09_12/o1_mf_s_1179497000_mg4xlk54_.bkp'
  1. rman으로 접속 후 db를 nomount 단계까지 실행
    rman startup nomount

  2. 백업 받은 컨트롤 파일을 restore 하기

  • 자동으로 spfile이 가지고 있는 control 파일의 위치로 restore 해준다.
    rman restore controlfile from '/u01/app/oracle/fast_recovery_area/ORA19C/autobackup/2024_09_12/o1_mf_s_1179497000_mg4xlk54_.bkp';
  1. restore 받은 컨트롤 파일로 mount 단계까지 실행
    rman alter database mount

  2. 백업 컨트롤 파일이 가지고 있는 백업 데이터파일을 확인 후 백업 데이터파일을 전부 restore 해야야한다.(불완전 복구)
    rman restore database;

  3. 불완전 복구로 recover 해주면 된다.
    rman recover database until scn 번호;

  4. 불완전 복구로 recover 하였기 때문에 db open도 resetlogs로 오픈한다.
    rman alter database open resetlogs

  5. resetlogs로 db를 오픈하여 resetlogs id로 달라졌기 때문에 이전 백업본은 삭제 후 다시 백업본을 받아야 한다.

RMAN을 이용한 NOARCHIVE 복구 8

디스크 손상으로 모든 파일이 유실, 새로운 위치에 복구 작업

  1. spfile로 pfile 생성

  2. 전체 파일 삭제

  3. 새롭게 restore 해야할 디렉터리 생성

  4. pfile의 컨트롤파일 위치를 새롭게 생성한 디렉터리로 변경

  5. alert log를 통해서 가장 최근에 백업받은 control file 위치 찾기

2024-09-12T16:24:36.900624+09:00
Control autobackup written to DISK device

handle '/u01/app/oracle/fast_recovery_area/ORA19C/autobackup/2024_09_12/o1_mf_s_1179505428_mg55snvd_.bkp'
  1. rman 으로 접속후 pfile을 이용해 nomount 단계 까지만 실행

  2. rman을 이용해서 control file을 restore
    - restore 위치는 초기파라미터 파일에 등록되어있는 control file의 위치로 해준다.
    restore controlfile from '/u01/app/oracle/fast_recovery_area/ORA19C/autobackup/2024_09_12/o1_mf_s_1179500480_mg50yokh_.bkp';

  3. restore 한 컨트롤 파일로 mount 단계까지 실행

  4. report schema 로 확인

  5. control파일이 가지고 있는 파일들의 위치정보 변경

- 스크립트 형식으로 정보변경

run{

sql "alter database rename file ''/u01/app/oracle/oradata/ORA19C/redo01.log'' to ''/home/oracle/oradata/redo01.log''";
sql "alter database rename file ''/u01/app/oracle/oradata/ORA19C/redo02.log'' to ''/home/oracle/oradata/redo02.log''";
sql "alter database rename file ''/u01/app/oracle/oradata/ORA19C/redo03.log'' to ''/home/oracle/oradata/redo03.log''";

set newname for datafile 1 to '/home/oracle/oradata/system01.dbf';
set newname for datafile 2 to '/home/oracle/oradata/undotbs01.dbf';
set newname for datafile 3 to '/home/oracle/oradata/sysaux01.dbf';
set newname for datafile 5 to '/home/oracle/oradata/example01.dbf';
set newname for datafile 7 to '/home/oracle/oradata/users01.dbf';
set newname for tempfile 1 to '/home/oracle/oradata/temp01.dbf';

restore database;
switch datafile all; 
switch tempfile all;
recover database;
alter database open resetlogs;}

RMAN을 이용한 NOARCHIVE 복구 9

정상적인 종료 후 컨트롤파일 삭제

  1. DB를 정상적으로 종료

  2. control file을 삭제해서 장애유발

  3. RMAN으로 DB nomount 단계까지 실행 후 가장 최근에 백업받은 control file을 찾아 restore 해야한다.
    restore controlfile from '/u01/app/oracle/fast_recovery_area/ORA19C/autobackup/2024_09_12/o1_mf_s_1179511484_mg5cpnyn_.bkp';

  4. DB를 MOUNT 단계까지 실행
    ALTER DATABASE MOUNT;

  5. control file만 백업본이고 data file과 redo log file은 정상적으로 존재하기 때문에 control file을 재생성 해주는게 좋다.

  • rman 에서 trace 파일 생성하는 방법
    sql "alter database backup controlfile to trace as ''/home/oracle/create_control2.sql''";
  1. trace 파일의 내용을 수정해서 control file을 재생성 후 db는 그냥 open 하면 된다.
STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "ORA19C" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/ORA19C/redo01.log'  SIZE 200M BLOCKSIZE 512,
  GROUP 2 '/u01/app/oracle/oradata/ORA19C/redo02.log'  SIZE 200M BLOCKSIZE 512,
  GROUP 3 '/u01/app/oracle/oradata/ORA19C/redo03.log'  SIZE 200M BLOCKSIZE 512
DATAFILE
  '/u01/app/oracle/oradata/ORA19C/system01.dbf',
  '/u01/app/oracle/oradata/ORA19C/undotbs01.dbf',
  '/u01/app/oracle/oradata/ORA19C/sysaux01.dbf',
  '/u01/app/oracle/oradata/ORA19C/example01.dbf',
  '/u01/app/oracle/oradata/ORA19C/users01.dbf'
CHARACTER SET AL32UTF8
;

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

ALTER DATABASE OPEN;

ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/ORA19C/temp01.dbf' REUSE;

0개의 댓글