Можно ли восстановить sql-сервер bak и сжать журнал одновременно?

26

У нас есть файл bak от клиента, который мы передали в наши офисы разработчиков для расследования проблем. Резервная копия в настоящее время составляет 25 ГБ, а восстановленная база данных имеет примерно такой же размер, однако для ее восстановления требуется 100 ГБ. Я считаю, что это потому, что база данных настроена на размер журнала транзакций 75 ГБ. После восстановления базы данных мы можем сжать файл журнала, но есть ли способ сделать это при восстановлении?

Адам Батлер
источник
3
Я знаю, что вы не можете изменить базу данных, пока она не завершит восстановление.
Шон Мелтон
3
Я был в той же ситуации, и я с нетерпением жду ответа. Просто чтобы прокомментировать, есть продукт: виртуальное восстановление SQL Red-Gate. Я никогда не использовал это, но согласно сайту: «Смонтированная база данных требует почти нулевого дополнительного хранилища поверх файла резервной копии».
СтэнлиДжонс

Ответы:

16

Нет способа сжать резервную копию как часть процесса восстановления. Восстановленная база данных должна выглядеть точно так же, как исходная, за исключением того, что вы можете менять буквы дисков и папки.

mrdenny
источник
34

Существует способ «не делай этого в жизни», который можно использовать в местах с ограниченным пространством, восстанавливая файл журнала в сжатую папку. Попытка сделать это путем сжатия существующей папки и ее восстановления приведет к ошибке, поэтому вам придется использовать чит-код с символической ссылкой.

  1. Создать сжатую папку D:\LogCompressed\
  2. Создать символическую ссылку на сжатую папку mklink /D /J D:\Log\ D:\LogCompressed\

  3. Восстановите вашу базу данных с помощью файла ldf, указывающего на D:\Log\

  4. Сократите файл журнала до соответствующего размера

  5. Отключите базу данных, переместите файл журнала в несжатую папку, прикрепите

Это грязно, это обманывает, НИКОГДА НЕ ДЕЛАЙТЕ ЭТО В ЖИЗНИ , но это работает. Быстрая проверка вновь созданной базы данных с файлом журнала 32 МБ показывает, что при сжатии она занимает 330 КБ на диске, распакует папку и на диске вернется к 32 МБ.

Марк Стори-Смит
источник
2
@Mark: этот хак работает, но не идеально. Даже если файл журнала занимает гораздо меньше места, чем его реальный размер, вы не сможете восстановить базу данных, если на диске действительно нет свободного места, равного реальному размеру базы данных. Поскольку при восстановлении актуальный размер файла журнала медленно уменьшается, он становится болезненным. Тем не менее, это все еще очень хороший взломать. Спасибо.
chenwq
9

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

Существует разница между выделенным файловым пространством базы данных и используемым пространством данных . В этом случае первый составляет 100 ГБ, а второй - 25 ГБ.

Томас Стрингер
источник
1
Клиент выделяет 75 ГБ для своего журнала транзакций. После восстановления я в настоящее время изменяю распределение журнала к 1 ГБ. Если возможно, я бы хотел восстановить эту базу данных на сервере, где на дисках менее 100 ГБ свободного места. Без необходимости восстанавливать на другом сервере, обрезать, резервное копирование и восстановление снова.
Адам Батлер
@ Адам Батлер, можно ли будет временно восстановить первый сервер, чтобы можно было уменьшить размеры файлов, а затем сделать резервную копию копии и восстановить ее на конечном сервере?
DForck42