Допустим, у меня есть база данных SQL Server, файлы данных которой были созданы с начальным размером 100 ГБ, но она содержит только 10 ГБ данных. Размер резервной копии базы данных составит всего 10 ГБ.
Я хочу восстановить эту резервную копию на другом сервере (или в другой базе данных на том же сервере), но я не хочу, чтобы она занимала то же место на диске, что и исходный (100 ГБ), что и происходит по умолчанию.
Я не могу сжать исходную базу данных перед созданием резервной копии (это производственная база данных, и ей нужно столько предварительно выделенного пространства); Я мог бы уменьшить восстановленную базу данных после того, как восстановление выполнено, но я бы действительно предпочел, чтобы она не занимала 100 ГБ при этом; кроме того, в этом конкретном сценарии у меня не так много свободного дискового пространства, поэтому восстановление никуда не денется.
Можно ли как-нибудь восстановить базу данных, и она будет занимать столько же места, сколько реальные данные, которые она содержит ?
источник
Ответы:
Нет, прости - ни за что. Восстановление восстанавливает файлы, как они были в резервной копии. Schinking должен быть сделан после этого или до того, как взять резервную копию.
источник
Если у вас недостаточно места на диске, вы можете поместить файл .bak в общий сетевой ресурс и восстановить его оттуда. Должно работать, если на вашем сервере запущен sql-сервер с учетной записью домена, и предоставить этой папке достаточно прав для чтения файла.
Другой вариант, который ранее был в корзине офигенных орехов (но полезен только в том случае, если у вас запущен sql server 2008 r2), заключается в том, что SQL Server поддерживает создание файлов базы данных непосредственно для общего ресурса без использования флага трассировки, и я могу сказать, из личного опыта у вас это работает! Таким образом, вы можете сделать восстановление с помощью MOVE для общего ресурса.
источник
Вообщем нет. Несколько случайных идей, которые могут или не могут быть вам полезны:
Наконец, мне тоже нравится некоторая «просторная комната» в моих производственных базах данных, но 90 ГБ без 100 ГБ звучит немного экстремально. Следующие шаги могут дать вам то, что вам нужно, и не должны влиять на производство:
DBCC SHRINKFILE ('myfile.MDF', TRUNCATEONLY)
файл производственных данных, чтобы временно освободить любое свободное место в конце файла (TRUNCATEONLY не требует интенсивного ввода-вывода и не будет фрагментировать индексы)DBCC SHRINKFILE
файл рабочего журнала во время низкой активности, сразу после создания резервной копии журнала.ALTER DATABASE MODIFY FILE
повторное увеличение файла производственных данных до исходного размера.Не должно быть никакого производственного воздействия, используя эти шаги. Единственный риск состоит в том, что некоторые данные оказываются в самом конце файла данных объемом 100 ГБ, и в этом случае Шаг (1) не освобождает много, если есть место.
источник