SQL Server에서의 백업 종류 3가지를 알기 전에,
먼저 MSSQL에서 데이터가 어떤 식으로 저장되는지부터 알아야 할 필요가 있다.
MSSQSL은 3가지의 파일형식으로 데이터를 저장한다. 각각 MDF, NDF, LDF 라는 파일 형식으로 데이터가 저장되는데, 이렇게 다른 파일 형식으로 저장되는 이유는, DB가 형성될 때에 데이터 파일과 로그 파일을 서로 같은 파일로 섞이지 않게 하기 위함이다.
이를 위해 MSSQL에서는 다음과 같이 3가지 타입의 파일로 나뉜다.
MSSQL 3가지 파일 타입
- Primary Data files
Primary Data file은 DB의 시작점이며, DB의 다른 파일을 가리키고 있다. 실제 데이터들이 저장되는 파일이다.
모든 DB는 Primary Data file을 가지고 있다.
보통 .mdf 확장자를 가진다.
- Secondary Data files
Secondary Data files은 primary Data file 이외의 데이터 파일로 구성된다. Secondary Data file이 아예 존재하지 않는 DB도 있을 수 있으며, 여러 개 있는 DB도 존재할 수 있다.
보통 .ndf 확장자를 가진다.
* "Secondary Data Files는 왜 존재하지?!"
=> Data file에 데이터를 저장할 때, 파일 그룹을 나눠 저장하면 하나의 파일그룹을 사용할 때보다 이점이 있다.
ex) 어떤 DB에 테이블이 10개 있는데, 이 중 3개의 테이블을 가장 많이 사용하고, 나머지 7개의 테이블은 거의 사용하지 않는다고 하자.
이때 데이터베이스를 파일 그룹으로 생성하고, 많이 사용하는 3개의 테이블을 Primary Data File 그룹에 생성해 두고, 나머지 7개의 테이블은 Secondary Data File 그룹에 생성한다.
이후 Primary Data File 그룹과 Secondary Data File 그룹을 물리적인 디스크에서 각각 분리하여 관리하면, DB 서버의 성능을 높일 수 있다!
- Log files
Log file은 DB를 복구하는 데 사용되는 로그 정보가 포함되어 있다. DB는 적어도 하나 이상의 로그 데이터가 있어야 한다.
보통 .ldf 확장자를 가진다.
본론으로 넘어와서, SQL Server의 백업 종류 3가지에 대하여 알아보자.
MSSQL 3가지 백업 종류
- Full Backup
- Full Backup은 말 그대로 전체 백업이다.
- .mdf 파일에 들어있는 모든 데이터를 백업
- Full Backup이 이루어지는 동안에도 트랜잭션이 계속 진행될 수 있는데,
이때 커밋된 트랜잭션에 대한 로그들도 모두 함께 백업된다.
- SQL 구문)
BACKUP DATABASE (DB 이름) TO disk = '(원하는 경로).bak';
ex) BACKUP DATABASE BikeStore TO disk = 'C:\Junho\Backup\BikeStore 백업.bak'; - Differential Backup (차등 백업)
- 가장 마지막에 Full Backup 을 수행한 시점을 기준으로, 이후 변경된 모든 부분에 대한 백업
- 백업 본을 활용한 복구(Restore)시, Full Bakcup본 + Differential Backup본을 모두 백업 소스 파일로 추가 해야 정상 복구가 진행됨.
- SQL Server에는 Incremental Backup (증분 백업)* 이란 개념이 없어,
마지막에 받은 Differential Backup 이후의 변경사항에 대한 백업은 존재하지 않는다.
- SQL 구문)
BACKUP DATABASE (DB이름) TO disk = '(원하는 경로)' WITH DIFFERENTIAL;
* Incremental Backup (증분 백업) : 마지막 백업(어떠한 백업인지 관계없이) 이후 변경된 데이터에 대해서만 백업하는 방식.
- Transaction Log Backup (로그 백업)
- Transaction Log(트랜잭션 로그) : SQL Server에서 실행되는 모든 SQL문을 기록.
어느 세션이 어떤 SQL을 실행했는 지에 대해 순차적으로 기록됨.
- 일단 백업된 트랜잭션 로그는 자동으로 삭제됨. 이때 .ldf 파일 사이즈가 줄어들지는 않지만, .ldf 파일 내에서 백업된 트랜잭션 로그가 사라지기 때문에 새로운 로그를 기록할 수 있는 빈공간이 확보됨.
=> 주기적인 트랜잭션 로그 백업을 통해, 별도로 로그를 삭제하지 않고도 .ldf 파일 사이즈가 계속 커지는 것을 방지할 수 있음.
- 트랜잭션 로그는 복원을 원하는 시점까지의 모든 백업본(Full 백업 + Differential 백업)이 존재하지 않으면 아무 의미가 없다!
- 트랜잭션 로그 백업을 하고자 하는 DB의 복구 모델이 'FULL' 또는 'BULK_LOGGED' 일때만 사용 가능하다.
- 트랜잭션 로그가 온전하다면, Fault가 발생한 DB를 Fault 발생 직전의 시점으로 복원 가능하다.
=> 특정 시점으로의 Rollback 등 미세한 복원이 가능하다는 말이다!
- SQL 구문)
BACKUP LOG (DB 이름) TO disk = '(원하는 경로)';
참고자료
https://m.blog.naver.com/ohmydata00/221197539437
https://hackersstudy.tistory.com/60
'DB > SQL Server (MSSQL)' 카테고리의 다른 글
[MSSQL] 데이터 저장 방식 - Page(페이지), Extent(익스텐트) (0) | 2021.12.03 |
---|---|
[MSSQL] SQL Server 구조(아키텍처, Architecture) (0) | 2021.11.30 |
[MSSQL] 백업에 사용되는 기능과 옵션 (0) | 2021.11.24 |
[MSSQL] 복구 모델(Recovery model) - Full / Bulk-logged / Simple (0) | 2021.11.24 |
[MSSQL] 데이터베이스 백업 & 복구 (단순히 뭔지만 볼때!) (0) | 2021.11.23 |
최근댓글