Тематические термины: Exchange, Powershell.
Данная статья представляет из себя шпаргалку по работе с почтовой базой Exchange на примере версий 2010, 2013 и 2016.
Работа с почтовой базой несет в себе потенциальную опасность потери всей информации. Прежде, чем начать работу, стоит убедиться в наличии актуальной резервной копии.
1. Список элементов базы можно увидеть командой в Powershell:
Get-MailboxStatistics -Database “Base1”
* где Base1 — имя базы данных, содержимое которой необходимо посмотреть.
Важно отметить, что это могут быть уже перенесенные элементы.
2. Список действующих ящиков, находящихся в базе:
Get-Mailbox | Where {$_.Database -eq “Base1”}
3. Размер почтовых ящиков в базе:
Get-Mailbox -Database Base1 | Get-MailboxStatistics | sort TotalItemSize -descending | ft DisplayName, TotalItemSize, ItemCount
4. Список всех элементов в базе и занимаемый ими размер:
Get-MailboxStatistics -Database Archive | Sort TotalItemSize -descending | ft DisplayName, TotalItemSize
5. Посмотреть системные почтовые ящики:
Get-Mailbox -Arbitration | FL Name, DisplayName, ServerName, Database, AdminDisplayVersion
6. Установленные квоты
На все базы данных:
Get-MailboxDatabase | fl Name, *Quota
На конкретную базу:
Get-MailboxDatabase Base1 | fl Name, *Quota
Необходима для освобождения пространства, занимаемого файлом базы. Это связано с тем, что при удалении элементов, сама база не уменьшается.
Посмотреть, какое количество пространства удастся высвободить можно командой:
Get-MailboxDatabase -Status | ft Name, DatabaseSize, AvailableNewMailboxSpace
Пример ответа:
Name DatabaseSize AvailableNewMailboxSpace—- ———— ————————Base1 686.4 GB 286.4 MBBase2 170 GB 69.42 GB
* где DatabaseSize — текущий размер базы; AvailableNewMailboxSpace — пространство, которое можно освободить при дефрагментации.
Саму оптимизацию можно выполнить двумя способами:
В текущем подразделе мы рассмотрим первый способ.
Офлайн дефрагментация приведет к отключению почтовой базы и, как следствие, приостановку работы почтовых ящиков, которые в нем содержатся.
Если используется база на основе группы DAG, сначала необходимо удалить неактивную копию.
Операция дефрагментации выполняется из Exchange Management Shell с применением утилиты eseutil.
Сначала переходим в каталог хранения базы данных, например:
cd C:\Program Files\Microsoft\Exchange Server\V14\Mailbox\Base1
Выполняем команду для отмонтирования базы:
Dismount-Database Base1
* напомним, что это приведет к отключению базы и приостановки обслуживания.
Запускаем дефрагментацию:
eseutil /d Base1.edb /t \\share\base1_tmp.edb
* где опция d — имя файла базы; t — путь до временного файла на момент дефрагментации, если его не указать, временный файл будет создан в каталоге с основным файлом и, в таком случае, нужно убедиться, что на диске достаточно свободного места (110% от размер дефрагментируемого файла).
После завершения операции, снова подключаем базу:
Mount-Database Base1
Вытаскиваем GUID для нужной базы:
Get-MailboxDatabase Base1 | fl Name, Guid
Используя GUID, перемещаем базу:
Move-DatabasePath -Identity 55e0595f-9b48-4285-b12a-faeb8efa7278 -EdbFilePath D:\Database\NewPath
* где 55e0595f-9b48-4285-b12a-faeb8efa7278 — идентификатор перемещаемой базы; D:\Database\NewPath — каталог, куда будет перемещена база (если не создан, система создаст автоматически).
На вопросы консоли отвечаем утвердительно — Y.
Для переноса почтовых ящиков из Base1 в Base2 выполняем следующую команду в Powershell:
Get-Mailbox -Database “Base1” | New-MoveRequest -TargetDatabase “Base2”
После не забываем перенести системные почтовые ящики, если они есть в базе:
Get-Mailbox -Database “Base1” -Arbitration | New-MoveRequest -TargetDatabase “Base2”
Посмотреть статус перемещения можно командой:
Get-MoveRequest
Для перемещения одного единственного ящика в новую базу, вводим команду:
New-MoveRequest -Identity ‘user’ -TargetDatabase Base7
* в данном примере мы перенесем почтовые данные пользователя user в базу Base7.
Мы заметим, что после перемещения ящиков, размер базы не изменился. Дело в том, что его полное удаление из базы произойдет после того, как пройдет количество дней, выставленное в параметре MailboxRetention. Посмотреть значение для каждой базы можно командой:
Get-MailboxDatabase | Select Name, MailboxRetention
Если мы не хотим ждать, меняем данное значение:
Set-MailboxDatabase -MailboxRetention ‘0.00:00:00’ -Identity ‘Base1’
После нужно сделать дефрагментацию базы. Несмотря на указание 0, нужно немного подождать применения настроек.
Данное действие не приведет к удалению самих файлов, имеющих отношение к базе. Если необходимо полностью очистить сервер от данных, после удаления копии базы, вручную удаляем ее файлы.
Сначала проверяем, что для базы отключено ведение циклического журнала. После можно переходить к удалению.
Конфигурация организации – Почтовый ящик – вкладка Управление базой данных – выбрать базу и в нижней части окна удалить не подключенную копию:
и подтверждаем желаемое действие.
Remove-MailboxDatabaseCopy -Identity Base1\Server1 -Confirm:$False
* где Base1 — имя базы; Server1 — имя сервера, на котором находится удаляемая копия.
В группе DAG только одна копия базы может быть активной. Таким образом, может возникнуть необходимость переключиться на другой сервер. Это делается в графическом интерфейсе или командной консоли Powershell.
Конфигурация организации – Почтовый ящик – вкладка Управление базой данных – ставим указатель на нужную группу баз:
Ниже кликаем правой кнопкой по базе, которая находится на нужном нам сервере и выбираем Включить копию базы данных…:
В появившемся всплывающем окне выбираем параметр для автоматического переопределения активного сервера или оставляем в положении «Нет».
Для смены активного сервера базы из группы DAG вводим:
Move-ActiveMailboxDatabase DB5 -ActivateOnServer SERVER15 -MountDialOverride:None -Confirm:$false
* где ActivateOnServer указываем на целевой сервер, на котором должна быть активирована копия базы; MountDialOverride — параметр для автоматического подключения базы (возможны варианты: None, Lossless, GoodAvailability, BestAvailability, BestEffort); Confirm — требование от администратора вводить подтверждение перемещения активной копии (необходимо отключать для скриптов). В данном примере мы перемещаем активную копию базы DB5 на сервер SERVER15 без переопределения автоматического переноса сервера; консоль не потребует подтвердить наши намерения.
Конфигурация организации – Почтовый ящик – вкладка Управление базой данных – кликаем правой кнопкой по нужной базе – Свойства:
На вкладке Обслуживание снимаем галочку Включить циклическое ведение журнала (или ставим, если нужно его включить):
Отключить:
Set-MailboxDatabase -CircularLoggingEnabled $false -Identity ‘Base1’
Включить:
Set-MailboxDatabase -CircularLoggingEnabled $true -Identity ‘Base1’
Данное действием может понадобиться для освобождения дискового пространства, которое занимается журналами.
Запускаем Exchange Management Shell. Переходим в каталог хранения базы данных, например:
* в данном примере подразумевается, что база находится в каталоге C:\Program Files\Microsoft\Exchange Server\V14\Mailbox\Base1.
Находим файл, в котором находится информация из контрольной точки фиксации журналов:
Результат будет, примерно, следующим:
Mode LastWriteTime Length Name—- ————- —— —--a— 21.07.2019 11:18 8192 E05.chk
* в данном примере, нужный нам файл называется E05.chk.
Теперь узнаем последний файл журнала, действия из которого были занесены в базу Exchange:
eseutil /mk .\E05.chk
Мы получим информацию о фиксации журналов — нас интересует Checkpoint
…LastFullBackupCheckpoint: (0x0,0,0)Checkpoint: (0x561299,8,16)FullBackup: (0x0,0,0)…
* в данном примере для нас важно значение 561299.
… теперь, когда мы получили значение Checkpoint, мы знаем имя файла, который был последним зафиксирован (его информация уже в базе данных). Находим в проводнике файл, в названии которого есть наше значение Checkpoint:
Теперь можно удалять все файлы журналов (их название начинается с E<номер> и это txt-файлы), которые старше найденного нами файла.
Данную процедуру необходимо выполнять, если наблюдаются проблемы с поиском в почте или репликации DAG-копии. Выполняется в Exchange Management Shell.
Переходим в каталог Exchange:
cd “\program files\microsoft\exchange server\v14\scripts”
Запускаем переиндексацию:
.\ResetSearchIndex.ps1 BASE1
Смотрим, у какой копии базы произошел сбой индекса:
Get-MailboxDatabaseCopyStatus -Identity DAG01 | Format-List Name, ContentIndexState
Name : DAG01\Server1ContentIndexState : Failed
Name : DAG01\Server2ContentIndexState : Healthy
Активируем копию базы на сервере с исправным индексом:
Move-ActiveMailboxDatabase DAG01 -ActivateOnServer Server2 -MountDialOverride:None
Запускаем копирование каталога с исправного сервера:
Update-MailboxDatabaseCopy -Identity “DAG01\Server1” -SourceServer Server2 -CatalogOnly
Делаем активной копию базы на старом сервере:
Move-ActiveMailboxDatabase DAG01 -ActivateOnServer Server1 -MountDialOverride:None
В данном примере мы рассмотрим ситуацию, когда у нас есть база от старого или другого сервера exchange, и мы должны перенести из нее все почтовые ящики в новую базу. Предположим, что база DAG01 — старая база, а DAG02 — новая.
Получаем список отключенных почтовых ящиков:
Get-MailboxDatabase -Identity “DAG01” | Get-MailboxStatistics | where {$_.DisconnectReason} | ft DisplayName,Identity,DisconnectReason
Необходимо подключить почтовый ящик к существующему пользователю Active Directory без почтового ящика. Имя пользователя должно совпадать с именем почтового ящика, иначе почтовый ящик будет переименован:
Connect-Mailbox -Identity “ca97f561-9b0b-4a83-a177-6f6261bdaa8c” -Database “DAG01” -User “Иванов Иван Иванович”
* где identity — Identity или DisplayName почтового ящика; user — аккаунт или DisplayName пользователя домена.
Для подключения почтового ящика к пользователю имеющему почтовый ящик, необходимо сначала отключить его текущий почтовый ящик:
Disable-Mailbox -Identity “Иванов Иван Иванович”
Теперь можно перенести почтовый ящик в другую базу:
New-MoveRequest -Identity [email protected] -TargetDatabase “DAG02” -ArchiveTargetDatabase “DAG02” -BadItemLimit 10
Для перемещения нескольких пользователей сразу необходимо создать задание на перемещение с указанием CVS файла содержащего имена пользователей:
New-MigrationBatch -Local -AutoStart -AutoComplete -Name “MIgration task” -CSVData ([System.IO.File]::ReadAllBytes(“C:\User_list.csv”)) -TargetDatabases “DAG02” -BadItemLimit 10
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies