2016-10-27 3 views
0

백업 할 SQL 데이터베이스 (~ 1TB)가 있습니다.대용량 SQL 백업을 분할합니다.

백업 할 수는 있지만 최대 객체 크기가 5GB 인 Amazon S3에 오프 사이트 저장하고 싶습니다.

여러 개의 파일을 사용하여 분할 할 수 있다고 생각했지만 최대 64 개이므로 여전히 S3의 16GB 청크로 끝납니다.

다른 방법이 있습니까?

감사

+0

이것은 프로그래밍과 관련이 없습니다. 백업 및 여러 파일을 사용할 수있는 방법에 대한 설명서를 확인하십시오. 단순히 "SQL 서버 백업 여러 파일"에 대한 검색은 많은 답변을 반환합니다 (예, 그냥 대화 상자에 추가 할 수 있습니다). –

+1

@AndrewDeonon 프로그래밍에 관한 질문이 없으며 해결책을 찾기 위해 노력하지 않으며 Google을 시도하지도 않습니다. 이것은 좋은 질문이 아닙니다. * down *을 강요하지 마십시오. BTW, 데이터베이스가 커집니다. 1TB는 더 이상 중요하지 않은 것으로 간주됩니다. 1PB는 최신 단일 시스템 SQL Server 참조 아키텍처입니다. 그리고 파일 분리/결합은 백업과 같은 비즈니스 크리티컬 문제에 관해 말할 때 매우 나쁜 생각입니다. –

+1

@BenDurkin Azure는 SQL Server 용 클라우드 백업을 제공합니다. 전체 백업을 200 개의 파일로 분할하는 대신 * this *를 고려해야합니다. –

답변

0

S3의 최대 BLOB 크기는 5TB하지 5기가바이트이다. 5GB는 단일 HTTP PUT으로 업로드 할 수있는 최대 개체입니다.

모든 클라우드 제공자는 동일한 패턴을 따릅니다. 거대한 파일 하나를 업로드하고 단일 BLOB로 저장하는 대신 여러 디스크에 걸쳐 복제하는 블록으로 분리합니다. 데이터를 요청하면 공급자는 모든 블록에서 데이터를 검색합니다. 클라이언트에게 블롭은 하나의 객체로 나타납니다.

큰 파일을 업로드 할 때도 블록이 필요합니다. 단일 업로드 작업 (HTTP PUT)으로 대용량 파일을 업로드하는 대신 모든 제공 업체는 개별 블록을 업로드하고 이러한 블록이 하나의 객체를 구성한다는 것을 공급자에게 최종적으로 통지해야합니다. 이렇게하면 실패한 경우 하나의 실패한 블록 만 다시 업로드 할 수 있고 공급자는 다음 블록을 보낼 때 각 블록을 커밋 할 수 있습니다. 대기중인 큰 BLOB를 추적하고 잠글 필요가 없습니다. 업로드를 끝내야합니다.

경우에 따라 Cloud Storage를 이해하고 Cyberduck 또는 S3 특정 명령 줄 도구와 같은 여러 블록을 사용하는 업 로더를 사용해야합니다. 또는 Amazon SDK를 사용하여 백업 파일을 부분적으로 업로드하는 유틸리티를 작성하십시오.

아마존의 설명서 사이트는 복수 업로드에 대한 예제를 Uploading Objects Using Multipart Upload API에 제공합니다. high-level examples은 큰 파일을 업로드하는 다양한 방법을 보여줍니다. 모든 통화는 비록 간단한 전화 예를 들어, 여러 부분으로 업로드를 사용

var client= new AmazonS3Client(Amazon.RegionEndpoint.USEast1); 
var fileTransferUtility = new TransferUtility(client); 
fileTransferUtility.Upload(filePath, existingBucketName); 

여러 부품을 사용하여 파일을 업로드하고 키로서 파일의 경로를 사용합니다. 가장 진보 된 예제를 통해 부품 크기, 다른 키, 중복 옵션 등을 지정할 수 있습니다.

var fileTransferUtilityRequest = new TransferUtilityUploadRequest 
      { 
       BucketName = existingBucketName, 
       FilePath = filePath, 
       StorageClass = S3StorageClass.ReducedRedundancy, 
       PartSize = 6291456, // 6 MB. 
       Key = keyName, 
       CannedACL = S3CannedACL.PublicRead 
      }; 
fileTransferUtilityRequest.Metadata.Add("param1", "Value1"); 
fileTransferUtilityRequest.Metadata.Add("param2", "Value2"); 
fileTransferUtility.Upload(fileTransferUtilityRequest); 
관련 문제