MSSQL에서 대용량의 데이터베이스를 관리할때 백업 과 복원시 많은 용량을 전부 백업 및 복원 하는 것이 아닌 일부의 파일 그룹만 백업, 복원을 하여, 시간 및 저장공간을 줄일 수 있습니다.
저는 이 기법을 로그 DB에 사용하기 위해서 테스트하였으며, 용도는 사용하시는 분의 요건에 맞게 사용하면 될 듯 합니다.
로그DB에서 각 일별로 파일그룹,파일을 생성하여 일별로 나눈 뒤 차후에 파일그룹별로 백업을 수행합니다.
그렇게하여, 일자별 BACKUP파일을 만들고, 복원시 해당 BACKUP파일만 복원하여 관리 하고자 하여, 테스트를 하였습니다.
테스트의 주요 확인 사항은 다음과 같습니다.
1. 파일그룹 백업은 파일그룹 단위로 가능한가?
2. 파일그룹 단위로 백업이 성공시 복원이 가능 한가?
3. 데이터는 정상적으로 조회가 가능 한가?
결론적으로 위의 모든 사항은 YES 입니다.
다음은 테스트 과정을 정리 하였습니다.
1. 다수의 파일그룹 및 파일을 가진 데이터베이스 생성
파일 그룹을 만들고, 파일(NDF)를 생성 시 파일그룹을 지정해 주면 됩니다.
나중에 백업시 FRG_201501~03단위로 백업을 합니다. 이점이 매우 중요한데, 만약에 내가 FGT_1,2를 한번에 백업하여 보관하고 싶다고 한다면 처음부터 작업시 파일그룹을 1개로 묶어서 지정해야 합니다.
파일그룹 백업시 FRG_201501을 백업한 파일, FRG_201502를 백업한 파일 2개를 한 데이터베이스 올릴수 없습니다.
(실제 해봤으나 불가능 / 가장 마지막에 복원 DB로 덮어쳐짐)
하지만 FRG_201501 / FRG_201502 를 각각 백업하여, 각각 다른 DB로 복원한다면 이것은 가능 합니다.
즉, 파일그룹백업은 파일단위(MDF,NDF)가 아닌 파일그룹 단위로 백업이 되므로, 그룹지정은 신중하게 선택해야 합니다.
2. 각 파일그룹별 테이블 생성 및 데이터 입력
-- 파일그룹별테이블생성 create table FRG_201501 ( seq int identity(1,1) ,usr_name varchar(30) )on FRG_201501 go create table FRG_201502 ( seq int identity(1,1) ,usr_name varchar(30) )on FRG_201502 go create table FRG_201503 ( seq int identity(1,1) ,usr_name varchar(30) )on FRG_201503 go |
--cluserted 인덱스생성 create clustered index CLD_FRG_201501 on FRG_201501(seq) create clustered index CLD_FRG_201502 on FRG_201502(seq) create clustered index CLD_FRG_201503 on FRG_201503(seq) |
파일 그룹을 지정하여, 각각 파일그룹에 1개의 테이블을 생성합니다.
생성 된 파일 그룹 중에 FRG_201502 테이블 즉, FRG_201502 파일그룹에만 데이터를 입력 합니다.
--데이터입력 insert into FRG_201502(usr_name) values ('주형권') go 1000 |
3. FRG_201502 파일그룹 백업
-- FRG_201502 파일그룹백업 backup database FileGroupTest1 filegroup = 'PRIMARY',filegroup ='FRG_201502' to disk = 'G:\JHK_BACKUP_TEST\FRG_201502.bak' with compression ,init |
로그 DB이기 때문에 저장공간이 가장 큰 쟁점이므로, 압축 백업을 수행하였습니다.
4. FRG_201502 파일그룹 복원
restore filelistonly from disk ='G:\JHK_BACKUP_TEST\FRG_201502.bak' |
보시면 논리적 파일은 총 5개의 파일이 존재합니다. 분명히 FRG_201502만 백업한 백업파일인데, FGT_1,3이 존재합니다.
하지만 해당 파일은 복원을 하려고, with move를 이용하여 폴더를 지정해도 복원이 되지 않습니다.
보시면 아시겠지만 현재 PRIMARY 그룹인 FileGroupTest1 , FGT_2 , FileGroupTest1_log만 존재 합니다.
FRG_201502 파일그룹 복원 스크립
restore database Restore_test filegroup = 'PRIMARY' ,filegroup = 'FRG_201502' from disk = 'G:\JHK_BACKUP_TEST\FRG_201502.bak' with move 'FileGroupTest1' to 'D:\JHK_MSSQL_DATA\FileGroupTest1.mdf' ,move 'FGT_2' to 'D:\JHK_MSSQL_DATA\FGT_2.ndf' ,move 'FileGroupTest1_log' to 'D:\JHK_MSSQL_DATA\FileGroupTest1_log.ldf' |
복원 후 테이블을 확인해 보면 다음과 같이 보입니다.
현재 위의 테이블을 보면 FRG_201501 ~03까지 존재 하는데, FRG_201501,03은 아래의 오류가 나면서 조회가 불가능 합니다.
참조
MSDN
https://msdn.microsoft.com/ko-kr/library/ms173778.aspx
https://msdn.microsoft.com/ko-kr/library/aa337540.aspx
https://msdn.microsoft.com/ko-kr/library/ms189906.aspx
파일 및 파일 그룹 백업(SQL Server)
msdn.microsoft.com
본문으로 이동기타 자료
http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005Admin&intSeq=2249
파일 그룹 테스트 - > 파일 그룹 백업 / 복원 :: SQLLeader.com
www.sqlleader.com
본문으로 이동