SQL Server/SQL Server Tip

백업 미디어 세트에 압축 백업 추가하기

SungWookKang 2015. 7. 23. 09:15
반응형

백업 미디어 세트에 압축 백업 추가하기

 

  • Version : SQL Server 2008, 2008R2, 2012

 

SQL Server 2008부터 도입된 압축 백업을 사용할 때 기존의 압축되지 않은 미디어 백업 세트에 추가하려고 시도하면 오류가 발생한다. 백업 미디어 세트와 백업 설정에 대해서 알아 보자.

 

이번 포스트는 SQL Server Premier Field Engineer Blog에 게시된 내용으로 필자가 읽고 이해한 내용을 정리하였으며 번역의 오류나 기술적 오류가 있음을 미리 알려둔다. 자세한 내용은 원문을 참고하길 바란다.

 

백업 압축(http://msdn.microsoft.com/ko-kr/library/bb964719(SQL.100).aspx)에 대한 문서를 보면 압축된 백업과 압축되지 않은 백업은 미디어 세트에 동시에 존재 할 수 없다라는 제한사항이 있다.

 

기존 미디어 세트에 압축 백업을 추가할 때 미디어 세트는 압축 설정을 상속한다. 백업 압축에 의존하는 경우 sp_Configure를 설정하면 기존 미디어에 추가 되고 다른 압축 상태에서 백업을 끝낼 수 있다.

 

SQL Server 2008 Enterprise 이상에서 백업 명령어 구문에 WITH COMPRESSION 또는 WITH NO_COMPRESSION을 지정하지 않는 경우 sp_Configure를 설정하여 백업압축에 대한 기본 값을 설정 할 수 있다. (기본값 0 – 압축백업 하지 않음, 1 – 압축 백업)

 

새 미디어 세트를 만들 때 미디어 헤더에 압축 백업인지 기록 한다. 기존 미디어 세트로 압축 백업을 할 경우 압축 설정이 미디어 세트와 같을 경우만 가능하다. 따라서 압축 백업의 여부에 따라 백업 할 때의 동작 차이가 있다.

 

다음 표를 참고하여 압축된 백업과 일반 백업에 대한 미디어 세트 구성을 확인 할 수 있다.

 

실습을 통하여 미디어 세트와 백업의 관계에 대해서 알아보자. 다음 스크립트를 실행하여 현재의 백업에 대한 sp_configure 상태를 확인 한다.

(0 – 압축 안함(기본 값), 1 – 압축)

-- Note compression value, by default it should be 0

sp_configure 'backup compression'

 

 

FORMAT 옵션을 사용하여 백업 세트를 생성 한다.

-- Initial Backup completes successfully

BACKUP DATABASE SW_TEST TO DISK = N'E:\DB_Backup\testbackup.bak' WITH FORMAT, INIT,

NAME = N'testbackup-Full Database Backup', SKIP,NOUNLOAD, STATS = 10

GO

 

-- Check the backup and the header, not the Compressed value

restore headeronly from DISK = N'E:\DB_Backup\testbackup.bak'

 

 

위에서 일반 백업을 사용하여 미디어 세트를 생성하였으며 이번에는 압축 백업을 사용하여 기존 미디어 세트에 추가하여 보자.

-- Now backup using "with compression" and it will fail as backups ( compressed and non compressed cannot be mixed within the same media set )

BACKUP DATABASE SW_TEST TO DISK = N'E:\DB_Backup\testbackup.bak' WITH

NAME = N'testbackup-Full Database Backup', SKIP,NOREWIND,NOUNLOAD

,COMPRESSION , STATS = 10

GO

 

백업 구조의 불일치로 인하여 다음과 같은 오류가 발생 한다.

메시지 3098, 수준 16, 상태 2, 2

미디어가 호환되지 않는 구조로 포맷된 'COMPRESSION'() 요청되었으므로 백업을 수행할 없습니다. 미디어 세트를 추가하려면 'COMPRESSION'() 생략하거나 'NO_COMPRESSION'() 지정하십시오. 또는 BACKUP 문에서 WITH FORMAT 사용하여 미디어 세트를 만들 있습니다. 기존 미디어 세트에서 WITH FORMAT 사용하면 모든 백업 세트를 덮어씁니다.

메시지 3013, 수준 16, 상태 1, 2

BACKUP DATABASE() 비정상적으로 종료됩니다.

 

Sp_configure 설정을 압축 백업 사용으로 변경 한다.

-- Turn on default backup Compression at the server level

sp_configure 'backup compression',1

go

 

reconfigure

go

 

 

다음 스크립트를 사용하여 백업을 실행 하고 생성된 백업 파일의 헤더 정보를 살펴 보자. 우리의예상대로 라면 일반 백업 미디어 세트에 압축된 백업 미디어세트를 추가하려고 하기 때문에 오류가 발생할 것이다. 하지만 정상적으로 백업이 수행 되었다.

BACKUP DATABASE SW_TEST TO DISK = N'E:\DB_Backup\testbackup.bak' WITH

NAME = N'testbackup-Full Database Backup', SKIP,NOREWIND,NOUNLOAD , STATS = 10

GO

 

-- Check the backup and meadia set header

restore headeronly from DISK = N'E:\DB_Backup\testbackup.bak'

 

Sp_configure에서 백업 압축을 기본 속성으로 설정되어 있지만 기존 백업 미디어의 설정을 상속받아 추가 된 것을 확인 할 수 있다.

 

다음 스크립트를 사용하여 FORMAT 옵션을 사용하여 새로운 미디어 세트를 생성하고, INIT 옵션을 사용하여 기본의 벡업 세트를 덮어쓴다. 백업 파일의 헤더 정보를 살펴보면 다음과 같이 압축됨으로 표시된다. (현재 sp_configure 설정)

-- If you create a new media set using the FORMAT option, then the current compression setting is inherited

-- Create a new media set using FORMAT Or by specifying a new file

BACKUP DATABASE SW_TEST TO DISK = N'E:\DB_Backup\testbackup.bak' WITH FORMAT, INIT

, NAME = N'testbackup-Full Database Backup', SKIP,NOUNLOAD, STATS = 10

GO

-- Check the backup and meadia set header

restore headeronly from DISK = N'E:\DB_Backup\testbackup.bak'

 

 

다음 스크립트를 사용하여 sp_configure의 기본 값을 0(압축 백업 안함)으로 설정하고 FORMAT 옵션 없이 기존 미디어 세트에 압축을 진행한다. 그리고 INIT 옵션을 사용하여 덮어 쓴다.

-- Toggle the backup compression setting back to 0

sp_configure 'backup compression',0

go

 

reconfigure

go

 

-- backup to the same media set with INIT

BACKUP DATABASE SW_TEST TO DISK = N'E:\DB_Backup\testbackup.bak' WITH INIT

, NAME = N'testbackup-Full Database Backup', SKIP,NOUNLOAD, STATS = 10

GO

 

-- Check the backup and meadia set header

-- Note that even though we changed backup compression to 0, the old media header is preserved which has it as 1, and the backup goes as compressed

restore headeronly from DISK = N'E:\DB_Backup\testbackup.bak'

 

 

백업 파일의 헤더 정보를 살펴보면 기존의 미디어 세트 속성(압축 설정)에 따라 압축 설정이 1로 표시 된 것을 확인 할 수 있다.

 

또 다른 제약사항은 압축 백업과 NT 백업이 공존 할 수 없다는 것이다. (TAPE에 대한 백업은 원문을 참고 한다.)

 

 

[참고자료]

http://msdn.microsoft.com/ko-kr/library/bb677250(v=sql.100).aspx

 

 

2013-10-25 / 강성욱 / http://sqlmvp.kr

 

 

 

반응형