Решение для 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
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии