Диагностика ошибки Microsoft SQL Server 9001: журнал для базы данных недоступен

20

В выходные дни веб-сайт, который я запускаю, перестал работать, регистрируя следующую ошибку в средстве просмотра событий при каждом обращении к сайту:

Код события: 9001

Журнал для базы данных «имя базы данных » недоступен. Проверьте журнал событий на наличие сообщений об ошибках. Устраните все ошибки и перезапустите базу данных.

Веб-сайт размещен на выделенном сервере, поэтому я могу подключиться к серверу по RDP. LDFФайл для базы данных существует в C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATAпапке, но пытается сделать любую работу с базой данных из результатов Management Studio в диалоговом окне отчетов ту же ошибку - 9001: Журнал для базы данных не доступен ...

Это первый раз, когда я получил эту ошибку, и я размещаю этот сайт (и другие) на этом выделенном веб-сервере уже более двух лет.

Насколько я понимаю, эта ошибка указывает на поврежденный файл журнала. Мне удалось восстановить работоспособность веб-сайта, отсоединив базу данных, а затем восстановив резервную копию, сделанную пару дней назад, но я обеспокоен тем, что эта ошибка свидетельствует о более зловещей проблеме, а именно об отказе жесткого диска.

Я написал в службу поддержки веб-хостинга, и это был их ответ:

Похоже, что в журнале событий нет никаких других указаний на причину, поэтому возможно, что журнал был поврежден. В настоящее время ресурсы памяти находятся на уровне 87%, что также может оказать влияние, но маловероятно.

Может ли журнал просто "испортиться?"

Мой вопрос: какие следующие шаги я должен предпринять, чтобы диагностировать эту проблему? Как я могу определить, действительно ли это аппаратная проблема? И если это так, есть ли варианты, кроме замены диска?

Благодарность

Скотт Митчелл
источник

Ответы:

16

Более 99% проблем, связанных с повреждением базы данных, связаны с системой хранения. Половина оставшихся проблем связана с плохой памятью, а другая половина является ошибками в SQL Server.

Скорее всего, это проблема хранения.

Если это произойдет снова, запустите DBCC CHECKDB для базы данных, и это даст вам больше информации о повреждении, и если проблема может быть исправлена ​​без выполнения восстановления. Вам, вероятно, потребуется перевести базу данных в оперативный режим в аварийном режиме, чтобы запустить проверку базы данных.

Использование памяти на уровне 87% не имеет ничего общего с проблемой. SQL Server запустит всю память до 100% (или близко к ней) по своему замыслу.

mrdenny
источник
Спасибо за предложения. Я на самом деле пытался сделать DBCC CHECKDB, но получил много ошибок, в том числе ошибка, что он не может найти файл журнала. Но я не пытался перевести БД в оперативный режим.
Скотт Митчелл
Обычно, если журнал транзакций поврежден, это довольно плохо. CHECKDB может починить его или нет, в зависимости от степени повреждения. Если у вас есть резервные копии журнала транзакций (ваш провайдер может не разрешить их), то вы могли бы почти не потерять данные. В конце вывода checkdb будет уровень восстановления, необходимый для устранения проблем с файлами базы данных.
Мрденни
Верный. Использование памяти не имеет к этому никакого отношения - если только память не была повреждена и просто перенесена на диск. В любом случае, вы должны увидеть некоторые другие признаки проблем ввода-вывода в журналах событий. Где-то.
Майкл К Кэмпбелл
Вы можете попробовать запустить checkdisk (chkdsk) для диска, чтобы увидеть, видит ли Windows какие-либо проблемы с диском. Скорее всего, вам нужно заменить диск. Однако это могло быть просто ошибкой в ​​коде контроллера диска или кода в BIOS диска. В любом случае я бы посмотрел на замену дисков и / или контроллера.
Мрденни
8

Я смог решить эту проблему, переведя базу данных в автономный режим в Management Studio, а затем немедленно вернув ее в оперативный режим. dbcc checkdbбросил ошибки, которые были решены после этого. Я не могу сказать , почему это работает только , что он сделал работу.

Фактор Мистик
источник
5

У меня тоже была эта проблема в последнее время, и после многих исследований она становится обычной, когда для базы данных установлено значение AUTO CLOSE. Я установил все базы данных на AUTO CLOSE = FALSE. Это началось с одной базы данных, затем перешло к двум, и затем это было на всех из них. Я просто перезапустил службу экземпляров SQL Server вместо восстановления баз данных. Еще один способ устранить эту проблему - перевести проблемную базу данных в автономный режим и снова включить ее.

Клариса Боувер
источник
1

MS SQL отключит журналы уязвимой базы данных во избежание повреждения базы данных. Вот почему вы получаете ошибку 9001.

Когда вы переводите уязвимую базу данных в автономный режим / онлайн, MS SQL будет включать журналы уязвимой базы данных до тех пор, пока ошибка не появится снова.

Другой способ решить эту проблему - изменить параметр Auto_Close на OFF.

http://sqlmag.com/blog/worst-practice-allowing-autoclose-sql-server-databases

Сол А. Греко В.
источник
0

Я собираюсь угадать / надеюсь, что у вас есть рейд на диск для вашего сервера sql. если вы подозреваете аппаратные проблемы, самое первое, что я бы сделал, - запустите ваши инструменты обслуживания / диагностики рейда.

Второе (возможно, одновременно, если вы можете) - запустить dbcc checkdb для базы данных (возможно, также и для ваших системных баз данных).

Thirster42
источник
0

Хорошо, первый шаг, сделайте резервную копию вашего журнала и ваших файлов mdf на совершенно другой диск. БЫСТРО! (копия файла)

Также попробуйте выполнить полное резервное копирование базы данных.

Далее попробуйте следующее. Используя вашу текущую базу данных, отсоедините ее, если можете, и затем удалите файл журнала, или переместите его в совершенно другое место на диске. Затем повторно присоедините базу данных, и она будет отображаться в графическом интерфейсе с файлом журнала, нажмите кнопку удаления (или удаления) для файла журнала, чтобы он не появился, а затем нажмите кнопку ОК. В основном, прикрепляя его без журнала, вы заставите его создать файл журнала для базы данных в расположении по умолчанию.

Дай мне знать.

Ryk
источник
0

Да, я тоже получил эту же проблему, это было связано с ошибкой tempDb 9001, т.е. журнал недоступен. Мы перезапустили сервисы и все было хорошо.

Причиной этого была проблема SAN или хранилища, в то время как во время операции ввода-вывода запись была невозможна более 15 секунд.

Кролик
источник
0

Вчера я получил ту же ошибку: «Журнал для базы данных«% »недоступен. Неустранимая ошибка 9001, сообщение 21. Пожалуйста, обратитесь к администратору» -

Обходной путь - я проверил TempDB, но он был недоступен, как и остальные системные базы данных. Затем, прежде чем перейти к варианту восстановления, я просто перезапустил службы SQL для этого экземпляра, и проблема была решена :) :)

Poonam Choudhary
источник
-2

Я видел, как это происходит, когда нет места на диске для расширения журнала; Можете ли вы проверить, что на C: \ достаточно места, и ведется ли управление вашими журналами, т.е. выполняется резервное копирование, если вы находитесь в режиме полного восстановления.

Я бы переместил ваши ldf (и mdf) с загрузочного тома, если у вас есть возможность.

SqlACID
источник
Недостаточно свободного места на жестком диске НИКОГДА не приведет к повреждению базы данных, если только вы не используете хранилище с тонким предоставлением и в базовом хранилище не хватает места. Но это совсем другой кошмар.
Мрденни
Я перефразирую ... возможно, это не повреждение базы данных, а определенно причина, по которой файлы журналов недоступны, как указано в описании операции.
SqlACID
1
На диске имеется более 25 ГБ свободного места, а размер рассматриваемой базы данных составляет менее 25 МБ.
Скотт Митчелл
Единственная ошибка, которую вы когда-либо увидите из-за нехватки места, - это ошибка заполнения файла при попытке изменить строки в базе данных, поскольку транзакция не может быть записана в журнал (не то, что указано в OP). Недостаточно свободного места не приведет к недоступности базы данных (как указано в ОП).
Мрденни
Не согласен. На диске, где находился файл журнала, не хватило места, и я начал видеть точно такую ​​же проблему.
ADNow