Чи можливо відновити sql-сервер Bak і зменшити журнал одночасно?


26

У нас є файл Bak від клієнта, який ми передали до наших офісів розробників для розслідування проблем. Наразі резервна копія становить 25 Гб, а відновлена ​​база приблизно однакового розміру, проте для відновлення її потрібно 100 Гб. Я вважаю, це тому, що там створена база даних, що має розмір журналу транзакцій 75 Гб. Після відновлення бази даних ми можемо зменшити файл журналу, але чи існує це спосіб відновити?


3
Наскільки мені відомо, ви не можете змінити базу даних, поки вона не завершить відновлення.
Шон Мелтон

3
Я був у тій же ситуації і з нетерпінням чекаю відповіді. Просто для коментаря є продукт: віртуальне відновлення SQL з червоними воротами. Я ніколи цього не використовував, але відповідно до сайту: "Вмонтована база даних потребує додаткового зберігання майже через нуль над файлом резервного копіювання".
StanleyJohns

Відповіді:


16

Немає можливості зменшити резервну копію як частину процесу відновлення. Відновлена ​​база даних повинна виглядати точно так само, як вихідна база даних, єдиний виняток полягає в тому, що ви можете змінювати букви та папки диска навколо.


34

Існує хакі -не-робити-це-в-живому середовищі, який ви можете використовувати там, де місця обмежено, відновивши файл журналу в стиснуту папку. Спробуйте зробити це, стиснувши існуючу папку та відновивши її, призведе до помилки, тому вам доведеться обдурити символічне посилання.

  1. Створіть стиснуту папку D:\LogCompressed\
  2. Створіть символічне посилання на стиснуту папку mklink /D /J D:\Log\ D:\LogCompressed\

  3. Відновіть вашу базу даних, вказуючи на файл ldf D:\Log\

  4. Скоротіть файл журналу до відповідного розміру

  5. Відімкніть базу даних, перемістіть файл журналу в нестиснуту папку, вкладіть

Брудно, це обман, НІКОЛИ НЕ РОБИТИ У ЖИВІ , але це працює. Швидкий тест новоствореної бази даних з файлом журналу 32 Мб показує, що вона займає 330 кбіт на диску при стисненні, розпакуйте папку і розмір диска повернеться до 32 Мб.


2
@Mark: Цей хак працює, але не є ідеальним. Навіть якщо файл журналу займає набагато менше місця, ніж його реальний розмір, ви не можете відновити базу даних, якщо на диску дійсно немає вільного місця стільки, скільки реальний розмір бази даних. Besize під час відновлення фактичний розмір файлу журналу повільно зменшується від реального розміру, його болісно. Тим не менш, це все ще дуже хороший злом. Спасибі.
chenwq

9

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

Існує різниця між виділеним файловим простором бази даних та використаним простором даних . У цьому випадку перший - 100 ГБ, а останній - 25 ГБ.


1
Клієнт виділяє 75 Гб для свого журналу транзакцій. Після відновлення в даний час я змінюю розподіл журналу на 1 ГБ. Якщо можливо, я хотів би відновити цю базу даних на сервері, де на дисках є менше 100 Гб вільного місця. Не потребуючи відновлення на іншому сервері, усікайте, резервні копії та відновлення знову.
Адам Батлер

@Adam Butler, чи можна було б тимчасово відновити перший сервер, щоб ви могли зменшити розміри файлів, потім зробити резервну копію копії та відновити її на сервері призначення?
DForck42
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.