MS SQL Server: Восстановление базы после удаления файла журналов ldf

Все об администрировании Windows NT/2000/2003/2008/2012 Server (в т.ч. R2) серверов. Групповые политики, домены, безопасность и пр. То, чего не найдешь в бескрайних просторах Интернета. Решения тех проблем, которые не решаются типовыми ответами, которые можно получить в техподдержке Майкрософта - а именно: переустановить продукт или купить какой-ть другой лицензионный диск.


Модератор: UncleFather

Аватара пользователя
UncleFather
Site Admin
Сообщения: 1518
Зарегистрирован: 17 авг 2004 16:20, Вт
Контактная информация:

MS SQL Server: Восстановление базы после удаления файла журналов ldf

Сообщение UncleFather »

Проблема:

Необходимо подключить базу данных без файла журналов ldf на сервере СУБД Microsoft SQL. То есть имеется только файл базы данных mdf, который необходимо зарулить в СУБД.


Решение:

В Transact-SQL есть стандартная команда sp_attach_single_file_db, которая вроде бы должна решить эту проблему

Код: Выделить всё

USE master;  
GO
EXEC sp_detach_db @dbname = 'SQLBaseName';
EXEC sp_attach_single_file_db @dbname = 'SQLBaseName',
@physname = N'C:\Soft\MSSQL\Data\SQLBaseName_Data.mdf';

однако мне это не удалось, поэтому пришлось искать альтернативное решение.

  1. Создаем новую базу данных. Назовем ее SQLBaseName:

    Код: Выделить всё

    CREATE DATABASE SQLBaseName
  2. Переводим базу в offline режим:

    Код: Выделить всё

    ALTER DATABASE SQLBaseName SET OFFLINE WITH ROLLBACK IMMEDIATE
  3. Подменяем файл базы данных SQLBaseName.mdf файлом mdf, который нужно восстановить;

  4. Переводим базу в online:

    Код: Выделить всё

    ALTER DATABASE SQLBaseName SET ONLINE

    При этом мы получим ошибку что файл журнала ldf не соответствует файлу базы данных MDF;

  5. Обновляем дерево баз в оснастке Microsoft SQL Server Managment Studio и видим, что база перешла в режим Restricted User mode;

  6. Пересоздаем файл ldf с новым именем:

    Код: Выделить всё

    ALTER DATABASE SQLBaseName REBUILD LOG ON (NAME='SQLBaseName_LOG',
    FILENAME='C:\Soft\MSSQL\Data\SQLBaseName_new_LOG.ldf')
    GO
  7. Переводим базу в многопользовательский режим и проверяем на целостность:

    Код: Выделить всё

    ALTER DATABASE SQLBaseName SET MULTI_USER
    DBCC CHECKDB (SQLBaseName) WITH NO_INFOMSGS

Alexander A. Manaeff©

Понравилась статья? Будем крайне признательны за репосты в соцсетях! Материально поддержать проект можно здесь

Мои странички:
ВКонтакте
Одноклассники
Youtube
Facebook
Instagram

Изображение
Изображение
Изображение
Изображение