[Oracle] 백업과 복구 정리

윤성해·2023년 12월 16일
1

공부하기

목록 보기
12/12
post-thumbnail

백업과 복구는 크게 사용자가 직접 수행하는 사용자 관리, RMAN을 이용한 백업과 복구 방법이 있다.

기타 알아야 할 것 :

  • flash back 기능:
    참고할만한 블로그
    💡 flashback과 recover의 차이?
    FLASHBACK은 논리적인 장애를 아주 빠르게 복구해낼 수 있는 방법입니다.
    : 9i까지는 물리적으로나 논리적으로 파일 손상이 일어났을 때 아카이브 로그 파일들을 restore해서 복구를 해야했다. 이 때 recovery에 많은 시간이 소요되고 복구가 끝날 때 까지 database 운영이 불가능하거나 Transaction Fail이 생기어 업무에 많은 영향을 줄 수도 있었습니다.
    10g 에서 추가된 flashback 기능은 table drop이나 특정 데이터를 잘못 update나 delete 하는 등 사용자 실수에 의한 (논리적 손상)장애의 경우 쉽고 빠르게 복구할 수 있습니다.
    recover는 아카이브 로그 파일을 적용하여 복구를 하는 방식이고 flashback은 휴지통이나 undo data에서 읽어 restore합니다.
Oracle Database 9i까지는 물리적, 논리적 corruption의 경우 Data file 과 관련된 archive log files 들을
restore 해서 복구를 해야 했습니다. 이 방법은 Recovery에 많은 시간이 소요되고 Recovery가 끝날 때 까지
Database 운영이 불가능하거나 Transaction Fail이 생기어 업무에 많은 영향을 줄 수도 있었습니다.
Oracle Database 10G 에서는 Flashback 이라는 기능이 추가되어 Table drop이나 특정 data 를 잘못 update 나
delete 하는 등의 사용자 실수에 의한 corruption의 경우 쉽고 빠르게 복구 할 수 있도록 합니다.
이 작업은 Database 가 online 중에 어떤 user 라도 쉽게 할 수 있습니다.
Oracle 9i에서 제공 되었던 Flashback query는 과거 어떤 시점의 data 를 확인했다면 10g 에서는 object 의
어떤 시간 간격 동안 과거 data를 query 하여 부분적인 auditing 기능에 사용할 수도 있습니다.
Oracle Database 10g 에서는 Flashback을 사용하여 database, table, row level의 모든 level에서 빠르고 쉬운
복구가 가능합니다.
                                 복구할때 사용하는 data
 1. flashback  database             flashback  db log
 2. flashback  drop                  휴지통
 3. flashback  table                 undo  data
 4. flashback  Query                 undo  data
 5. flashback  version Query         undo  data
 6. flashback  Transaction Query     undo  data
 7. flashback  Archive (Total recall) 
 별도의 테이블스페이스 완전하게 되돌리는 기능 
  • FRA영역: 서버상의 HDD를 기반한 스토리지 장비의 일정 크기 공간에 백업 파일을 저장하는 목적으로 도입. 이 방식을 구성해서 사용하면 복원(restore)단계를 빠르게 수행할 수 있다.
    빠르게 복구할 수 있는 공간을 의미하고 백업 데이터 파일들을 통합 관리하는 기능을 제공한다.
  • Catalog database(백업에 관련된 정보들을 보관하는 곳)
    💡 Recovery catalog db를 사용하게 되면 알맨 백업 정보가 control file뿐만아니라 recovery catalog db에 동시에 저장되며 더 많은 정보를 저장할 수 있고, 알맨 백업 복구 스크립트를 저장할 수 있다.
    💡 control file 이 아니라 recovery catalog 를 이용했을때 장점
1) RMAN 백업/복구 스크립트를 저장할 수 있다.
2) 컨트롤 파일보다 더 많은 정보를 저장할 수 있다.
3) 컨트롤 파일을 백업 받을때 마다 그 정보를 기록하고, 컨트롤 파일이 깨졌을 때 가장 최근에 백업받은 컨트롤 파일로 자동 복구할 수 있게 해준다.
4) backup 할 때 keep forever 절을 사용할 수 있다. (절대 지우면 안되는 백업파일 만드는 것)

flashback1
flashback2
catalog db

백업과 복구를 시작 하기전

  1. 인스턴스 장애가 발생했을 때 복구에 걸리는 시간을 지정
  • 관련 파라미터 : fast_start_mttr_target (기본값 0, 최대값 1시간) - 10분정도로 지정하면 됩니다!
  1. 오라클 데이터 베이스를 구성하는 중요 파일들을 다중화 합니다.
  • data file : 백업 대상
  • control file : 다중화 대상
  • redo log file : 다중화 대상
    ✅ 다중화가 되어져 있는지 확인 작업을 해야한다.
  1. DB를 아카이브 로그 모드로 설정
    ❓ 아카이브로드란

    ✅ 로그라이터가 두개 멤버에 내려쓰는데 꽉차면 로그스위치가 일어난다. 6번까지 꽉차면 다시 그룹1으로 오는데 이게 덮어씌워진다. 덮어씌워지기전에 아카이브로그 파일에 내용들이 저장되므로 아카이브 로그 모드를 해놓아야 함 !
  • 아카이브 모드인지 확인하기
archive log list
  • 아카이브 모드로 설정하기 (mount단계에서 한다.)
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
SQL> archive log list
Database log mode              Archive Mode
  • 생성되는 위치 (FRA)
show parameter db_recovery_file_dest
  • 아카이브 로그 파일의 위치를 확인하는 SQL, 경로 변경해주기
select name from v$archived_log;
alter system set db_recovery_file_Dest='/home/oracle/arch'; 
  • 아카이브 프로세서가 잘 떠있는지 확인하기
select * 
 from v$bgprocess
 where name like '%ARC%';
5F675038	2	ARC0	Archival Process 0	0
5F675B10	1	ARC1	Archival Process 1	0
5F6770C0	1	ARC2	Archival Process 2	0
5F677B98	1	ARC3	Archival Process 3	0 

백업

  • 백업이란? 원본 파일이 손상되거나 유실될 경우를 대비하여 원본 데이터를 미리 복제하여 데이터를 복구할 수 있도록 준비해두는 것을 말한다.

백업 관련 용어

  • db 일부 백업 : 특정 datafile만 백업
  • db 전체(full) 백업
  • incremental 백업 :full backup 이후에 변경된 사항만 백업
  • cumulative 백업 : full backup 이후에 변경된 사항들을 모두 누적해서 백업
  • 오프라인 백업 : db가 open 안된 상태에서 백업 cold backup
  • 온라인 백업 : db가 open된 상태에서 백업 hot backup (begin, end backup 필요)

백업의 종류

참고한 블로그

Full backup (전체백업)

✅ 전체 백업은 데이터 변경 유무랑 상관없이 전체 데이터의 복사본을 만드는 백업 방식입니다. 백업하는 시간은 오래걸리지만 다른 백업 방식보다 복구가 간편하고, 복구 시간이 적게 소요됩니다.

Incremental backup (증분백업)

✅ 증분 백업은 일정 시간마다 변경된 데이터만 백업하는 방식입니다. 다른 백업보다 복구시간이 오래걸리는 단점이 있지만 파일 양이 적어 빠른 백업이 가능한 장점이 있습니다.

Differential Backup (차등백업)

✅ 차등 백업은 마지막 전체 백업 후에 변경된 모든 데이터를 백업하는 방식입니다. 증분 백업보다 복구 시간이 적게 소요되지만 파일 변경될 때마다 파일 크기가 증가하는 단점이 있습니다.

복구

시스템이나 데이터를 이전의 상태로 복원하는 프로세스
✅ 복원

  • DB를 복구하는 과정에서 백업한 파일로부터 물리적인 파일을 적절한 위치로 복사하는 과정
  • 백업이 존재하는 한 시점으로 데이터베이스를 돌려놓는다.
  • 해당 상태에서는 복구 과정이 모두 끝난게 아니기 때문에 데이터베이스를 open 할 수 없다.

✅ 복구

  • Restore로 DB를 특정 시점으로 돌려놓은 상태에서 백업해둔 Archive log를 적용해서, 과거에 백업이 끝났을 때의 시점으로 DB를 완벽하게 복구하는 과정

✅ Critical한 데이터 파일이란? system tablespaceundo tablespace의 파일들을 말하고, 나머지는 모두 Noncritical한 데이터 파일이다. Noncritical한 파일들은 db를 내리지 않고 복구할 수 있다.

(참고) DB가 올라갈 때 단계별로 필요한 file들

완전 복구와 불완전 복구

💡 완전 복구를 할 수 있으면 완전 복구를 시도해야 한다. 그런데 완전 복구를 할 수 없는 상황에서만 불완전 복구를 하면 된다. (물어보고 진행해야함)

  • 완전복구 : 장애가 발생하기 전 마지막으로 commit한 그 시점으로 복구
  • 불완전 복구 : 데이터베이스를 장애가 발생하기 전 과거 특정 시점으로 복구
    : 월 화 수 있을 때 만약 화요일 오후 4시에 디비가 깨졌다고 가정하자! 화요일 오후 3시 정도로 불완전 복구를 해주세요! 혹은 오후 12시 정도로 복구해주세요. 나머지 한시간 정도의 DML 작업은 수동으로 작업.
1) time base : 과거의 특정 시간으로 복구 -> 장애가 나기 이전 시간으로 (시간까지 나와야함)
2) cancle base : 과거의 특정 시간으로 복구 하는것인데, 
주로 current redo log file이 손상 되었거나 redo log file 전체가(디스크가) 모두 손상되었을 때! 
-> incarnation (Inc key로 복구)로 DB reset

1. 사용자 관리 백업, 복구

백업
1. hot backup : db 운영중에 백업(v$backup;조회) - datafile, control file
2. cold backup : db shutdown 상태에서 백업 - data file, control file, redo logfile

복구
1. db가 open되지 않은 상태에서 복구 (system 파일이 손상)
2. db가 open된 상태에서 복구 (non system 파일이 손상)
3. datafile, control file이 동시에 손상되었을 때 복구방법
4. 백업본이 없는 data file이 손상되었을 때 복구방법

사용자 관리 백업

사용자 관리 cold backup 수행 (offline)

  1. 데이터 파일과 컨트롤 파일의 위치 확인
-- 데이터 파일 위치 확인
SYS > select file_name from dba_data_files;

-- 컨트롤 파일 위치 확인
SYS > select name from v$controlfile;
  1. db shutdown immediate
  2. 데이터파일과 컨트롤 파일을 백업할 폴더에(새로생성해놓기) copy. (cp / move)
  3. 완료시 startup 하기

사용자 관리 control file 백업

  • binary file 형태로 백업
alter database backup controlfile to '/home/oracle/orcl2_hot2/control01.ctl' ;
  • text file 형태로 백업 (컨트롤 파일을 생성하는 스크립트 생성)
SYS> alter database backup controlfile to trace 
      as '/home/oracle/orcl2_hot2/cre_control01.sql';

사용자 관리 백업 hot backup 수행 (online)

  1. 체크포인트가 갱신되지 않도록 begin backup 수행
SYS> alter database begin backup; -- db 전체 
SYS> select 'alter tablespace ' || tablespace_name || ' begin backup;'
      from dba_data_files; -- 하나씩
alter tablespace UNDOTBS1 begin backup;      
  1. datafile들을 전부 백업할 새로운 폴더에 copy!
SYS> select 'cp ' || FILE_NAME || ' /home/oracle/onlinebackup_orcl2'|| substr(file_name,instr(file_name,'/',-1)) from dba_data_files;
--cp /u01/app/oracle/oradata/orcl2/users01.dbf(예전) /home/oracle/onlinebackup_orcl2/users01.dbf(new)
  1. end backup 해서 체크 포인트 정보가 갱신되게 합니다.
SYS> alter database end backup;
SYS> select 'alter tablespace ' || tablespace_name || ' end backup;'
 from dba_data_files;
alter tablespace USERS end backup; 

사용자 관리 복구

💡 사용자 관리 복구 2가지가 있다.
1. system file이 깨졌을때의 복구 ➡️ DB mount 상태 에서 복구 가능
(system tablespace, undo tablespace)
2. non system file이 깨졌을 때의 복구 ➡️ DB mount / open 상태 에서 복구 가능
✔️ 가급적 디비가 open 상태에서 복구할 수 있어야 운영이 되니까 좋긴하지만 1번이 깨진것은 어쩔수가 없다.

사용자 관리 복구 방법 (db가 open되지 않은 상태에서 복구하기)

  1. startup시 DB 올라오지 않음 (mount단계에서 안올라옴)
SYS> startup
select file# from v#recover_file
 where error='FILE NOT FOUND';
SYS> select file#, name from v#recover_file; -- 복구해야하는 파일 이름확인 
  1. 깨진 파일을 복원하기 (백업 받은 폴더에서 복사해서 가져오기)
cp users01.dbf /u01/app/oracle/oradata/orcl2/users01.dbf
  1. 복원한(복사해온) 파일을 복구하기! (예전 파일 일거라서 여기에 아카이브로그 파일을 적용해주어 최신파일로 만든다.)
SYS> recover datafile 4; 
-- 이거 하면 아카이브로그파일 적용할건지 물어본다. 

사용자 관리 복구 (db가 open된 상태에서 복구)

✨ 만약 누군가 테이블이 있는 테이블 스페이스를 삭제했다고 가정

  1. table을 select해본다 ➡️ 에러날 것!
  2. 테이블 스페이스를 offline immediate합니다.
    ✅ immediate를 해주어야 하는 이유는 지금 datafile이 없기때문에 체크포인트를 일으킬 수 없어서 immediate로 오프라인 시켜야합니다.
  3. 이전에 백업받은 파일을 복원합니다. (copy)
  4. 복원한 파일을 복구합니다. (recover로 아카이브 로그 파일 적용)
SYS> recover tablespace ts5001;
or
SYS> recover datafile 데이터파일번호;
  1. 테이블 스페이스를 online 시킵니다.

백업본이 없는 datafile 복구가능

빈 껍데기 파일을 만들고 tablespace 레벨로 복구. 아카이브 로그 모드여야 함


RMAN이란 (RECOVERY MANAGER)

오라클에서 제공하는 백업 및 복구 작업을 수행하고, 백업 전략 관리를 자동화하는 솔루션

✅ RMAN의 특징

  • DB 전체, Tablespace 단위, Datafile 단위, Archive log, Control files 들을 Backup 할 수 있음
  • 백업을 run 구문으로 script 로 묶어서 실행할 수 있음
  • 증분 레벨 (INCREMENTAL LEVEL) 백업 기능 지원
    BLOCK CHANGE TRACKING 기능
  • 백업 수행 중 훼손된 블록 감지 (VALIDATE 명령)
  • 온라인 백업 시 begin backup 구문을 사용 할 필요가 없음
  • 사용 중인 블록만 백업
  • 백업 수행시 압축 지원

제한사항
OPEN 상태에서 백업을 받으려면 DB가 ARCHIVE LOG MODE 이어야 한다.
DB가 MOUNT 또는 OPEN 상태여야 한다.

❗ 백업 가능 대상

  • DATABASE
  • TABLESPACE
  • DATAFILE
  • ARCHIVED REDO LOG
  • CONTROL FILE
    ONLINE REDO LOG는 백업 대상이 아님. ARCHIVE화 해서 백업 진행

✅ RMAN 백업 종류

1. Image copy

현재파일을 그대로 1:1로 그대로 백업하는 방식. 사용중인 블록만 백업 받기, 증분 백업 받기 불가

2. Backup set

빈블록을 빼고 모아서 저장하는 방식(RMAN 이 백업파일을 만들 때 RMAN 만이 알 수 있는 형태로 백업파일을 생성하는 것)

  • BACKUP PIECE : BACKUP SET의 용량이 너무 크면 분할해서 여러 개의 파일로 백업받을 수 있는데, 분할되는 하나의 백업 파일을 BACKUP PIECE라고 한다.
  • 알맨은 백업을 진행할 때 압축을 한다. 불필요한 데이터 블록들을 백업 대상에서 제외시키는 블록 압축을 수행하여, 백업 파일의 용량을 감소시킨다. 그렇지만 복구할 때 오래걸릴 수 있으므로 무조건 좋은것은 아니다.

💡 incremental update backup?

incremental backup은 복구가 느리다는 단점이 있다. 이것을 보완하기 위한 기술이다.
예를들어 1일에 image copy, 2일에 incremental copy, 3일에 incremental copy 를 했다면 이 1,2,3일차(레벨0+레벨1+레벨1)에대한 copy본을 별도의 디스크 공간에 저장한다. 이렇게 하면 복구할 때 아카이브 로그 파일만 적용하며 되어 복구 시간이 줄어들고 바로 디비를 오픈시킬 수 있는 장점이 있다.

💡 block change tracking 기능

10g 신기능으로 증분 백업을 빠르게 수행하기 위해서 마지막 백업이후에 변경된 블럭에 대한 정보를 기록하는 기능! 만약 증분 백업시 무엇이 변경된건지 모든 블록을 스캔한다면 시간이 오래걸리고 부하가 걸릴 수 있기때문에 이게 오래 걸리면 incremental 을 할 필요가 없다.

그래서 incremental 를 하려면 무조건 BCT기능을 써야한다. 아니면 백업을 받을 때 마다 디비가 행이걸려 내려가버릴 수 있다. 이기능은 안쓴다고 해서 증분백업이 안되는것은 아니지만 성능이 떨어지는 것임(부하 걸림)

주의할 점은 운영 디비와 가드(ADG)중 가드쪽에 이 기능을 쓴다. 그래서 BCT기능을 쓰려면 보통 ADG가 있어야 하는데 이것은 유료이다.
만약 adg가 없어서 BCT를 운영에서 해야한다면 그냥 인크리맨탈 쓰지 말고 매일 FULL로 하는게 낫다.

2. RMAN 백업, 복구

백업
1. hot backup : db 운영중에 백업
2. cold backup : db mount 상태에서 백업

복구
1. db가 open되지 않은 상태에서 복구 (system 파일이 손상)
2. db가 open된 상태에서 복구 (non system 파일이 손상)
3. 백업본이 없는 data file이 손상되었을 때 복구방법

*추가* recovery catalog를 사용한 백업과 복구
1. 백업 복구 스크립트 저장
2. keep forever
3. 불완전 복구시 잘 복구될 수 있도록 해줌!

RMAN 백업

RMAN으로 hot backup

  1. 전체 hot backup (begin, end backup 필요하지 않음)
rman> backup database include current controlfile;
  1. 일부 hot bakcup
rman> backup tablespace ts701;
or
rman> report schema; -- 해서 데이터 파일번호 알아내고
rman> backup datafile 데이터파일번호;
or
rman> report need backup; -- 백업이 필요한거 알려줘 !
rman> backup datafile 11;

RMAN 으로 cold backup

SYS> startup mount -- rman은 mount로 열려는 있어야한다. 사용자관리 백업은 아예 내려가져있는 상태에서 했다. 
$ rman target sys/oracle@orcl2 catalog rc_user/rc_user@orcl3
rman> backup database include current controlfile;

RMAN 복구

RMAN으로 db가 open되지 않은 상태에서 복구 (system 파일이 손상)

  1. mount단계에서 rman 접속
  2. system datafile 복원하기
RMAN> restore datafile 1;
or
RMAN> restore tablespace system;
  1. 복구하기
RMAN> recover tablespace system;
  1. db올리기

db가 open된 상태에서 복구 (non system 파일이 손상)

  1. 특정 table 조회시 에러
  2. rman접속
  3. tablespace를 오프라인하고 복원복구 합니다
RMAN> sql "alter tablespace ts401 offline immediate";
RMAN> restore tablespace ts401;
RMAN> recover tablespace ts401;
RMAN> sql "alter tablespace ts401 online";

RMAN 백업본이 없는 data file이 손상되었을 때 복구방법

startup시에 손상된 데이터파일 정보 나옴.
rman으로 접속해서 restore, recover


물리적 백업, 논리적 백업
물리적 - 사용자, RMAN백업(알맨,온라인ㅇ 차이), 온라인백ㄱ업(사용자,알맨차이)
논리적 - data pump
완전복구, 불완전복구 차이 설명
완전복구 : 데이터 손실이 없다. (장애 난 시점 전까지) recover database
불완전복구 : 데이터 손실이 있다. resetlogs open으로 디비 올린거.
current redo 까지 하면 완전복구

  • BCT는 알맨의 기능이 아니고 incremental backup 을 지원하는 오라클 기능
  • begin backup 을 왜 해야하는가
  • 인스턴스 리커버리
  • 플래시백 데이터베이스 기능을 쓰려면 별도로 설정해서 변경사항을 저장하는데 보통 FRA 영역에 저장을한다. 디비레벨로 12시 시점으로 디비를 돌리고싶다면 쓴다. 변경되는 내용을 저장되서 전체 디비를 어제 3시 시점으로 돌릴 수 있다. (flashback db log 에 저장된 변경된 데이터 있음)
  • begin backup 찍는 이유 아카이브 리커버리 하기 위해서.
  • 플래시백은 별ㄹ도로 블래시백 로그 저장해야하는데 별도의 공간이 필요하다. (FRA) on으로 켜야하고 운영에서 하지않는다.
  • restore point 오라클 기능. 시점 스냅을 찍어주는 기능이 있다. 3번(현재 시점 찍고) 2번으로 돌아가서 운영 디비 올리고 다시 돌아와서 3번으로 돌아온다.
  • FRA 영역이 뭐냐면 플래시백 로그를 저장하는 영역. 근데 꼭 이것만 저장하는건 아님.
  • FRA 에는 별도로 경로를 저장하지 않은 컨트롤파일이나 리두나 아카이브나 백업 관련 파일들이 디폴트로 저장되는 영역이다.
  • 블럭의 시작과 끝지점이 같다면 db open이 문제없이 가능
profile
Slow and steady wins the race.

0개의 댓글