MSSQL 2008/MSSQL 관리

백업과 복구 - 백업의 종류 및 복구 모델

본클라쓰 2010. 12. 14. 20:26

 

1. 전체백업(Full Backup)

 

 전체 백업은 데이터베이스 전체(데이터베이스 개체, 시스템 테이블, 데이터 등 모든 정보)를 백업합니다. 또한, 데이터베이스의 내용과 더불어 백업이 진행되는 동안 발생되는 트랜잭션 로그 중 필요한 부분도 백업됩니다. 전체 백업은 전체 복구 모델, 대량 로그 복구 모델, 단순 복구 모델 모두 가능합니다.

 전체 백업은 전체를 백업 받기 때문에 대용량의 데이터베이스에서는 상당한 시간이 요구됩니다. 만약 100GB의 데이터베이스라면 전체 백업을 위해서 100GB의 다른 매체 공간이 필요합니다. 만약, 일주일에 한번씩 전체 백업을 받고 10주의 백업데이터를 보관한다면 1TB의 저장 공간이 필요한 셈입니다. 그러므로 소용량의 DB나 트랜잭션 로그가 중요하지 않는 데이터베이스가 아니라면 전체 백업만을 사용하는데 무리가 있습니다.

 

 전체 백업을 받기 위해서는 데이터베이스의 크기를 알고 있어야 할 필요가 있습니다. 이는 시스템 프로시저인 sp_spaceused를 사용하여 알 수 있습니다.

EXEC sp_spaceused

 

 전체 백업을 할때 경로로 지정한 폴더가 존재하지 않으면 오류가 발생하므로 미리 폴더를 생성해줘야 합니다. 전체 백업 명령어는 아래와 같습니다.

BACKUP DATABASE [데이터베이스] TO DISK = "C:\백업폴더\backup.bak"

 

 전체 백업을 받아야 하는 경우는 처음 데이터베이스를 생성했을 때, 로그를 강제로 비웠을 때, 데이터베이스에 변경(ALTER DATABASE 구문 실행 후)이 발생했을 때 입니다.

 

  

2. 차등백업(Differential Backup)

 

 차등 백업은 마지막으로 시행된 전체 백업 이후에 변경된 모든 데이터를 백업하는 것입니다. 그러므로 전체 차등 백업은 전체 백업을 받은 이후에 수행할 수 있습니다.

 

 

 

 

복구 모델의 종류

 

1. 전체 복구 모델(FULL)

 

 전체 복구 모델은 데이터베이스에 문제가 발생했을 때 문제가 발생한 시점까지 복구가 가능한 모델이다. 전체 복구 모델은 데이터가 변경되는 모든 작업과 내용이 로그 파일에 기록됩니다. 전체 복구 모델은 모든 종류의 백업(전체, 차등, 로그백업 등)이 가능합니다.

 

2. 대량 로그 복구 모델(Bulk Logged)

 

 전체 로그 복구 모델은 전체 복구 모델과 거의 동일하지만, 대량 로그 작업인 CREATE INDEX, SELECT INTO 등 작업이 발생하면 로그 파일에 이러한 작업이 일어났다는 것만 기록할 뿐 추가되거나 변경된 내용은 로그 파일에 기록하지 않습니다. 전체 복구 모델과 마찬가지로 문제가 발생한 시점까지는 복구가 가능하지만, 원하는 위치로의 복구는 안 됩니다. 대량 로그 복구 모델은 자주 사용되는 모델이 아니지만 대량 로그 작업이 있을 경우 발생되는 많은 내용을 로그 파일에 기록하지 않기 때문에 전체 복구 모델에 비해 속도가 빠르다는 장점이 있습니다.

 

3. 단순 복구 모델(Simple, SQL서버의 기본 복구 모델)

 

 로그 파일에는 아무 것도 기록되지 않는다고 생각하면 됩니다. 사실 아무것도 기록되는 것은 아니지만 SQL서버가 로그 파일을 관리해 알아서 비우기 때문에 사용자는 로그 파일의 내용에 간섭할 수 없습니다. 따라서 전체 백업과 차등 백업만 가능하며 로그 백업은 할 수 없습니다.

 단순 복구 모델(Simple)은 교육 환경이나 개발 환경과 같은 연습용 환경으로, 유실되어서는 안되는 중요한 데이터는 입력하지 않는 환경이나 장애로 인해 시스템을 복구해야 할 때 데이터에 어느 정도 손실이 일어나도 무관한 환경에서 사용 가능합니다. 하지만, 시스템을 365일 24시간 무정지로 운영하는 환경이나 장애 및 복구 중에 데이터의 손실이 절대 일어나면 안 되는 환경, 여러 사용자가 데이터를 자주 입력하고 변경하는 환경에서는 전체 복구 모델을 사용해야 합니다.

 

 

 

현재 적용되는 있는 데이터베이스 복구 모델 확인 방법

SELECT DATABASEPROPERTYEX('DB명', 'Recovery')

 

현재 적용되고 있는 데이터베이스 복구 모델 변경 방법

ALTER DATABASE [데이터베이스] SET RECOVERY [model]