2016-10-27 73 views
0

我有一个大型SQL数据库(〜1TB),我试图进行备份。拆分大型SQL备份

我可以很好地备份它,但我们希望将它存储在Amazon S3上,其最大对象大小为5GB。

我想我可以通过使用多个文件分割它,但它似乎最大是64,所以我仍然结束了对于S3太大的16GB块。

有没有其他方法可以做到这一点?

谢谢

+0

这与编程无关。只需检查有关备份的文档以及是否/如何使用多个文件。只需搜索“sql server backup multiple files”就会返回很多答案(是的,只需在对话框中添加它们) –

+1

@AndrewDeighton非编程问题,没有努力寻找解决方案,甚至没有尝试过谷歌。这不是一个好问题。不要强迫*我*以减少投票。顺便说一句,数据库变得很大。 1TB不再被认为是那么大 - 1PB是最新的单机SQL Server参考体系结构。在讨论备份等关键业务问题时,文件拆分/加入绝对是一个非常非常糟糕的主意。 –

+1

@BenDurkin Azure为SQL Server提供云备份。您应该考虑* this *而不是将完全备份分割为200个文件。 –

回答

0

S3的最大斑点大小是5TB,而不是5GB。 5GB只是可以使用单个HTTP PUT上传的最大对象。

所有的云服务提供商都遵循相同的模式:不是上传一个大文件并将其存储为单个blob,而是将其拆分成多个块,然后在多个磁盘上进行复制。当你询问数据时,提供者从所有这些块中检索它。然而,对于客户来说,blob显示为单个对象。

上传大文件也需要块。与其上传一个具有单一上传操作的大文件(HTTP PUT)不同的是,所有提供者都要求您上传单个块并最终通知提供者这些块构成一个对象。这样,如果发生故障,您只能重新上传一个失败的块,提供者可以在发送下一个块时提交每个块,而不必跟踪并锁定大块(位于大磁盘上)等待你完成上传等。

在你的情况下,你将不得不使用上传器,理解云存储和使用多个块,可能是像Cyber​​duck或S3特定的命令行工具。或者编写一个使用Amazon的SDK上传备份文件的实用程序。

亚马逊的文档站点提供了分段上传的示例,网址为Uploading Objects Using Multipart Upload APIhigh-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);