Q.
Проблема.Полетел диск с transaction log.База получили статус suspect.Удалось выполнить detach,а вот attach_single_file_db не проходит.Т.е.попытка присоединить базу (без лога) выдает ошибку
Server: Msg 945, Level 14, State 2, Line 1
Database ‘test1’ cannot be opened because some of the files could not be activated.
Server: Msg 1813, Level 16, State 2, Line 1
Could not open new database ‘test1’. CREATE DATABASE is aborted.
Т.к. присоединяемый файл один (mdf) то это сообщение надо понимать относится непосредственно к нему.
Создание новой базы и подмена испорченной не помогает.
В приниципе у этой проблемы есть решение ?
A.
NB! Данный метод работает только для версии SQL2000
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