2016-10-27 3 views
0

У меня есть большая база данных SQL (~ 1 ТБ), которую я пытаюсь выполнить.Сплит большой резерв SQL

Я могу создать резервную копию, но мы хотим сохранить его на месте на Amazon S3, где максимальный размер объекта составляет 5 ГБ.

Я думал, что могу разбить его, используя несколько файлов, но, кажется, максимум 64, поэтому я все еще заканчиваю 16-гигабайтными кусками, которые слишком велики для S3.

Есть ли другой способ сделать это?

Благодаря

+0

Это не имеет никакого отношения к программированию. Просто проверьте документацию по резервному копированию и укажите/как вы можете использовать несколько файлов. Просто googling для «sql server backup multiple files» вернет много ответов (да, вы можете, просто добавьте их в диалоговом окне) –

+1

@AndrewDeighton неперерабатывающий вопрос, никаких усилий, чтобы найти решение, даже не попытка Google. Это не очень хороший вопрос. Не заставляйте меня * менять вниз. BTW, базы данных становятся большими. 1TB больше не считается настолько большим - 1PB - это новейшая односерверная эталонная архитектура SQL Server. И разделение файлов/присоединение - это, безусловно, очень очень * очень плохая идея, когда речь идет о таких важных для бизнеса вопросах, как резервное копирование. –

+1

@BenDurkin Azure предлагает облачное резервирование для SQL Server. Вероятно, вы должны рассмотреть * this * вместо разделения полной резервной копии на 200 файлов. –

ответ

0

Максимальный размер блоб для S3 является 5TB, не 5Гб. 5GB - это только самый большой объект, который можно загрузить с помощью одного HTTP PUT.

Все поставщики облаков следуют одному и тому же шаблону: вместо того, чтобы загружать один огромный файл и хранить его в виде одного блоба, они разбивают его на блоки, которые они реплицируют на многие диски. Когда вы запрашиваете данные, поставщик извлекает их из всех этих блоков. Однако для клиента blob появляется как отдельный объект.

Для загрузки большого файла требуются блоки. Вместо того, чтобы загружать большой файл с помощью одной операции загрузки (HTTP PUT), все провайдеры требуют, чтобы вы загружали отдельные блоки и, наконец, уведомили провайдера о том, что эти блоки составляют один объект. Таким образом, вы можете повторно загрузить только один поврежденный блок в случае сбоя, поставщик может совершить каждый блок, пока вы отправляете следующий, им не нужно отслеживать и блокировать большую блоб (на большом диске), ожидающую вы должны закончить загрузку и т. д.

В вашем случае вам нужно будет использовать загрузчик, который понимает облачное хранилище и использует несколько блоков, возможно, что-то вроде Cyberduck или специальных инструментов командной строки S3. Или напишите утилиту, которая использует SDK Amazon для загрузки файла резервной копии по частям.

Сайт документации Amazon предлагает примеры для многостраничных загрузок по адресу 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); 
Смежные вопросы