Как найти журнал ошибок MS SQL Server при ошибке 945 и недоступности базы msdb?

Системный администратор IT и автоматизация бизнеса
← На главную

Каждый администратор баз данных рано или поздно сталкивается со сбоями в работе СУБД MS SQL Server. Одной из наиболее неприятных является ситуация, когда из-за повреждения системной базы данных msdb графический интерфейс среды SQL Server Management Studio (SSMS) частично или полностью блокируется. При попытке раскрыть список баз данных или зайти в стандартные разделы мониторинга система выдает критическую ошибку:

«Не удалось открыть базу данных "msdb" вследствие недоступности файлов, нехватки памяти или места на диске. Подробности см. в журнале ошибок SQL Server. (Microsoft SQL Server, ошибка: 945)»

В этой ситуации стандартный путь просмотра логов через дерево объектов SSMS (раздел Управление -> Журналы SQL Server) становится недоступным, так как среда администрирования пытается прочитать метаданные из поврежденной базы msdb и аварийно завершает запрос. В данной статье мы подробно разберем, как обойти это ограничение, где физически найти файлы журналов ошибок, как их открыть и какими способами можно восстановить работоспособность СУБД.

Методика 1. Поиск и чтение физических файлов ERRORLOG на диске

Если графическая консоль управления заблокирована, мы можем обратиться к первоисточнику — текстовым файлам журналов, которые SQL Server создает непосредственно в операционной системе. Давайте разберем по шагам, где они находятся и как их правильно открыть.

По умолчанию файлы журналов хранятся в подкаталоге Log внутри папки установки вашего экземпляра SQL Server. Путь зависит от версии СУБД и имени инстанса:

Если у вас установлен именованный экземпляр (например, SQLEXPRESS), вместо папки MSSQLSERVER в пути будет использоваться имя вашего инстанса, например: MSSQL15.SQLEXPRESS.

В целевой папке вы обнаружите файлы со следующими именами:

Важный момент: файлы журналов ошибок записываются в кодировке Unicode (UTF-16LE). Вы можете легко открыть их для чтения и анализа с помощью любого текстового редактора, например, обычного встроенного Блокнота (Notepad) или Notepad++. Также, если сама среда SSMS у вас запущена, вы можете открыть лог напрямую через ее меню: Файл -> Открыть -> Файл (File -> Open -> File) и указать путь к физическому файлу ERRORLOG. Это позволит проанализировать записи без обращения к заблокированному дереву объектов.

Методика 2. Определение пути к ERRORLOG через утилиты конфигурации

Если файлы не удалось обнаружить по стандартным путям (например, если администратор перенес папки данных на другой логический диск при установке), мы можем оперативно выяснить точное расположение логов двумя альтернативными путями.

Способ А. Через Диспетчер конфигурации SQL Server (SQL Server Configuration Manager):

  1. Запустим утилиту SQL Server Configuration Manager на сервере.
  2. Перейдем в левой панели в раздел Службы SQL Server (SQL Server Services).
  3. В правом списке найдем службу нашего сервера (например, SQL Server (MSSQLSERVER)), кликнем по ней правой кнопкой мыши и выберем Свойства (Properties).
  4. Перейдем на вкладку Параметры запуска (Startup Parameters).
  5. В списке существующих параметров найдем строку, начинающуюся с префикса -e. Например: -eC:\SQLData\Log\ERRORLOG. Путь, указанный сразу после ключа -e, и есть актуальное физическое местоположение текущего файла журнала ошибок.

Способ Б. Через Реестр Windows:

Если утилита конфигурации недоступна, мы можем прочитать параметры запуска службы напрямую из системного реестра:

  1. Нажмем комбинацию клавиш Win + R, введем regedit и нажмем Enter.
  2. Перейдем по следующему пути (для стандартного экземпляра):

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQLServer\Parameters

    Если используется именованный экземпляр, ветка будет выглядеть так:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\[Имя_Экземпляра]\MSSQLServer\Parameters

  3. Найдем строковый параметр с именем SQLArg1 (или другой порядковый номер). Его значение будет содержать ключ запуска -e с полным путем к файлу лога.

Методика 3. Анализ причин ошибки 945 и восстановление базы msdb

Теперь, когда мы научились извлекать информацию из журналов ошибок, давайте разберем саму суть проблемы. Ошибка 945 означает, что критически важная системная база данных msdb, отвечающая за расписания, задания Агента (SQL Server Agent), историю резервного копирования и почту СУБД, перешла в состояние Suspect (Подозреваемая) или Recovery Pending (Ожидание восстановления).

Давайте проанализируем основные причины этого сбоя и пошагово восстановим работоспособность системы:

  1. Проверка прав доступа к файлам данных

    Часто проблема возникает после переноса файлов баз данных, изменения учетной записи службы SQL Server или системных обновлений. Учетная запись, под которой запущена служба СУБД в Windows, теряет права на чтение и запись в папке с базой данных.

    Перейдем в каталог, где лежат физические файлы базы msdb (обычно это папка DATA в каталоге установки, файлы msdbdata.mdf и msdblog.ldf). Откроем их свойства, перейдем во вкладку Безопасность и убедимся, что сервисному аккаунту (например, NT SERVICE\MSSQLSERVER или локальной системе) предоставлен Полный доступ (Full Control).

  2. Снятие атрибута «Только для чтения»

    Если файлы базы копировались вручную с архивных носителей, операционная система могла установить для них флаг защиты от записи. В свойствах файлов msdbdata.mdf и msdblog.ldf снимем галочку Только для чтения (Read-only) и сохраним изменения.

  3. Проверка свободного места на дисках и ограничений авторасширения

    Недостаточно просто проверить, что на жестком диске есть свободное место. Необходимо проанализировать настройки автоматического расширения файлов (Auto-Growth) для базы msdb. Если для файлов базы был установлен жесткий лимит размера (Maximum Size), при его достижении СУБД заблокирует запись и переведет базу в режим аварии. Освободим место на диске или скорректируем лимиты.

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

    После того как права исправлены и место на диске обеспечено, база данных может автоматически не выйти из аварийного состояния. Нам потребуется принудительно запустить процесс восстановления. Откроем в SSMS новое окно запроса (кнопка Создать запрос на панели инструментов) и выполним следующий T-SQL скрипт:

    ALTER DATABASE msdb SET ONLINE;

    После выполнения этой команды SQL Server попытается заново перечитать файлы транзакций и вернуть базу в строй. Проверить статус всех баз данных можно с помощью запроса:

    SELECT name, state_desc FROM sys.databases;
  5. Использование системного журнала событий Windows (Event Viewer)

    Если база данных по-прежнему выдает ошибку, нам обязательно нужно заглянуть в системные журналы Windows, которые фиксируют сбои дисковой подсистемы и ошибки ввода-вывода. Откроем утилиту Просмотр событий (Event Viewer), развернем узел Журналы Windows -> Приложение (Application) и выполним фильтрацию по источнику MSSQLSERVER. Здесь будут детально описаны физические ошибки секторов диска или повреждения страниц данных, если они имели место.

  6. Крайняя мера: Перестроение системных баз данных

    В случае серьезного повреждения файлов msdbdata.mdf и отсутствии актуальной резервной копии, штатный запуск СУБД может стать невозможным. В такой ситуации потребуется пересоздать системные базы с помощью программы установки SQL Server. Для этого запустим командную строку от имени администратора и выполним команду перестроения системных баз с оригинального дистрибутива:

    
    Setup.exe /Quiet /Action=RebuildDatabase /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS="Администраторы" /SAPWD="Новый_Пароль_SA"
    

    Важное предупреждение: процедура перестроения баз данных (Rebuild) полностью сотрет текущую базу msdb и создаст ее чистый шаблон. При этом будут безвозвратно утеряны все настроенные вами регламентные задания Агента (Jobs), планы обслуживания 1С-баз, а также история резервного копирования. Рекомендуется использовать этот метод только при полном отсутствии бэкапов и невозможности восстановить файлы иными путями.

← На главную