2016-10-27 72 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);