Информационные технологии
c 2007 года
 

MS Exchange 2013, очистка и дефрагментация БД

24.05.2022
Всем здравствуйте.
Для IT-специалистов не в новинку тот факт, что в компании так или иначе, есть текучка кадров и периодически в AD и в Exchange накапливаются отключённые учётки, которые мы периодически чистим (ну кто-то и сразу может это делает).
Так вот, в Exchange не всё так просто, если мы даже удалили учётку в домене - учётка из БД никуда не делась, её мы удаляем отдельно, приведу один из вариантов удаления:
смотрим список:
$dbs = Get-MailboxDatabase
$dbs | foreach {Get-MailboxStatistics -Database $_.DistinguishedName} | where {$_.DisconnectReason -ne $null} | Format-List DisplayName,MailboxGuid,Database,DisconnectReason
удаляем так:
Remove-StoreMailbox -Database "Mailbox Database 1571811430" -Identity "3a9a8175-5195-4b1f-a2cb-7c31d7a0336a" -MailboxState Disabled
или так, кому как удобнее:
Remove-StoreMailbox -Database "Mailbox Database 1571811430" -Identity "Запалов Алексей Владимирович" -MailboxState Disabled
Но даже после этого удаления, размер БД у нас не уменьшится. Почему? К сожалению, дефрагментация БД не выполняется так просто, как дефрагментация диска (или майкрософт специально всё усложняет), поэтому чтоб очистить пространство, есть два пути:
1) создание новой БД и перенос в неё активных ящиков
Плюсы данного варианта: работа сервера не останавливается
Минусы: нужно либо наращивать объём диска (если машина виртуальная), либо добавлять ещё один диск для БД, так же перенос учёток иногда может быть ручным, что тоже трудозатратно, особенно если их много
2) дефрагментация БД
Плюсы: достаточно простой и надёжный процесс, выполняемый несколькими командами
Минусы: БД нужно отключать (отмонтировать), а это значит, что служба почты в момент дефрагментации будет недоступной, а значит выполнять эту задачу в рабочее время компании невозможно

И всё же я выбрал путь дефрагментации.
Перввым делом делаем бэкап! При любых операциях, где есть даже минимальный риск повреждения или потери данных - делаем бэкап!
Итак, первым делом посмотрим, на сколько же сократится объём нашей БД после дефрагментации, идём в шелл эксченжа:
[PS] C:\Windows\system32>Get-MailboxDatabase -Status | ft name,databasesize,availablenewmailboxspace -auto

Name       DatabaseSize                       AvailableNewMailboxSpace
----       ------------                       ------------------------
EXCH-DB-01 1.115 TB (1,225,944,727,552 bytes) 300.9 GB (323,095,494,656 bytes)
Видим, что будем иметь уменьшение объёма БД на 300Гб, это примерно четверть всего объёма, неплохо. После этого нужно позаботиться о том, чтоб у нас был отдельный диск для темповых файлов, который должен быть чуть больше объёма самой БД. На этом диске создаём директорию, в моём случае tembdb и даём права для "Все" на запись и изменение, без этого можем получить ошибку.
Далее отмонтируем БД:
[PS] C:\Windows\system32>Dismount-Database -Identity EXCH-DB-01

Подтверждение
Вы действительно хотите выполнить это действие?
Идет отключение базы данных "EXCH-DB-01". Это может привести к ограниченной доступности почтовых ящиков в базе данных.
[Y] Да - Y  [A] Да для всех - A  [N] Нет - N  [L] Нет для всех - L  [?] Справка (значением по умолчанию является "Y"):
Тут я нашёл некоторый нюанс - если выбрать Y и после этого попытаться запустить дефрагментацию, то получим ошибку. Поэтому первый раз выполняем эту команду и нажимаем Y, затем ещё раз её выполняем и нажимаем A. Зачем? У меня сработало именно в такой последовательности, делюсь своим опытом.
После отмонтирования, переходим в папку с базой и запускаем процесс дефрагментации:
[PS] C:\Windows\system32>cd 'C:\Program Files\Microsoft\Exchange Server\V15\Mailbox\Mailbox Database 1571811430\'
[PS] C:\Program Files\Microsoft\Exchange Server\V15\Mailbox\Mailbox Database 1571811430>eseutil /d 'Mailbox Database 1571811430.edb' /t 'E:\tempbase\EXCH-DB-01.edb'
Вы увидите процесс дефрагментации, который состоит из 2х этапов - дефрагментация и копирование дефрагментированной БД из темповой директории. Вот так примерно это выглядит:
exch-defrag1.JPG
У меня процесс длился 32103 секунды, что равно почти 9ти часам, всё зависит, в большинстве, от производительности вашей дисковой системы и её загруженности.
В конце выводится сообщение, напоминающее нам о том, чтоб мы сделали резервную копию. Молодцы, хорошая рекомендация, так и поступаем, но сначала примонтируем БД:
[PS] C:\Program Files\Microsoft\Exchange Server\V15\Mailbox\Mailbox Database 1571811430>Mount-Database EXCH-DB-01
Готово. Теперь делаем резервную копию.
БОНУС :)
У кого-то может возникнуть вопрос - почему у тебя база называется Mailbox Database 1571811430.edb, а ты подцепляешь базу по имени  EXCH-DB-01?
Ребята, всё просто - если вы переименуете стандартную базу данных, то она будет отвечать по имени, заданному вами, но папка с базой и сама база физически так же будут называться, как и раньше. Можно это исправить, но пока лично у меня нет такой необходимости. Переименовать БД можно командой, что мной и было сделано ранее:
Set-MailboxDatabase “Mailbox Database 1571811430” -Name EXCH-DB-01
Отмониторовать БД в этом случае необязательно.
На этом у меня всё, база сократилась в объёме на 300Гб, как и выдала первая команда, отлично.
Желаю и вам небольших объёмов БД эксченжа, будьте счастливы, друзья! )


Возврат к списку


Текст сообщения*
Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
 
X