Ошибка MapiExceptionNetworkError: Unable to mount database стала внезапно вылетать при попытке смонтировать любую из баз данных. Проблема появилась самопроизвольно, нагрузки на сервер не было, некорректного завершения работы тоже. Тем не менее посреди дня отвалилась сначала база с пользовательскими ящиками, а потом и базы с системными.
Найти больше информации по настройке и администрированию Exchange 2013 на моем блоге вы сможете в основной статье тематики – Exchange 2013 — Установка, настройка, администрирование.
Unable to mount database
Ниже полностью опишу не только решение, но и тот путь, который я прошел для устранения ошибки.
Диагностика ошибки
В оснастке “Просмотр событий\Журналы Windows\Приложение” фиксировались ошибки MSExchangeRepl 3154 при попытке смонтировать любую из баз:
В EAC все выглядело следующим образом:
При обновлении представления очень часто ранее неактивные базы были в состоянии “Подключена” и потом снова отваливались. Попытки перезапустить службу “Банк данных Microsoft Exchange” (MSExchangeIS) давали точно такой же результат – базы были то в состоянии “Подключена”, то “Отключена” и в конечном счете отвалились синхронно все. Изначально вариант повреждения баз я отвергнул, поскольку повредиться все 5 баз враз, при этом не имея на себя никакой нагрузки, просто не могли (на самом деле могли конечно, но вероятность этого очень низкая. В моем опыте даже в продакшене при высокой нагрузке повреждались 1-2 базы после нескольких аварийных выключений сервера под ряд. Да, бывало у меня и такое).
Устранение ошибки
Изначально я начал искать проблему в других вещах и даже занялся настройкой времени в домене, несинхронизированное состояние которого могло быть причиной появления проблем с монтированием базы, по крайней мере так пишут в некоторых статьях 1. В итоге время я настроил, но ошибка не исчезла. Пришлось заняться диагностикой БД.
Я начал с базы системных почтовых ящиков. В итоге, на свое удивление, я действительно обнаружил, что база находится в состоянии “Dirty Shutdown”, при том только одна единственная, с которой я как раз начал диагностику:
Раз такое дело, сценарий понятен – нужно заняться восстановлением базы. Резервных копий на тестовой инфраструктуре у меня конечно же не было, пришлось разбираться с тем что есть. Для начала необходимо отключить несколько служб, которые так или иначе будут препятствовать внесению изменений в файлы базы данных, это службы “Банк данных Microsoft Exchange” (MSExchangeIS), “Microsoft Exchange Search” (MSExchangeFastSearch. Noderunner.exe в процессах – это как раз эта служба) и “Microsoft Exchange Search Host Controller” (HostControllerService). После этого необходимо скопировать всю папку с БД в отдельную директорию (я скопировал в ту же папку и у меня появилась просто вторая папка с добавленным в конце имени “- копия”) на всякий случай, чтобы безвозвратно не потерять вашу базу. Все действия проводятся именно с копией БД.
На всякий случай ещё раз проверяем состояние базы:
1 |
eseutil.exe /mh "D:\Program Files\Microsoft\Exchange Server\V15\Mailbox\System Database 01 - SystemMailbox\System Database 01 - SystemMailbox.edb" |
а также состояние логов:
1 |
eseutil.exe /ml "D:\Program Files\Microsoft\Exchange Server\V15\Mailbox\System Database 01 - SystemMailbox\E01" |
Где “E01” – первые символы в названии лог-файлов (файлы с расширением .log)
Выполняем восстановление:
1 |
eseutil.exe /p "D:\Program Files\Microsoft\Exchange Server\V15\Mailbox\System Database 01 - SystemMailbox\System Database 01 - SystemMailbox.edb" |
Проверяем состояние:
1 |
eseutil.exe /mh "D:\Program Files\Microsoft\Exchange Server\V15\Mailbox\System Database 01 - SystemMailbox\System Database 01 - SystemMailbox.edb" |
Должно быть вот так:
После этого переименовываем каталог с текущей базой в что-то типа “System Database 01 – SystemMailbox_corrupted“, а только что починенную БД называем вместо неисправной в “System Database 01 – SystemMailbox” (грубо говоря подменяем папку с базой и всеми сопровождающими файлами). Запускаем остановленные службы, ждем 5-8 минут пока базы подключатся (у меня они подключились все и сразу) и нормально перезагружаем сервер.