본 게시물은 개인적인 의견으로 작성되었으니 절대적인 정보가 아닐 수 있습니다. 참고만 하시고 궁금한 사항이 있으시면 연락주세요.

티스토리 뷰

SQL & Windows Azure - CATEGORY

SQL backup to Windows Azure Storage Part 2

AWS-in 2015. 11. 24. 17:21


Windows Azure Blob Storage as database backup

On-Premise 환경에서 Windows Azure Storage(저장소)에 백업하는 방법이 3가지가 있다.


Session1. Backup to URL in SQL Server 2012, 2014

Part 1 : Backup to URL in SQL Server 2012, 2014

Part 1-1 : Backup to URL in SQL Server 2012, 2014 as SSMS

Session2. Backup To Windows Azure Tool

Part 2 : Backup To Windows Azure Tool 로 백업

Part 2-1 : Windows Azure Tool 구성 옵션 암호화/압축 기능

Session3. Managed Backup to Windows Azure

Part 3  : Managed Backup  - 데이터베이스 수준의 관리되는 백업

Part 3-1 : Managed Backup  - SQL 인스턴스 수준의 관리되는 백업


Session2. Backup To Windows Azure Tool

MS에서 무료 제공하는 Tool 이다.

Microsoft® SQL Server® Backup to Microsoft Azure®Tool

https://www.microsoft.com/ko-kr/download/details.aspx?id=40740

설치를 하게 되면 아래와 같이 서비스로 등록이 된다. 설정폴더에 백업파일이 생성이 되면 즉시 서비스가 실행되어

Azure Storage에 저장이 된다.

 

 

[설치하기]

다운로드하여 설치파일을 실행하면 아래와 같다. 규칙에 대한 설정이며, [추가]를 클릭한다.


규칙추가한다. 백업할 경로 및 패턴을 입력한다.

[*.bak] 로 입력하는데 [*.trn]도 백업을 하기 위해서는 [*.*] 로 입력해주면 된다.

   


Windows Azure 저장소의 계정 및 컨테이너를 입력하고 [계정 확인]을 클릭한다.


암호화 및 압축 옵션을 선택할 수 있다. 


규칙완료. 언제든지 수정이 가능하다.


해당 창을 닫고 진행해도 된다.


SSMS에서 쿼리로 백업을 해보자.

 

use master

go

BACKUP DATABASE MoveDB_Azure TO DISK=N'C:\AzureSQLBackup\MobeDB_Azure_20151123.bak';

 

Azure관리자에서 확인해보면 아래와 같이 2개의 파일로 백업이 되었다.

 

백업은 되었는데 뭘 어쪄자는 건지 잘 모르겠다.

좀 더 확인해 보자.

 

로컬에 백업한 파일을 메모장으로 열어보자.

SQL 일반 백업파일은 바이너리형식의 알아볼 수 없는 문자열만 보인다.

 

그러나, 아래 해당 파일은 저장소 관련정보들을 확인할 수 있다. 어떤 의미일까?

내용을 확인해보면 저장소의 백업정보와 백업설정(암호화,압축)에 대하여 정의되어 있다.

 

복원은 어떻게 할까?


일반적으로 업로드 된 백업파일로 복원은 안된다.

--Restore DB1 from backup in Windows Azure Blob Storage

RESTORE DATABASE MoveDB_Azure_2

FROM URL = N'https://ghostbackup.blob.core.windows.net/dbbackups/MobeDB_Azure_20151123-61777d53-63b4-428f-8855-f061fd4583ca.bak'

-- 컨데이터의 해당하는 디비의 URL 탭을 복사하면 된다.

WITH CREDENTIAL = 'MyCredentialName' -- 백업시 생성한 자격증명으로 이용한다.

, Move 'MoveDB' to 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MoveDB_Azure_2.mdf'

, Move 'MoveDB_log' to 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MoveDB_Azure_2_log.LDF'

 

/*

메시지 3271, 수준 16, 상태 1, 줄 32

파일 "https://ghostbackup.blob.core.windows.net/dbbackups/MobeDB_Azure_20151123-61777d53-63b4-428f-8855-f061fd4583ca.bak"에서 복구할 수 없는 I/O 오류가 발생했습니다: Error could not be gathered from Remote Endpoint.

메시지 3013, 수준 16, 상태 1, 줄 32

RESTORE DATABASE이(가) 비정상적으로 종료됩니다.

 

*/

 

그럼 어떻게 복원을 하는지 찾아보자. (포스트 아래에 해답이 있다)

 

우선,

같은 데이터베이스를 다른 경로에 백업을 해보자.

BACKUP DATABASE MoveDB_Azure TO DISK=N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\MobeDB_Azure_20151124.bak';

BACKUP DATABASE MoveDB_Azure TO DISK=N'C:\AzureSQLBackup\MobeDB_Azure_20151124.bak';

/*

파일 1에서 데이터베이스 'MoveDB_Azure', 파일 'MoveDB'에 대해 296개의 페이지를 처리했습니다 .

파일 1에서 데이터베이스 'MoveDB_Azure', 파일 'MoveDB_log'에 대해 2개의 페이지를 처리했습니다 .

BACKUP DATABASE이(가) 298개의 페이지를 0.268초 동안 처리했습니다(8.687MB/초).

파일 1에서 데이터베이스 'MoveDB_Azure', 파일 'MoveDB'에 대해 296개의 페이지를 처리했습니다 .

파일 1에서 데이터베이스 'MoveDB_Azure', 파일 'MoveDB_log'에 대해 2개의 페이지를 처리했습니다 .

BACKUP DATABASE이(가) 298개의 페이지를 0.997초 동안 처리했습니다(2.335MB/초).

*/


결과.

일반백업은 초당 8.6M, Azure백업은 초당 2.3MB로 차이가 발생한다. 당연히 Azure 저장소에 백업을 하기에 속도가 느리다.

좀 더 큰 DB로 확인해 보았다. 역시나 느린 것을 확인할 수 있다.


BACKUP DATABASE AdventureWorks2014 TO DISK=N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\AdventureWorks2014.bak';

BACKUP DATABASE AdventureWorks2014 TO DISK=N'C:\AzureSQLBackup\AdventureWorks2014.bak';

/*

파일 1에서 데이터베이스 'AdventureWorks2014', 파일 'AdventureWorks2014_Data'에 대해 25304개의 페이지를 처리했습니다 .

파일 1에서 데이터베이스 'AdventureWorks2014', 파일 'AdventureWorks2014_Log'에 대해 2개의 페이지를 처리했습니다 .

BACKUP DATABASE이(가) 25306개의 페이지를 6.329초 동안 처리했습니다(31.237MB/초).

파일 1에서 데이터베이스 'AdventureWorks2014', 파일 'AdventureWorks2014_Data'에 대해 25304개의 페이지를 처리했습니다 .

파일 1에서 데이터베이스 'AdventureWorks2014', 파일 'AdventureWorks2014_Log'에 대해 2개의 페이지를 처리했습니다 .

BACKUP DATABASE이(가) 25306개의 페이지를 11.799초 동안 처리했습니다(16.755MB/초).

*/

 

또, 한가지 사실은 로컬백업파일의 용량의 차이가 발생한다. Azure 저장소 백업은 약 22KB로 로컬서버에 백업이 된다.

실제 백업파일은 Azure저장소에 업로드 되며, 로컬백업파일은 Azure 저장소의 메타정보만 로컬에 백업을 하게 된다.

 

그럼, Azure 저장소의 있는 백업파일을 삭제를 하게 되면 복원을 못하게 된다.


데이터베이스 복원에 대하여 알아보자.


Windows Azure Tool로 백업을 한 데이터베이스의 복원을 로컬폴더에 백업한 메타정보파일로 복원을 하면 된다.


AdventureWorks2014.bak 파일을 복원해보자.


먼저, 백업파일의 Header정보를 확인해보자.

RESTORE HEADERONLY from disk=N'C:\AzureSQLBackup/AdventureWorks2014.bak'

실행을 하면 엄청 오래 걸린다. 로컬 백업파일의 용량에 따라 정보를 가져오는 시간 차이가 발생한다.


USE [master]

go

RESTORE DATABASE [AdventureWorks2014_Azure] FROM DISK = N'C:\AzureSQLBackup\AdventureWorks2014.bak' WITH FILE = 1,

MOVE N'AdventureWorks2014_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\AdventureWorks2014_Azure_Data.mdf',

MOVE N'AdventureWorks2014_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\AdventureWorks2014_Azure_Log.ldf',

STATS = 5

GO

 

/*

파일 1에서 데이터베이스 'AdventureWorks2014_Azure', 파일 'AdventureWorks2014_Data'에 대해 25304개의 페이지를 처리했습니다 .

파일 1에서 데이터베이스 'AdventureWorks2014_Azure', 파일 'AdventureWorks2014_Log'에 대해 2개의 페이지를 처리했습니다 .

RESTORE DATABASE이(가) 25306개의 페이지를 57.424초 동안 처리했습니다(3.442MB/초).

*/

일반 SQL백업파일로 복원을 해보자.

RESTORE DATABASE [AdventureWorks2014_Local] FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\AdventureWorks2014.bak' WITH FILE = 1,

MOVE N'AdventureWorks2014_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\AdventureWorks2014_Local_Data.mdf',

MOVE N'AdventureWorks2014_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\AdventureWorks2014_Local_Log.ldf',

STATS = 5

GO

 

/*

파일 1에서 데이터베이스 'AdventureWorks2014_Local', 파일 'AdventureWorks2014_Data'에 대해 25304개의 페이지를 처리했습니다 .

파일 1에서 데이터베이스 'AdventureWorks2014_Local', 파일 'AdventureWorks2014_Log'에 대해 2개의 페이지를 처리했습니다 .

RESTORE DATABASE이(가) 25306개의 페이지를 8.105초 동안 처리했습니다(24.392MB/초).

*/

 

속도가 현저하게 다르다. (3.442MB/초 vs 24.392MB/초)


200MB 백업파일도 이정도 차이가 나는데 100GB 의 백업파일은 상상도 하기 싫을 것 같다.

또한, 로컬에 메타백업파일도 관리를 해야한다는 사실이다.

로컬메타백업파일과 Azure저장소의 백업파일중에 한 개 파일이 삭제가 되면 디비 복원 불가하다.

 

Summary.

실시간으로 백업이 되므로 편하다. 그러나 느리다.

백업이 느리면 SQL 서비스에도 영향이 있을 것 같다.

또한, SQLBackup2Azure.exe 프로세스가 Azure Storage 백업 시 얼마의 비용을 차지하는지도 확인해봐야 할 것 같다.


일반적으로 테스트한 결과이기에 정답은 아님을 공지하는 바이다.


 

정보수정 : 2015.11.25

로컬백업파일 즉 메타데이터 StubFile이 없을 경우에 복원하는 방법이 존재하는 듯하다.

아직 정확하게 확인이 안되었기에 포스트 수정은 일단 보류 한다. 

 

댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday