데이터베이스는 사용자 실수, 하드웨어 고장, 자연재해 등 다양한 이유로 손상되거나 유실될 수 있습니다. 이러한 상황에 대비해 백업을 미리 만들어 두면, 장애가 발생하기 이전 상태로 데이터베이스를 복구할 수 있습니다.
데이터베이스 백업이란 데이터베이스의 정보와 데이터를 복제하여 별도의 백업 서버에 저장해 두는 것을 의미합니다. 이때 트랜잭션 로그도 함께 저장해야 하는데, 트랜잭션 로그 없이는 데이터 자체가 무의미해지기 때문입니다.
데이터베이스 장애의 주요 원인
데이터베이스에는 여러 가지 원인으로 장애가 발생할 수 있으며, 그렇기 때문에 체계적인 백업 및 복구 계획이 반드시 필요합니다. 대표적인 장애 원인은 다음과 같습니다.
- 사용자 오류 — 사용자의 실수는 데이터베이스에서 데이터가 손실되거나 손상되는 가장 흔한 원인입니다. 오류를 바로잡으려면 문제가 발생하기 이전 시점으로 데이터베이스를 복원해야 합니다.
- 하드웨어 고장 — 데이터베이스는 여러 위치에 분산된 여러 개의 하드 디스크에 저장됩니다. 이러한 드라이브가 고장 나면 데이터베이스가 손상될 수 있으므로, 주기적인 점검과 교체가 중요합니다.
- 재난 상황 — 홍수나 지진 같은 자연재해, 또는 데이터베이스 해킹 같은 악의적인 공격도 장애의 원인이 됩니다. 어떤 경우든 데이터가 손상될 수 있으므로 백업은 필수입니다.
데이터베이스 백업 방법
데이터베이스에서 사용되는 대표적인 백업 방식은 다음 세 가지입니다.
- 전체 백업(Full Backup) — 데이터와 트랜잭션 기록을 포함한 데이터베이스 전체를 복사하는 방식입니다. 모든 내용을 담기 때문에 많은 시간이 소요되는 단점이 있습니다.
- 트랜잭션 로그 백업(Transaction Log Backup) — 트랜잭션 로그만 백업하는 방식입니다. 새로운 백업 기록이 생성되면 이전 로그 정보를 삭제하여 백업 파일 크기를 최소한으로 유지합니다.
- 차등 백업(Differential Backup) — 전체 백업처럼 데이터와 트랜잭션 기록을 모두 저장하지만, 마지막 전체 백업 이후 변경된 내용만 저장합니다. 덕분에 백업 파일 크기를 줄일 수 있습니다.
데이터베이스 복구 방법
데이터베이스 복구에는 주로 두 가지 방법이 사용됩니다.
- 로그 기반 복구(Log-based Recovery) — 모든 트랜잭션 로그를 안전한 영역에 저장해 두었다가, 시스템 장애 발생 시 로그를 활용해 데이터를 복구하는 방식입니다. 트랜잭션 실행 전에 거래 시간, 데이터 등 모든 로그 정보를 먼저 기록해 두어야 합니다.
- 섀도우 페이징(Shadow Paging) — 트랜잭션이 완료되면 그 결과가 자동으로 안전하게 저장되는 방식입니다. 따라서 트랜잭션 도중 시스템이 충돌하더라도 해당 트랜잭션의 변경 사항은 데이터베이스에 반영되지 않습니다.