Как восстановить базу данных SQL Server и одновременно сжать ее файлы?

9

Допустим, у меня есть база данных SQL Server, файлы данных которой были созданы с начальным размером 100 ГБ, но она содержит только 10 ГБ данных. Размер резервной копии базы данных составит всего 10 ГБ.

Я хочу восстановить эту резервную копию на другом сервере (или в другой базе данных на том же сервере), но я не хочу, чтобы она занимала то же место на диске, что и исходный (100 ГБ), что и происходит по умолчанию.

Я не могу сжать исходную базу данных перед созданием резервной копии (это производственная база данных, и ей нужно столько предварительно выделенного пространства); Я мог бы уменьшить восстановленную базу данных после того, как восстановление выполнено, но я бы действительно предпочел, чтобы она не занимала 100 ГБ при этом; кроме того, в этом конкретном сценарии у меня не так много свободного дискового пространства, поэтому восстановление никуда не денется.

Можно ли как-нибудь восстановить базу данных, и она будет занимать столько же места, сколько реальные данные, которые она содержит ?

Massimo
источник
У меня была похожая проблема. Исходное пространство БД, занятое на диске, составляло ~ 30 ГБ (с около 1,5 ГБ реальных данных), и я хочу восстановить его на моем локальном сервере MSSQL Express. Очевидная проблема заключается в том, что мой локальный сервер позволяет только макс. 10 ГБ, так как это бесплатная версия. Таким образом, я смогу сделать это, если смогу сжать файлы перед попыткой восстановить БД, но ...
userfuser

Ответы:

6

Нет, прости - ни за что. Восстановление восстанавливает файлы, как они были в резервной копии. Schinking должен быть сделан после этого или до того, как взять резервную копию.

TomTom
источник
2

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

Другой вариант, который ранее был в корзине офигенных орехов (но полезен только в том случае, если у вас запущен sql server 2008 r2), заключается в том, что SQL Server поддерживает создание файлов базы данных непосредственно для общего ресурса без использования флага трассировки, и я могу сказать, из личного опыта у вас это работает! Таким образом, вы можете сделать восстановление с помощью MOVE для общего ресурса.

Ник Кавадиас
источник
1

Вообщем нет. Несколько случайных идей, которые могут или не могут быть вам полезны:

  • Если вам абсолютно не нужны данные из этой конкретной резервной копии , вы можете создать новую (пустую) базу данных целевого размера и использовать групповые копии (или службы SSIS) для передачи всех таблиц из текущей (активной) базы данных в вашу копию.
  • Существуют сторонние инструменты (например, Redgate Compare), которые могут помочь автоматизировать подобные вещи, если это больше, чем разовая операция.
  • Некоторые сторонние программы резервного копирования (например, Quest Litespeed) могут выполнять « восстановление на уровне объектов », которое может восстанавливать отдельные таблицы или другие объекты в новой (пустой) базе данных. Даже если резервная копия не была создана с использованием Litespeed, я считаю, что продукт должен работать с резервными копиями Native SQL.

Наконец, мне тоже нравится некоторая «просторная комната» в моих производственных базах данных, но 90 ГБ без 100 ГБ звучит немного экстремально. Следующие шаги могут дать вам то, что вам нужно, и не должны влиять на производство:

  1. Запустите DBCC SHRINKFILE ('myfile.MDF', TRUNCATEONLY)файл производственных данных, чтобы временно освободить любое свободное место в конце файла (TRUNCATEONLY не требует интенсивного ввода-вывода и не будет фрагментировать индексы)
  2. Если файл журнала также большой, запустите DBCC SHRINKFILEфайл рабочего журнала во время низкой активности, сразу после создания резервной копии журнала.
  3. Запустите вашу резервную копию
  4. Выполните ALTER DATABASE MODIFY FILEповторное увеличение файла производственных данных до исходного размера.

Не должно быть никакого производственного воздействия, используя эти шаги. Единственный риск состоит в том, что некоторые данные оказываются в самом конце файла данных объемом 100 ГБ, и в этом случае Шаг (1) не освобождает много, если есть место.

BradC
источник
Спасибо, я уже знаю об этом и попытался найти некоторые обходные пути. Я просто не могу прикоснуться к исходной базе данных, доступна только резервная копия ... и она была настроена таким образом.
Массимо