Home > 고객센터 > 복구관련 자료실

복구관련 자료실

게시글 검색
MS-SQL Backup에 관하여
관리자 조회수:1494
2018-01-31 08:38:40

MS-SQL 데이터베이스는 DB의 데이터들을 두 가지 형태로 저장합니다.

하나는 실제 데이터들이 저장되는 MDF파일이고 다른 하나는 DB에 행해진 작업들에 대한 로그 데이터들을 저장하는 LDF파일입니다.

LDF파일을 이용하여 데이터의 복구작업이 가능합니다.

LDF즉 Transaction log file의 모드에 따라서  .mdf 파일은 수백메가 수준인데 .ldf 파일이 무려 수십 기가가 넘게 될 수도 있습니다.

그렇기 때문에 LOG파일도 적절히 관리를 해주어야 하고 DB데이터도 적절한 백업정책을 수립해야 합니다.

 

 

 

 

  • SQL Server DBA가 수행해야 할 세가지 백업

 

 DB가 깨졌을 때를 대비하여 DBA는 다음의 세가지 백업을 수행해야 합니다.

 

1) Full Backup

말 그대로 풀 백업입니다. .mdf 파일에 들어있는 모든 데이터를 백업받습니다.

그런데 풀백업이 이루어지는 동안에도 트랜잭션이 계속 진행되기 때문에 실제로는 아직 커밋되지 않은 작업이 백업시 포함될 수 있습니다. 나중에 이 백업을 리스토어했을 때 커밋되지 않은 데이터가 들어있다면 좀 이상해지겠죠? 그래서 실제로 풀백업을 받을 때는 현재 진행중인 트랜잭션에 대한 트랜잭션 로그도 함께 백업됩니다.

풀 백업이 중요한 것은, 풀 백업이 보관되어 있지 않다면 Differential Backup이나 트랜잭션 로그 백업을 아무리 열심히 받았어도 아무 소용이 없기 때문입니다.

 

2) Differential Backup (차등 백업)

이건 OS 백업받을 때의 Differential Backup과 유사합니다. "가장 마지막에 Full Backup 받은 이후의 변경 부분에 대한 백업"입니다. 마지막에 받은 Differential Backup 이후의 변경사항을 백업받는 것이 아닙니다. (SQL Server에는 Incremental Backup이란 개념이 없습니다.)

만약 10월 1일에 풀백업을 받은 후 10월 5일, 10일 15일에 Differential 백업 을 받았다면 DB를 15일자로 되돌리기 위해서는 10월 1일 풀백업을 Restore한 후 15일자 Differential 백업을 Restore하면 됩니다. 

 

3) Transaction Log Backup (로그 백업)

트랜잭션 로그 백업에 대해 이해하려면 먼저 트랜잭션 로그란 놈에 대해서 이해를 해야겠죠?

트랜잭션 로그란 SQL Server에서 실행되는 모든 SQL문을 기록한 로그입니다. 어느 세션이 어떤 SQL을 실행했는지가 순차적으로 기록됩니다. 우리가 트랜잭션을 Rollback 시켰을 때 Begin Tran 시점 이전으로 되돌릴 수 있는 것은 트랜잭션을 시작한 이후의 모든 작업내용이 트랜잭션 로그에 기록되어 있기 때문입니다.

로그 백업은 위의 데이터 백업과는 다른 몇가지 특성이 있습니다.

① 일단 백업된 트랜잭션 로그는 자동으로 삭제됩니다. 이때 ldf파일 사이즈가 줄어들지는 않지만 ldf 내에서 로그가 삭제되기 때문에 해당 ldf 파일에는 새로운 로그를 기록할 수 있는 빈 공간이 확보됩니다. 따라서, 주기적으로 트랜잭션 로그를 백업받으면, 별도로 로그를 삭제하지 않더라도 ldf 파일이 계속 커지는 것을 방지할 수 있습니다.

 

② 트랜잭션 로그는 가지고 있는 최신 풀백업 혹은 풀백업 + DifferentialBackup 세트로 부터 복원을 원하는 시점까지의 모든 백업본이 존재하지 않으면 아무 의미가 없습니다. 백업받은 로그 중 한 세트라도 분실하면 소용 없다는 의미입니다. 물론 풀백업을 한번도 받은적이 없다면 트랜잭션 로그는 소용없습니다.

 

③ 트랜잭션 로그가 온전하다면 Fault가 발생한 Database를 Fault 발생 직전의 시점으로 복원할 수 있습니다. 또한, 특정 시점으로의 Rollback 등 미세한 복원이 가능합니다.

 

  •  SQL Server의 Transaction Log복구 모델

 

SQL Server에서는 다음의 세가지 복구모델을 지원합니다. 이 복구모델에 따라 트랜잭션 로그를 기록하고 보관하는 방식이 달라집니다.

 

 

1) 전체 (Full)

모든 작업에 대해 트랜잭션 로그가 기록되고, 필요시 복원하거나 원하는 시점까지 복원이 가능합니다. 기본 설정이며, 로그가 가장 많이 기록되고 성능은 가장 떨어집니다.

2) 대량로그 (Bulk Log)

전체 모델과 거의 유사하나 대량의 로그가 기록되는 다음의 작업들에 대해 로그를 남기지 않기 때문에 로그가 더 적게 남고, 성능이 전체 모델보다 더 높습니다.

3) 단순 (Simple)

단순 복구모델에서는 DBMS가 메모리와 HDD 의 Sync를 맞추는 시점마다 Sync 후 트랜잭션 로그를 삭제합니다. 따라서, 트랜잭션 로그를 사용한 DB 복원이 불가능하며, 장애 발생시 풀백업 혹은 Differential 백업을 받은 시점까지만 복원이 가능합니다.