Проблема:
Необходимо подключить базу данных без файла журналов 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';
однако мне это не удалось, поэтому пришлось искать альтернативное решение.
-
Создаем новую базу данных. Назовем ее SQLBaseName:
Код: Выделить всё
CREATE DATABASE SQLBaseName
-
Переводим базу в offline режим:
Код: Выделить всё
ALTER DATABASE SQLBaseName SET OFFLINE WITH ROLLBACK IMMEDIATE
-
Подменяем файл базы данных SQLBaseName.mdf файлом mdf, который нужно восстановить;
-
Переводим базу в online:
Код: Выделить всё
ALTER DATABASE SQLBaseName SET ONLINE
При этом мы получим ошибку что файл журнала ldf не соответствует файлу базы данных MDF;
-
Обновляем дерево баз в оснастке Microsoft SQL Server Managment Studio и видим, что база перешла в режим Restricted User mode;
-
Пересоздаем файл ldf с новым именем:
Код: Выделить всё
ALTER DATABASE SQLBaseName REBUILD LOG ON (NAME='SQLBaseName_LOG', FILENAME='C:\Soft\MSSQL\Data\SQLBaseName_new_LOG.ldf') GO
-
Переводим базу в многопользовательский режим и проверяем на целостность:
Код: Выделить всё
ALTER DATABASE SQLBaseName SET MULTI_USER DBCC CHECKDB (SQLBaseName) WITH NO_INFOMSGS