Tibero Backup & Recovery
Backup & Recovery 개요
- 백업과 복구는 여러 가지 유형의 장애(시스템 장애, 미디어 장애, 사용자 실수 등)로부터 데이터베이스를 보호하는 핵심적인 기능이다.
- 보호 대상 장애 유형
- 하드웨어 장애 : 디스크 손상, 서버 다운 등
- 소프트웨어 장애 : DBMS오류 등
- 사용자 오류 : 실수로 인한 데이터 삭제, 잘못된 UPDATE/DELETE 실행 등
- 재해 상황 : 화재, 정전, 천재지변 같은 예기치 못한 사건
- 보호 대상 장애 유형
- 백업의 역할
- 데이터 복원 지점 확보 : 특정 시점의 데이터 상태를 보관
- 서비스 연속성 보장 : 장애 발생 시 신속한 복구 가능
- 데이터 손실 최소화 : 장애 발생 이후 손실되는 데이터를 최소화
- 복구의 역할
- 장애 직전 시점으로 데이터 회복 : Redo/Undo 로그를 이용해 트랜잭션 적용/취소
- 업무 중단 시간 단축 : 백업 및 복구 전략에 따라 다운타임 최소화
- 데이터 무결설 보장 : 복구 과정에서 트랜잭션의 일관성과 무결성을 유지
- 관리자는 시스템 장애 시 발생할 손실을 최소화하고 복구 가능한 상태로 데이터베이스를 운용해야 한다.
- 최소한 한 달에 한번 데이터베이스 전체 백업
- 하루에 한번씩 Export 백업 권장
- 데이터베이스 관리자는 백업에 대한 정책을 수립하고, 꼭 필요한 데이터를 최소한의 양으로 백업
- 백업은 DBA의 주요 역할 중 하나로, 가장 주의가 필요하다.
- "RECOVERY에 실패한 DBA는 용서할 수 있지만, BACKUP을 실패한 DBA는 용서할 수 없다."
- 백업이 정상적으로 수행되었는지 주기적인 검증 권장
▶️ 백업은 예방(사전 대비)이고, 복구는 대응(사후 처리)의 개념이라고 할 수 있다.
여러가지 유형의 장애
#1 명령문의 실패
명령문의 실패 원인에는 다음과 같은 것들이 있다.
- 테이블의 제약 조건에 위배되는 데이터 INSERT
- 권한의 부족
- 테이블 생성 시 또는 데이터 변경 시 테이블스페이스의 공간이 부족한 경우
이러한 장애는 데이터 유실과는 관련이 없는 에러이다.
#2 사용자 프로세스의 실패
- 비정상적인 종료로 인한 사용자 프로세스의 실패가 대부분
- Tibero 의 monitor process가 비정상적인 종료를 감지하고 수행중인 트랜잭션 등은 롤백시킨다.
#3 사용자로 인한 장애
- 장애 발생 상황
- DROP TABLE
- TRUNCATE TABLE
- DELETE FROM & COMMIT
- 잘못된 UPDATE & COMMIT
- 해결 방안
- 사용자에 대한 교육 실시
- 백업에서 복구
- Export 받은 파일에서 테이블을 Import
- Time-based 불완전 복구
#4 Instance Fail
- 정전, CPU나 Memory Fault, Background Process의 비정상적인 종류가 대부분이다.
- 복구
- 특별한 복구 작업이 필요하지 않음
- tbboot을 통해 DBMS를 기동하면 자동으로 복구됨
- 로그 등을 참고하여 원인 분석
#5 Media Fail
- 데이터파일이 저장된 하드 디스크의 장애
- 데이터 파일의 삭제
- 정해진 복구 전략에 따라 복구 절차가 필요
- Media Fail은 반드시 발생할 수 밖에 없다. 하드디스크에도 수명이 존재하기 때문에 24시간 계속 모터가 돌아가다 보면 언젠가 문제가 발생하여 데이터 유실이 발생할 수 있다.
Backup & Recovery 전략 수립
- 업무적인 요구 사항
- MTBF(Mean Time Between Failure)를 증가시키고, MTTR(Mean Time To Recover)를 감소
- MTBF: 평균 고장 간격
- 시스템이나 장비가 고장 없이 정상적으로 동작하는 평균 시간
- 얼마나 신뢰성이 높은지를 나타낸다.
- MTBF = 총 가동 시간 / 고장 횟수
- ex) 서버가 1년동안 (8760시간) 4번 다운되었다면 -> MTBF = 8760 / 4 = 2190 시간 → 약 3개월에 한 번꼴로 고장 발생
- MTTR : 평균 복구 시간
- 장애가 발생했을 때 복구하여 정상 기동까지 걸리는 평균 시간
- 얼마나 빨리 가용성을 회복할 수 있는지를 나타냄
- MTTR = 총 복구 시간 / 고장 횟수
- ex) 장애 4번 동안 복구에 총 20시간이 걸렸다면 → MTTR = 20 / 4 = 5시간 → 한 번 장애 발생 시 평균 5시간 다운타임
- MTBF vs MTTR
- MTBF → 얼마나 자주 고장이 나는가 (신뢰성 지표)
- MTTR → 고장이 났을 때 얼마나 빨리 고치는가 (유지보수성 지표)
- 두 지표는 시스템 가용성(Availability) 계산에 활용된다.
- Availability = MTBF / MTBF + MTTR
- 운영 요구 사항
- 24*365 운영, 백업 테스트 및 검증, 데이터베이스의 변경, 백업 데이터의 보관 장소 등
- 기술적 고려 사항
- 하드웨어, 소프트웨어의 구성, 백업 주기 결정을 위한 트랜잭션 주기, 데이터의 양 등
- 경영진 합의
- 경영진에서 기대하는 시스템의 가용성, 백업 및 복구 절차에 대한 이해, 백업을 위한 리소스 확보 등
💡 백업 - 파일 변경이 잘 되지 않는 시간대에 백업 전략을 수립해야 한다.
Tibero 동작 방식의 이해
Transaction Durability
- Committed Transaction MUST Survive failures (Recoverable)
- 데이터 입력/수정 작업은 COMMIT을 수행하면 변경된 내용이 확정되어 Durability를 확보하게 된다.
- 데이터는 Durability가 확보가 안되어 있으면 유실될 수 있다.
- 데이터가 어떻게 하면 날아가지 안혹 안전하게 보관할 수 있을까?
- 메모리에만 반영되면 장애 시 데이터가 유실 될 수 있기 때문에 영속 저장 장치에 반드시 기록해야 한다. 이때 사용되는 것이 Redo Log(로그 기록)이다.
- Commit이 되는 시점에 데이터 변경이력을 파일에 기록함으로써 Durability를 확보한다.
Logging
- Redo Log Buffer : TSM에 redo 데이터를 저장하기 위한 영역 → 데이터베이스의 모든 변경이력을 메모리에 저장
- Redo Log File : Recovery를 위해 가장 중요한 파일 → 메모리에 저장된 변경 이력을 사라지지 않도록 파일로 저장
- Archive : archive log mode 시 redo logfile을 별도의 위치에 backup
관련 background process
- DBWR, RCWP ( tibero 6 FS07 ~ )
- DBWR, RECO ( tibero6 ~ tibero6 FS06 )
- LGWR, DBWR, CKPT, LARC ( ~ tibero5 )
⭐️ Redo 저장 대상 범위
1) Physical Logging (물리적 로깅)
데이터 변경이 일어날 때마다 해당 Block 전체를 Redo Log에 남긴다.
변경 작업이 발생할 때마다 Block Size 만큼의 로그가 남아 많은 양 유지가 필요하다.
실제 데이터 블록의 변경된 내용(변경 전/후 이미지나 REDO 정보)을 로그에 기록
장점 : Recovery시 단순히 블록에 그대로 반영하면 되기 때문에 복구가 빠르고 간단하다는 장점이 있다.
단점 : 로그 사이즈가 크다.
2) Logical Logging (논리적 로깅)
UPDATE, DELETE 같은 OPERATION 을 LOG에 남기는 방법으로, 여러 Physical Block들에 대한 수정을 하더라도 OPERATION만 기록되어 Logging 양이 적다.
반드시 순서대로 Change Apply (Recovery때 Log Apply 어려움)
▶️ 논리적 로깅에는, '어느 블록(Block) 몇 번째 Row Slot이 바뀌었다.' 같은 물리적 위치 정보가 들어있지 않고, '이 연산 그대로 다시 실행하라' 는 의미마 남는다. Logical Log는 Opertaion만 기록되어 있기 때문에, 장애가 발생시 DBMS SQL을 모두 순차적으로 실행해야 한다.
장점 : 로그 양이 적다( Operation 하나로 여러 블록 변경을 커버할 수 있다. )
단점 : 복구 시 반드시 순서대로 재적용해야 하며, 인덱스/트리 구조가 변하면 복잡해진다. 또한, 동시에 다른 트랜잭션이 섞여 있으면 복구가 어렵다.
3) Physiological Logging
Physical Logging과 Logical Logging의 장점을 합친 형태
Block의 Physical Change를 기록하는 Change Vector 들로 구성된 REDO RECORD
Change Vector는 Atomic Block Change로, Redo Record는 Atomic Database Change
블록에 대해서는 Physical 하게, 블록 내부 변경 내역은 Logical 하게 기록
Redo Log는 항상 특정 Block을 지정하며, 그 Block 안에서 어떤 Row/Slot/Column을 어떻게 바꿨는지는 논리적 연산으로 기록한다.
💡 Change Vector / Redo Record
Change Vector
- Redo Log의 최소 단위
- 하나의 Atomic Block Change(블록 내에서 더 쪼갤 수 없는 단일 변경)
- 예 : Block #100의 Row Slot 3 → SAL 값을 800 →900으로 바꿈
Redo Record
- 하나 이상의 Change Vector를 모아 놓은 것
- Atomic Database Change (트랜잭션의 한 DB변경 단위)
- 예 : UPDATE문 하나가 여러 블록 (Row/Index 블록 등)에 영향을 줄 수 있는데,
- Data Block 변경 Change Vector
- Index Block 변경 Change Vector
- Undo Block 변경 Change Vector
- → 이들을 합친 것이 하나의 Redo Record
※ 티베로는 Physiological Logging 방식으로 동작한다.
데이터는 커밋할 때 Durability를 확보한다. 이것과 관련있는 것이 Redo Log - Redo Log가 기록될 때는 변경 이력만 기록하는 Logical, Block 전체를 기록하는 Physical Logging 이 있다.
기본적으로 Physiological Logging을 하며, 특정 상황에서 Physical Logging을 한다.
특정상황 예시 ) Begin Backup ~ End Backup 사이 시점에서 대상 테이블스페이스의 특정 데이터 블록을 변경하는 경우 Physical Logging 방식으로 로깅한다.
Redo 저장 시 발생
Page fix rule
데이터 블록을 수정하기 전에 반드시 블록에 대한 LOCK을 설정하고, 실제 데이터 버퍼 (Data Buffer)를 수정하기 전에 Redo Record를 먼저 생성한다는 규칙이다.
Redo Log는 복구를 위한 최소 단위이기 때문에, 블록이 변경되면 그 변경 이력이 Redo에 반드시 남아야 Durability를 보장할 수 있다.
✅ Redo Record를 먼저 생성하지 않고 데이터 블록을 수정하게 되면, 장애가 발생했을 때 Redo에 기록이 남아있지 않아 복구가 불가능 할 수 있기 때문에 데이터 블록 수정 전에 Redo Record를 생성하는 것이다.
WAL(Write Ahread Logging)
DB의 핵심 규칙 중 하나이다.
데이터 블록이 변경되기 전에 Redo Record가 먼저 Log Buffer에 기록되어야 한다.
예시 :
사용자가 UPDATE 실행 → DB Buffer에 변경 예정
하지만 DBWR이 Dirty Buffer를 디스크에 Write하기 전에, 해당 변경 Redo가 Log Buffer → Log File에 먼저 기록된다.
이유 : 장애가 발생해도 Log에 기록된 변경 사항으로 복구할 수 있도록 하기 위함이다. 데이터 블록을 디스크에 반영하기 전에, 반드시 그 변경 이력을 먼저 로그(Redo)에 기록해야 하낟.
데이터베이스에서 트랜잭션이 UPDATE/INSERT/DELTE 같은 작업을 하면, 먼저 메모리(Buffer Cache)의 블록이 수정된다. 나중에 DBWR이 Dirty Block을 디스크(Datafile)에 Write한다. 만약 메모리에만 반영된 상태에서 DB가 다운되게 되면, 데이터파일에는 반영이 되어 있지 않았기 때문에 데이터가 유실되게 된다. 따라서 장애 복구를 위해 Redo Log(변경이력)을 먼저 기록해 둬야 한다. DB가 재기동되면, Redo Log를 읽어서 Datafile에 적용(Redo Apply)하면 복구가 가능하다.
Redo Log도 Memory에만 기록되어 있으면 안되고, Redo Log File로 디스크에 기록되어 있어야 한다. Commit을 하게 되면 Redo Log Buffer의 내용이 Redo Log File로 저장된다.
Log force at commit
Commit 발생 시 Log Buffer의 Redo entry를 모두 Log file에 Write
Commit 된 데이터의 보장
Online log switch
Online Log 중 다음의 조건을 만족하는 Log file 로 Switching
Database (Controlfile, Redolog file, Datafile) 동기화 방식
1. TSN
- Database의 version 또는 commit version
- Data Concurrency Control, Redo Ordering, Recovery 등에 사용
- Transaction이 commit 될 때 TSN이 generate 된다.
2. Checkpoint
- 주기적으로 또는 사용자의 요청에 따라 메모리에 있는 모든 변경된(dirty) block을 디스크에 쓰는 작업
- 복구에 필요한 logfile의 양을 줄인다.
- Checkpoint 발생 상황
- 모든 로그 스위치 발생시
- 인스턴스가 NORMAL, POST_TX, IMMEDIATE 옵션으로 종료
- 사용자 요청에 따라 수동으로 발생 (ALTER SYSTEM CEHCKPOINT;)
- ALTER TABLESPACE [BEGIN BACKUP | END BACKUP];
- Checkpoint 발생 시, DBWR가 작동하기 전 먼저 LGWR 이 현재 log buffer의 내용을 online log file에 write하여 해당 dirty buffer 에 mark 가 되면, 이 정보를 DBWR이 받아서 모든 marked dirty buffer를 disk에 기록
- Checkpoint는 Checkpoint TSN 이전에 발생한 Online log file내의 모든 변경 사항이 Disk 에 저장되었음을 의미
변경이 필요한 블록이 buffer cache에 그대로 있다가 dirty block들을 모아서 한번에 데이터파일에 작성한다. => checkpoint
이렇게 한번에 데이터파일에 작성하는 것이 효율이 더 좋기 때문이다. 데이터 블록을 데이터파일에 계속 즉시즉시 변경이 있을때마다 쓰게 된다면 변경때마다 Disk I/O가 발생하여 효율적이지 못하기 때문이다.
Backup 개요
시스템 장애 발생시 복원을 하거나, 시스템 작동을 유지하기 위한 절차 또는 기법
관리자는 시스템 장애 시 발생할 손실을 최소화하고 복구 가능한 상태로 데이터베이스를 운용해야 한다.
- 최소 한달에 한 번 데이터베이스 전체 백업(Full Backup)
- 하루에 한번씩 Export 백업 권장
데이터베이스 관리자는 백업에 대한 정책을 수립하고 꼭 필요한 데이터를 최소한의 양으로 백업
Backup 종류
- 논리적 백업 ➡️ 나중에 복구할 때 쉽고 빠르게 진행할 수 있음 / 장애 범위가 어떠냐에 따라서 백업본도 문제가 발생할 수 있음
- 데이터베이스의 논리적인 단위 백업
- Table, Index, Constraint, Sequence 등
- Export 툴로 백업
- 물리적 백업 ➡️ 복구할 때 다시 로컬 서버로 가져와야 해서 네트워크 속도에 따라 오래걸릴 수 있음
- 데이터베이스르르 구성하는 파일을 운영체제 레벨에서 COPY 명령으로 백업
- datafile, controlfile, archive logfile
✅ 각 하나의 백업만 하는 것이 아니라 둘 다 섞어서 백업해도 된다.
속도 : 파일을 그냥 OS 레벨에서 COPY하는 것이기 때문에 물리적 백업이 더 빠름, 논리적 백업은 파일내에서 논리적인 데이터를 뽑아내서 백업하는 것이기 때문에 물리적 백업보다 느리다.
COPY는 티베로 DBMS가 주체가 아니다. 파일을 가지고 있는 주체는 티베로지만, 복사하는 것은 백업을 작업하는 사람이 하는것이다. (보통 백업 소프트웨어를 사용) 논리적 백업 진행하는 작업자가 tbExport를 통해서 선택적으로 백업할 수 있다. (특정 테이블만 백업)
구분 | 설명 |
NOARCHIVELOG 모드에서의 백업 (Offline Backup/Cold Backup) |
데이터베이스를 구성하는 전체 파일에 대해 운영을 멈춘 상태에서 백업 데이터베이스를 백업 받은 시점으로의 복구만 가능 |
ARCHIVELOG 모드에서의 백업 (Online Backup/Hot Backup) |
운영 중에도 백업가능. Controlfile 생성문, Datafile, Archive logfile 백업 백업된 archive logfile 의 시점에 따라 datafile 백업 시점 이전으로의 복구도 가능 |
Consistent 백업 | 정상적인 Shutdown 후의 Backup |
Inconsistent 백업 | DB 운영 중 Backup 또는 정상종료 되지 않은 상태에서의 Backup |
Backup 대상(Controlfile & Redo logfile)
Controlfile 기능
- 데이터베이스의 구조를 이진 파일 형태로 저장
- 데이터베이스를 mount할 때 반드시 필요
- 파일이 없으면 복구를 하거나 재생성
- 두 개 이상의 contolfile 로 구성 하는 것을 권장, 서로 다른 디스크에 위치
동적뷰
- v$controlfile
다중화 방법
- 데이터베이스를 down(tbdown)
- Controlfile 을 다른 위치로 copy
- $TB_SID.tip 파일에서 CONTROL_FILES 파라미터에 추가
- 데이터베이스를 기동(tbboot)
Redo logfile
- 데이터베이스의 모든 변경 사항을 저장
- 최소한 2개 이상의 redo log group으로 구성
- 각 log group 은 하나 이상의 redo logfile로 구성
동적뷰
- V$LOG, V$LOGFILE
다중화
- Logfile의 손실을 대비하여 각각의 redo log group은 2개 이상의 logfile로 구성할 것을 권장
- Log group의 logfile들은 별도의 disk로 분리
- Log group의 추가
- ALTER DATABASE ADD LOGFILE GROUP 4 ('/home/tibero6/tbdata/redo41.log', '/home/tibero6/tbdata/redo42.log') SIZE 10m;
- Log group에 member 추가
- ALTER DATABASE ADD LOGFILE MEMBER '/home/tibero6/tbdata/redo43.log' TO GROUP 4;
Contolfile 백업
- Offline backup : O/S 의 COPY 명령을 통해 별도의 위치에 copy (티베로 종료하고 백업)
- Online backup : 다음과 같이 controlfile 구문을 생성해 copy (티베로 종료하지 않고 백업)
- 💡 Online 중에는 티베로 인스턴스(프로세스)가 컨트롤 파일을 읽고, 쓰고 있기 때문에, 온라인 중 파일을 COPY하게 되면 컨트롤 파일이 변경되는 와중에 복사하게 된다. 파일의 내용이 깨진채로 COPY가 될 수 있다. 그래서 Online 백업을 하는 방법은 단순 파일 카피가 아닌 구문을 통해서 진행해야 한다.
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS [백업할 파일 경로 및 이름] REUSE NORESETLOGS;
예) 아래와 같은 Controlfile 구문이 담긴 파일 생성
CREATE CONTROLFILE REUSE DATABASE "tibero"
LOGFILE
NORESETLOGS
GROUP 0 ('/home/tibero6/tbdata/log01.log', '/home/tibero6/tbdata/log02.log') SIZE 3M,
GROUP 1 ('/home/tibero6/tbdata/log11.log', '/home/tibero6/tbdata/log12.log') SIZE 3M,
GROUP 2 ('/home/tibero6/tbdata/log21.log', '/home/tibero6/tbdata/log22.log') SIZE 3M
DATAFILE
'/home/tibero6/tbdata/system001.dtf',
'/home/tibero6/tbdata/undo001.dtf'
NOARCHIVELOG
MAXLOGFILES 100
MAXLOGMEMBERS 8
MAXDATAFILES 256;
Backup 방식 차이 (NOARCHIVELOG VS ARCHIVELOG)
NOARCHIVELOG MODE
- 기본적으로 데이터베이스는 NOARCHIVELOG MODE이다.
- Redo logfile은 순환하여 사용되고 log switch가 발생하면 이전의 logfile을 overwrite한다. 이전의 log가 없으므로 트랜잭션 기록 중 최근의 부분만 사용가능하다.
- 백업은 반드시 데이터베이스가 정상 종료된 상태에서 해야 하며 이로 인해 서비스의 중지가 발생한다.
ARCHIVELOG MODE
- Redo logfile은 LOGA(LOG Archiver)에 의해 백업이 완료되기 전에는 사용 불가능하다.
- Archive logfile은 media recovery에 사용가능하다.
- 데이터베이스가 기동 중 백업 가능하다.
ARCHIVELOG Mode의 Backup 방식
Archive log mode
- Log switch시 Redo logfile을 별도의 분리된 위치로 복사하여 저장하여 운영하는 방법
- Archive logfile은 recovery 시 사용되는 매우 중요한 파일
- Online Backup 시 반드시 archive log mode로 운영
관련 Background process / initial parameter
- LOGA(Log Archiver Process) :
- Redo Log 파일을 Archive log 파일로 복사하는 프로세스
- ARCHIVELOG Mode에서만 의미가 있다.
- 일반적으로 DB 기동 시 자동으로 실행되며, Archive log를 지정된 위치에 생성
- 만약 ARCHIVELOG Mode가 아니면, LOGA는 필요하지 않으므로 자동으로 종료된다.
- ARCHIVELOG Mode → LOGA 기동 유지
- NOARCHIVELOG Mode → LOGA 기동했다가 곧바로 종료됨 (아무 할 일이 없기 때문)
- LOG_ARCHIVE_DEST :
- archive logfile이 저장되는 위치
변경 방법
- 데이터베이스 down (tbdown)
- 데이터베이스를 mount 모드까지 기동
- $ tbboot mount
- SYS 유저로 접속하여 archive log mode 로 변경
- $ tbsql sys/tibero
- SQL > ALTER DATABASE ARCHIVELOG;
- 데이터베이스 종료 후 재기동
Archive log mode 확인
- V$DATABASE : LOG_MODE 컬럼 조회
Archive log 정보
- 아카이브 대상 상태 이해
- V$ARCHIVE_DEST_FILES : LOG_ARCHIVE_DEST 내의 archive log files의 정보 표시
- V$ARCHIVED_LOG : Archive log 정보 표시
Archive log 대상 지정($TB_SID.tip)
- LOG_ARCHIVE_DEST
✅ Archive Logfile도 백업 대상임으로, Archive Logfile 저장 사이즈는 하루 발생하는 Redo log 발생량을 고려하여 설정해야 한다.
'Database > Tibero' 카테고리의 다른 글
[Tibero] tbImport/tbExport utility (간략) (0) | 2025.09.03 |
---|---|
[Tibero] Tibero 데이터베이스 유지관리 [4] 로그 및 세션 관리 (0) | 2025.08.05 |
[Tibero] Tibero 데이터베이스 유지관리 [3] TIP 파일과 메모리 (1) | 2025.08.05 |
[Tibero] Tibero 데이터베이스 유지관리 [2] 티베로 메모리 구조 (5) | 2025.08.05 |
[Tibero] Tibero 데이터베이스 유지관리 [1] 프로세스 구조 (2) | 2025.07.30 |