Иногда служебная программа ESEUTIL причиняет огромный ущерб автономному серверу Exchange, но еще серьезнее угроза для сервера почтовых ящиков, входящего в состав группы обеспечения доступности баз данных. Дело в том, что ESEUTIL создает новую базу данных при дефрагментации и перестроении базы данных. Это хорошо, но только до тех пор, пока Active Manager не попытается разобраться в происходящем.

Все комментарии, приведенные мною в статье по адресу: http://windowsitpro.com/blog/eseutil-evil-utility, применимы как к автономным серверам, так и к серверам, входящим в состав групп обеспечения доступности баз данных (DAG). Естественно, существует много других факторов, которые нужно учитывать при подготовке к применению ESEUTIL в базе данных, имеющей копии в DAG.

Давайте посмотрим, что происходит, если база данных имеет копии в группе DAG. Копии идентичны, вплоть до того, что всеми копиями используются одинаковые пути для базы данных и журналов транзакций. Служба репликации передает транзакции между серверами, в результате чего содержимое всех копий в банке данных совпадает, а журналы транзакций хранятся таким образом, что вновь активированную копию можно мгновенно привести в актуальное состояние.

Теперь выясним, что произойдет, если запустить ESEUTIL для дефрагментации или перестроения базы данных. Вы создаете новую копию базы данных, надеясь сжать ее в n-степени (дефрагментация) или привести в порядок, избавившись от испорченных страниц (перестроение). В любом случае важно, что в результате получается новая база данных. Недавно компания Microsoft изменила политику поддержки (http://blogs.technet.com/b/exchange/archive/2015/05/01/new-support-policy-for-repaired-exchange-databases.aspx), чтобы побудить администраторов переместить все почтовые ящики из исправленной базы данных, поскольку в некоторых случаях попытки исправления приносят больше вреда, чем пользы (и это еще одна веская причина отказаться от ESEUTIL).

Но предположим, что вы решили дефрагментировать базу данных. Вы находите файл ESEUTIL.EXE и знакомитесь с параметрами команды, прежде чем отключить базу данных.

Предположим, вам удастся утихомирить протестующих пользователей, чья работа была прервана из-за отключения базы данных от сети. Вы выполняете команду ESEUTIL/D и наблюдаете, как ESEUTIL обрабатывает базу данных, страницу за страницей. Наконец обработка завершена, и вы можете возрадоваться по поводу 100 Мбайт, возвращенных благодаря ESEUTIL (см. экран 1).

 

Сообщение об ошибке EAC
Экран 1. Сообщение об ошибке EAC 

Вы можете подключить новую дефрагментированную базу данных и открыть ее для доступа в сети. Клиенты смогут установить соединение и работать в обычном режиме. Все выглядит превосходно до тех пор, пока вы не попытаетесь активировать одну из других копий базы данных (см. экран 1) или Active Manager не попытается выполнить автоматический переход на другой ресурс после возникновения неполадки. Мы вступаем на зыбкую почву, поскольку Exchange регистрирует многочисленные события. Вы можете увидеть сообщения о следующих ошибках.

  • Копия базы данных сервера Exchange на сервере повреждена или противоречит активной копии базы данных (см. экран 2).
  • Сбой операции Active Manager с ошибкой MapiExceptionJetErrorAttachedDatabaseMismatch. Не удается подключить базу данных.
  • Банк данных (PID) . При восстановлении базы данных или возвращении ее в исходное состояние произошла непредвиденная ошибка 1216 (событие 454).
  • При восстановлении базы данных произошла ошибка 1216. Обнаружены ссылки на несуществующую базу данных (событие 494).
  • Ошибка при попытке выбора копии базы данных для возможной активации (событие 4087).
  • Обнаружена следующая ошибка при запуске передачи базы данных : 0xfffffb40. Не удалось настроить MDB (событие 9519).

 

Информация о событии 1004
Экран 2. Информация о событии 1004

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

Вы можете проверить сигнатуру базы данных, запуская ESEUTIL в режиме MH (дамп заголовка). Нужно отключить базу данных, потому что для ESEUTIL требуется монопольный доступ, но база данных будет вне сети лишь на короткое время (см. экран 3).

 

Запуск ESEUTIL в режиме MH (с дампом заголовка)
Экран 3. Запуск ESEUTIL в режиме MH (с дампом заголовка)

ESEUTIL/MH (http://technet.micro­soft.com/en-us/library/aa997795(v=exchg.65).aspx) выводит все сведения о заголовке для базы данных. Найдите строку, начинающуюся с DB Signature. Вы увидите дату и время создания базы данных, за которыми следует числовое значение Rand (определяемое произвольно для идентификации базы данных). На экране 3 показано значение 1179680486. Если запустить ESEUTIL/D, а затем проверить сигнатуру базы данных в заголовке, то выяснится, что значение Rand изменилось. В этом корень проблемы.

При подключении новой базы данных к сети Active Manager пытается проверить состояние других копий. В ходе этого процесса необходимо оценить характеристики базы данных, чтобы убедиться в их согласованности. На данном этапе карточный домик рушится. База данных подключена, но ни одна из ее копий не действительна.

Чтобы восстановить равновесие, необходимо повторно заполнить другие копии базы данных из новой базы данных с использованием команды Update-MailboxDatabaseCopy (http://technet.microsoft.com/en-us/library/dd335201(v=exchg.150).aspx) и параметра DeleteExistingFiles, чтобы удалить уже бесполезные журналы транзакций и MDB. Это нетрудно, если размер базы данных составляет пару гигабайтов; проблема гораздо серьезнее, если величина базы данных достигает нескольких сотен гигабайтов.

Дело в том, что программа ESEUTIL была разработана в то время, когда групп обеспечения доступности баз данных еще не было. Но теперь они появились и играют важную роль в локальных экземплярах Exchange 2010 и Exchange 2013, а технология высокой доступности, реализованная в группах DAG, полностью устраняет необходимость в ESEUTIL. Так что избегайте применения ESEUTIL любой ценой или готовьтесь расплачиваться за последствия.