Microsoft SQL Server
Error Messages

Присоединение файла .mdf без файла .ldf

Опубликовано: 01 окт 02
Рейтинг:

Автор: Дед Маздай
Прислал: Glory

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

Комментарии


  • Огромное спасибо!!!! Помогло!

  • Здравствуйте, У меня возникла проблема на п.6, Делал всё по инструкции ошибка такого рода:

    DBCC execution completed. If DBCC printed error messages, contact your system administrator.
    Msg 945, Level 14, State 2, Line 1
    Database 'GameDB' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details.
    Msg 5069, Level 16, State 1, Line 1
    ALTER DATABASE statement failed.
    sp_dboption command failed.
    Msg 945, Level 14, State 2, Line 1
    Database 'GameDB' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details.
    Msg 945, Level 14, State 2, Line 1
    Database 'GameDB' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details.

    В чём дело? И как это исправить? Если можно пишите в скайп очень нужна помощь: sana11142

  • Спасибо большое!

  • Здравствуйте, помогите пожайлуста, ситуация такая же но AQ не видит целевую базу, что делать??! тоесть все остальный базы в списке QA есть а этой именно нет.

  • СПАСИБО!!! ОЧЕНЬ ПОМОГЛО!!!

  • САПСИБО ДЕДУШКЕ МАЗАЮ!!! Помогло!!! Ты аж с 2004 года спасаешь админов!!! СПАСИБО ЕЩЕ РАЗ!!! ГЕРОЯ НАДО ДАВАТЬ!!!

  • Спасибо автору! Помогло, но сначала надо было собрать еще инфы, чтобы восстановить базу на MSSQL 2005 SP4
    Пишу коротко по делу - только в такой последовательности удалось все сделать:

    Use master
    go
    sp_configure 'allow updates', 1
    go
    ---Execute---
    reconfigure with override
    ---Execute---
    select status from sysdatabases where name = 'DataBaseName'
    ---Execute---
    EXEC sp_resetstatus 'DataBaseName';
    ALTER DATABASE DataBaseName SET EMERGENCY
    ---Execute---
    alter database DataBaseName set EMERGENCY, SINGLE_USER
    ---Execute---
    dbcc checkdb ('DataBaseName', REPAIR_ALLOW_DATA_LOSS)
    ---Execute---
    alter database DataBaseName set ONLINE, MULTI_USER
    ---Execute---
    Use master
    go
    sp_configure 'allow updates', 0
    go
    ---Execute---
    reconfigure with override

    ПыСы После "dbcc checkdb" ругнулся на то что не может создать лог файл - пришлось создать папку, которую он просил и повторить с этого пункта (база раньше стояла в другом месте)

  • Мужик, СПАСИБО!!!!
    Иркутские админы-железнодорожники из депо ТЧР-15 вам сердечно благодарны! Спасена куча информации)
    Респект и бесконечное пиво тебе!

  • Thank You! It's Work

  • Огромное спасибо, очень помогло!

  • Всем доброго дня!

    дохожу до 8-го пункта DBCC REBUILD_LOG
    выдает ошибку, подскажите пожалуйста, что делать в этом случае?
    Заранее всем спасибо!

    Server: Msg 3624, Level 20, State 1, Line 1

    Location: filemgr.cpp:1886
    Expression: fcb->GetSize () < fileSize
    SPID: 52
    Process ID: 4596

    Connection Broken

  • Красава!!!Щедрый души человек, не поленился и все написал.. СПАСИБО

  • Спасибо огромное автору, реально если б не Вы нам бошки посносили.

  • Огромное Вам спасибо! Этим способом удалось спасти базу из трех файлов общим размером 100Гб. DBCC CHECKDB работал 5 часов.

  • Присоединяюсь ко всему нижесказаному.
    выручило очень !!!

  • спасибо, ребята!!!!!! вы меня спасли!!!!!! респект автору!!!!!:****

  • Спасибо, помогло на 2005 sql с учетом рекомендаций от Евгешка

    В MSSQL2005 пункты с 5 по 9 меняем на следующие команды:

    alter database <db_name> set EMERGENCY, SINGLE_USER

    dbcc checkdb('<db_name>', REPAIR_ALLOW_DATA_LOSS )

    alter database <db_name> set ONLINE, MULTI_USER
    (соответственно из 10-го убираем sp_dboption '<db_name>', 'single user', 'true' )

  • А можно пошагово расписать инструкцию для 2005 СКУЛЯ. А то я ваще не шарю, а делать надо! Заранее спасибо!

  • Народ, команда: dbcc checkdb('имя базы', REPAIR_ALLOW_DATA_LOSS )
    go - не проходит, говорит:
    Сообщение 922, уровень 14, состояние 1, строка 1
    База данных 'имя базы' восстанавливается. Дождитесь окончания восстановления.
    И этот процесс, похоже будет длиться бесконечно. ЧТо делать?

  • Спасибо огромное!

  • Спасибо!

  • Спасибо!!!

  • Автор молодец! Спасибо!

  • Большое.
    Общечеловеческое.
    Спасибо.

  • Автору респект и увжуха !!!
    Если кому поможет: У меня пункты 9 и 10 сработали толко после полной перезагрузки системы.

  • Спасибо, просто супер вроде помогло, работает даже с 2008, только некоторые инструкции нужно для 2005 выполнять

  • Большое человеческое спасибо!

  • Спас жизь всей конторе! СПАСИБО!!!

  • Отличная инструкция!!! Спасибо!

  • В MSSQL2005 пункты с 5 по 9 меняем на следующие команды:

    alter database <db_name> set EMERGENCY, SINGLE_USER

    dbcc checkdb('<db_name>', REPAIR_ALLOW_DATA_LOSS )

    alter database <db_name> set ONLINE, MULTI_USER
    (соответственно из 10-го убираем sp_dboption '<db_name>', 'single user', 'true' )

    Автору огромное спасибо.

  • +100000!!!!!!!!!!!!!!!! Огромное спасибо!!!!!!

  • +100000!!!!!!!!!!!!!!!! Огромное спасибо!!!!!!

  • Такой замечательный скрипт, Вам ребята надо в начале форума SQL поместить, это просто ХИТ 100%

  • АВТОРУ ОГРОМНОЕ СПАСИБО !!! и Уважение за этом маленький , но очень сильный скрипт. Он просто не представляет сколько ЗАДНИЦ спас этот код. Авторам: Дед Маздай и Glory РЕСПЕКТ и УВАЖУХА от разработчиков(IT) и программистов России.

  • ФУУХХ 7.30 и и мы её восстановили....... Огромное СПАСИБО и respect... Ждем в Белгороде на ПИВО....

  • ОГРОМНОЕ человеческое СПАСИБО ! Уже воспользовалась РАЗ!ВСЕ Восстановилось!
    ПРОСТО ГЕНИАЛЬНОЕ РЕШЕНИЕ!

  • Спасибо :)

  • Большое спасибо! помогло на раз :)

  • Нота конечно интересная и познавательная, но читая все эти благодарности понимаешь что это граната в руках обезяны...хотя бы предупреждали чем это грозит для БД и бизнеса...грустно

  • Жизнь прекрасна, СПАСИБО

  • Нихрена не получилось. Вообщем что-то не так. Вроде все скрипты выполняются, но база не переводиться из состояния Суспект

  • Спасибо, очень выручила статья!!!

  • 17 сентября 2007, 15:22 Ренат Нагаев

    Дед Маздай - ты нереальный кул! твой респект без меры!!!

  • Спасибо огромное!!!!

  • Спасибо огромное!!!!
    Чудодейственное лекарство спасающее жизнь :)))

  • Спасибо огромное! Чудодейственное лекарство!!! :)

  • ВСе пишут благодарности, от меня тоже бооольшая благодарность. Вся работа за 2 месяца была на базе, все скрипты и дивным образом пропали все бекапы.
    Большое спасибо

  • РЕСПЕКТ!
    Будеш в Киеве звони 4936661, пиво за мной!

  • Блин , а как исправить "Если Вам не удалось перевести базу в single user mode,"

    Указанное решение "sp_dboption '<db_name>', 'dbo use only', 'false' а не true" не помогают

  • Здорова
    Есть Маленькое уточнение к вашеописаному методу!
    Как показала практика - он работает НО
    Сквери Онлайзер нада запускать на другой базе! На той базе которая не атачится он выдает ошибку! Поэтому запускается на master !
    И возникли проблемы с текущими данными!
    Тоесть данные за период (до вчера) востановились! А вот с текущими , которые вбивались на момент когда упала база - немного пох....лись!

    Но хоть что то востановилось!
    Спасибо!

  • Молодец, респект, спасибо очень помогло , правда пришлось sp_dboption '<db_name>', 'dbo use only', 'false' а не true делать в пункте 9.а

  • 16 апреля 2007, 17:53 Divisi0n_by_zer0

    ФАК спас ещё одного админа :)) спасибо!

    зы единственный недочётик, на котором сначала запнулся - 'single_user' пишется через пробел, а не через андерлайн...

  • !!!!!!

  • Спасибо дружище! Наши задницы ты спас - мы уже вазелин заготавливали...

  • ОГРОМНОЕ СПАСИБООООО!!!

  • Thank you very much

  • большое вам человеческое СПАС.ИБО!!!

  • Спасиба, мужик, будешь в Мурманске - с меня пиво!

  • Автору - поклон до земли... Спасены выходные моих операторов... =))

  • Дед Мазай и как только вы нашли такое решение.

  • Огромное спасибо, спасена база магазина и месяц работы...и все живы...

  • 16 февраля 2007, 07:04 Агент Ромашка

    Респект и уважуха авторам!!! :-)
    А то я уж было собрался на работе ночевать...

  • спасибо

  • Величайшее спасибо. Для таких чайников как я это просто волшебство.

  • Суперски!
    Второй раз уже пользуюсь-всё как доктор прописал! И хотя можно было восстановить из бекапа, но специально устроил показательное восстановление для "молодых" :)
    Дай бог здоровья и успехов Деду!

  • Спасибо несколько дней работы филиала восстановлены

  • You BEST OF THE BEST

  • СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!

  • КлёВА! Классно! Отлично! Спасибо огромное! Годовая отчётность спасена!!!!

  • Еще раз огромное спасибо!!! Вылечили 2 базы.

  • Спасибо огромное! Крайне полезная статья. Орден на грудь и бочку пива!

  • Дай бог тебе здоровья и жену добрую

  • Спасибо! Все просто, а сам не додумался.

  • Автору огромное списибо :)

  • Весь день упражнялся, пока не нашел эту статью. СПА-АСИ-ИБО-о...

  • И я сегодня поднялся. Спасибо огромное!))

  • И мы тоже поднялись благодаря этой статье. Спасибо!

  • Огромное спасибо автору!!! Спас.

  • Спасибо выручили!

  • Огромное спасиба автору!

  • пришлось воспользоватся. Метод действенный. Автору большое спасибо !!

  • Спасибо!!!!!

  • прикольно

  • неточто респект а намного больше

  • Помогло, супер.Огромное спасибо.

  • Спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!1

  • Супер,большое спасибо

  • Присоединяюсь. Спасибо огромаднейшее!! :)

  • НЕЧЕЛОВЕЧЕСКОЕ СПАСИБО...))

  • Отлично!!!

  • афтару зач0т, как раз пригодилось

  • Бооольшое спасибо! Все работает!

  • Супер! Гениально! Помогло! Спасибо огромное автору!!!

  • Огромное спасиво!Работает 100%

  • Тема - актуальна, решение - гениально. Огромное человеческое спасибо авторам за кучу спасённой инфы и нервов.

  • 10 июля 2006, 12:31 _Максим_

    Спасибо, с меня пиво =). Обращайся ;)

  • +5

  • 12 мая 2006, 15:09 йцукен

    РЕАЛЬНЫЙ РЕСПЕКТ АВТОРУ!

  • Вот уж никогда не думал что доживу до Физического падения сервера с базами ... - Автору ОГРОМНОЕ СПАСИБО!!!

  • афтар! РЫСПЕКТ! пеши исчо!

  • БААААААААААЛЬШОЕ СПАСИБО

  • Интересно - автор тоже через такой гемор прошел. Есть ведь люди- не жмуться

  • 22 марта 2006, 11:49 Хрюккиннен

    Спасибо тебе, Дедушка... Спас ты меня.

  • Спаситель!!!

  • Большое человеческое спасибо. Сработало.

  • Огромное СПАСИБО!!!!

  • Сегодня эта статья спасла мягкие места сотрудников отдела программирования :) Большое спасибо!

  • Спас от позора и седины!

  • 28 декабря 2005, 10:59 Отзывчивый

    Огромное спасибо. Все заработало. Не будь данной помощи все сотрудники повесились бы, восстанавливая дакоменты.

  • Спасибо...классный метод.С меня большая кружка ПИВА...:)

  • Не буду оригинален :) СПАСИБО!

  • Ребята, вы - молодцы!

  • Вот это грамотно! Второй раз пользуюсь! СПАСИБО! А так бы КИРДЫК!!

  • сенкс

  • Спасибоогромное

  • Огромное спасибо! Столько работы спасли!!!!!!!!!

  • Дед Маздай - Форевер! Очень помог! СПАСИБО!

  • Супер !!! Чуваки огромный СЕНКС !!!! Еслиб не вы мы бы повесились НАХРЕН !!!!С П А С И Б О !!!

  • tnx :)

  • Спасибо огромное.

  • ОГРОМНОЕ Спасибо автору!!!

  • супер, очко дрожало за базу от паталка до стен в диапазоне... реально чувак прошитый, я бы больше оценку паставил.... все же есть на свете админы шарящие...

  • Это бывает еще полезно и в тех слуачях, когда запустишь что-нибудь нехилое, прервешь выполнение, а дождаться обработки лога при следующем подключении БД нет возможности...

  • Спасибо! Всё получмлось.

  • Спасибо огромное. Выручил (автор).

  • Поистине священные строки!!!

  • Огромное спасибо! Здорово! Все восстановили. Знакомые не верят, что возможно так вот просто восстановить базу без лога. БЫЛО БЫ невозможно без этой стотьи. Еще раз спасибо автору.

  • Зашибись

  • Огромное спасибо. Это надо выписать, распечатать, приклеть на видное место и ни за что не потерять.

  • 23 марта 2005, 17:27 Александр Гладченко

    В п.5 ошибочка, нужно -32768 (пропущен минус)

  • 04 марта 2005, 11:40 Константин

    Как всем понравилось :))) Присоединяюсь :)))

  • Супер круто, спас волосы на голове главбуха, иначе бы сама себе выдрала, сто пудов...

  • спасено 2 дня и 1500 документов спасибо

  • 18 февраля 2005, 10:08 Кенджи-но Сората

    Огромное спасибо автору!

  • Жизнь снова может стать прекрасной. Спасибо за это, Дед Маздай.

  • 07 февраля 2005, 02:37 Eugene and Abushka

    Большое спасибо

  • Хотя я в этом деле новичок, получилось с первого раза. Большая СПАСИБА!

  • Спасибо,друг! За такое медаль полагается!

  • Спасибо, спасли нам жизнь :)



Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Microsoft SQL Server / Error Messages / Присоединение файла .mdf без файла .ldf