Вход в систему

Решение для MS SQL Server 2000

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

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

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

4. Из QA выполняем скрипт

Use master
go
sp_configure 'allow updates', 1
reconfigure with override
go

4. Там же выполняем
select status from sysdatabases where name = 'db_name'
и запоминаем/записываем значение на случай неудачи ребилда лога

5.Там же выполняем
update sysdatabases set status= 32768 where name = 'db_name'

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

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

8. Из QA выполняем
DBCC REBUILD_LOG('db_name', '<имя нового лога с указанием полного пути>')
SQL Server скажет - Warning: The log for database 'db_name' has been rebuilt.

9. Если все нормально, то там же выполняем
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 'db_name', 'dbo use only', 'true'

10. Если все в порядке, то
sp_dboption 'db_name', 'single user', 'false'
go
Use master
go
sp_configure 'allow updates', 0
go