Как восстановить базы данных без лога *.ldf

1. Создаем новую базу с таким же именем и такими же по именам и расположению .mdf и .ldf файлами

2. Останавливаем сервер, подменяем файл .mdf

3. Стартуем сервер, не обращаем внимания на статус базы

4. Из «Query Analyzer» выполняем скрипт:

SQL
Use master
go
sp_configure ‘allow updates’, 1
reconfigure with override
go

4. Там же выполняем:

SQL
select status from sysdatabases where name = ‘<db_name>’

и запоминаем/записываем значение на случай неудачи ребилда лога.

5. Там же выполняем:

SQL
update sysdatabases set status= 32768 where name = ‘<db_name>’

6. Перезапускаем SQL Server.

7. В принципе база должна быть видна (в emergency mode). Можно, например, заскриптовать все объекты.

8. Из «Query Analyzer» выполняем:

SQL
DBCC REBUILD_LOG(‘<db_name>’, ‘<имя нового лога с указанием полного пути>’)

SQL Server скажет — Warning: The log for database ‘<db_name>’ has been rebuilt.

9. Если все нормально, то там же выполняем:

SQL
Use master
go
sp_dboption ‘<db_name>’, ‘single_user’, ‘true’
go
USE <db_name>
GO
DBCC CHECKDB(‘<db_name>’, REPAIR_ALLOW_DATA_LOSS)
go

9a.
Если Вам не удалось перевести базу в single user mode, то для проверки целостности данных можно попробовать dbo only mode
sp_dboption », ‘dbo use only’, ‘true’

10. Если все в порядке, то:

SQL
sp_dboption ‘<db_name>’, ‘single_user’, ‘false’
go
Use master
go
sp_configure ‘allow updates’, 0
go