Подтвердить что ты не робот

Восстановление базы данных SQL Server без журнала транзакций

Есть ли какой-либо способ, учитывая SQL файл SQL Server 2008..bak, восстановить базу данных из .bak файла без журнала транзакций?

Причина, по которой я спрашиваю, заключается в том, что размер файла журнала транзакций этой базы данных огромен - превышение дискового пространства, которое я легкодоступен. Я не заинтересован в журнале транзакций и не заинтересован в каких-либо незавершенных транзакциях, поэтому обычно я просто сокращал бы журнал до нуля, как только восстановил базу данных. Но это не помогает, когда у меня недостаточно дискового пространства для создания журнала в первую очередь. Мне нужно, чтобы SQL Server мог восстановить только данные из .bak файла, а не журнала транзакций. Есть ли способ сделать это?

Обратите внимание, что я не контролирую генерацию файла .bak - это из внешнего источника. Поэтому сокращение журнала транзакций до создания файла .bak не является вариантом.

4b9b3361

Ответ 1

Это действительно вопрос для сайтов ServerFault или DBA, но короткий ответ - нет, вы можете восстановить только полный файл .bak(оставляя в стороне "экзотические" сценарии, такие как файловая группа или поэтапное восстановление). Вы не говорите, что означает "огромный", но дисковое пространство дешево; если добавление более действительно не является вариантом, вам нужно найти альтернативный способ получения данных из вашего внешнего источника.

Ответ 2

Журнал транзакций является неотъемлемой частью резервной копии. Вы не можете сказать SQL Server игнорировать журнал транзакций, потому что нет возможности разрешить восстановление и сжатие файла журнала транзакций одновременно. Тем не менее, вы можете взглянуть на сообщение DBA, чтобы взломать процесс, хотя он вообще не рекомендуется

В качестве альтернативы вы можете попробовать сторонние инструменты для восстановления, в частности, процесс виртуального восстановления, который может сэкономить много места и времени. Проверьте ApexSQL Restore, RedGate Virtual Restore, Idera Virtual Database.

Отказ от ответственности: я работаю для ApexSQL в качестве инженера поддержки

Ответ 3

Нет, требуется журнал транзакций.

Вариант 1:

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

Вариант 2:

В качестве альтернативы, возможно, контакт внешнего источника может сжать журнал транзакций перед его отправкой (это может не сработать, если журнал является большим из-за большого количества транзакций).

Документы команды для сжатия файла журнала доступны здесь.

Ответ 4

Это может не сработать, поскольку у вас нет контроля над генерацией .bak файла, но если вы можете убедить ваш источник отделить базу данных, а затем отправить вам копию файла .mdf напрямую, вы можете .mdf, и ваш сервер автоматически создаст новый пустой файл журнала транзакций.

См. sp_detach_db и sp_attach_db (или CREATE DATABASE имя_данных для ATTACH в зависимости от версии вашего SQL-сервера).

Ответ 5

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

Вот что я сделал: -

Остановить службу экземпляра сервера sql сделайте копию поврежденного файла .mdf базы данных и .ldf файла (если у вас есть .ndf файл, скопируйте это тоже!) - Чтобы быть уверенным, вы всегда можете вернуть их, если он не работает для вас.

перезапустите службу.

Войдите в студию управления sql и измените режим базы данных на простой, а затем сделайте полную резервную копию.

Снова измените тип базы данных и еще раз выполните полную резервную копию, затем выполните резервное копирование журнала транзакций.

Отсоедините базу данных.

Щелкните правой кнопкой мыши по базам данных и нажмите "Восстановить", выберите имя базы данных в раскрывающемся списке, выберите созданную позже полную резервную копию базы данных (не взятую из простого режима), а также выберите резервную копию журнала транзакций.

Нажмите "Восстановить", и он должен вернуть все файлы без ошибок в файлах журнала.

Это работало для меня без ошибок, и мои резервные копии все работали правильно, и ошибок транзакционного журнала больше не было.