Работа с базой данных Exchange
Обновлено: 04.06.2020
Опубликовано: 11.05.2018
Тематические термины: Exchange, Powershell.
Данная статья представляет из себя шпаргалку по работе с почтовой базой Exchange на примере версий 2010, 2013 и 2016.
Работа с почтовой базой несет в себе потенциальную опасность потери всей информации. Прежде, чем начать работу, стоит убедиться в наличии актуальной резервной копии.
Просмотр содержимого базыДефрагментация
Перемещение файла базы в другую папкуПеремещение почтовых ящиков
Перемещение всех ящиков в базе Перемещение одного ящика в новую базу
Освобождение места после перемещения или удаления
Удаление копии базы в DAG-группеВключение активной копии базы в группе DAG
Отключение или включение ведения циклического журнала
Ручное удаление файлов журанала
Переиндексация базы
Одна копия базы
Несколько баз (DAG)
Перенос отключенных почтовых ящиков между базами
Просмотр содержимого базы
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 MB
Base2 170 GB 69.42 GB
* где DatabaseSize — текущий размер базы; AvailableNewMailboxSpace — пространство, которое можно освободить при дефрагментации.
Саму оптимизацию можно выполнить двумя способами:
1. Офлайн дефрагментация.
2. Создание новой базы с последующим переносом в нее всех элементов; после, базу можно отключить и перенести или удалить. Это более надежный вариант, так как не приведет к большому простою и позволит выполнить работу постепенно.
В текущем подразделе мы рассмотрим первый способ.
Офлайн дефрагментация приведет к отключению почтовой базы и, как следствие, приостановку работы почтовых ящиков, которые в нем содержатся.
Если используется база на основе группы 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
Перемещение файла базы в другую папку
Если используется база на основе группы DAG, сначала необходимо удалить неактивную копию.
Вытаскиваем 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.
Посмотреть статус перемещения можно командой:
Get-MoveRequest
Освобождение пространства базы после перемещения ящиков
Мы заметим, что после перемещения ящиков, размер базы не изменился. Дело в том, что его полное удаление из базы произойдет после того, как пройдет количество дней, выставленное в параметре MailboxRetention. Посмотреть значение для каждой базы можно командой:
Get-MailboxDatabase | Select Name, MailboxRetention
Если мы не хотим ждать, меняем данное значение:
Set-MailboxDatabase -MailboxRetention '0.00:00:00' -Identity 'Base1'
После нужно сделать дефрагментацию базы. Несмотря на указание 0, нужно немного подождать применения настроек.
Удаление копии базы в DAG-группе
Данное действие не приведет к удалению самих файлов, имеющих отношение к базе. Если необходимо полностью очистить сервер от данных, после удаления копии базы, вручную удаляем ее файлы.
Сначала проверяем, что для базы отключено ведение циклического журнала. После можно переходить к удалению.
Графический интерфейс
Конфигурация организации - Почтовый ящик - вкладка Управление базой данных - выбрать базу и в нижней части окна удалить не подключенную копию:
и подтверждаем желаемое действие.
Powershell
Remove-MailboxDatabaseCopy -Identity Base1\Server1 -Confirm:$False
* где Base1 — имя базы; Server1 — имя сервера, на котором находится удаляемая копия.
Включение активной копии базы в DAG
В группе DAG только одна копия базы может быть активной. Таким образом, может возникнуть необходимость переключиться на другой сервер. Это делается в графическом интерфейсе или командной консоли Powershell.
Графический интерфейс
Конфигурация организации - Почтовый ящик - вкладка Управление базой данных - ставим указатель на нужную группу баз:
Ниже кликаем правой кнопкой по базе, которая находится на нужном нам сервере и выбираем Включить копию базы данных...:
В появившемся всплывающем окне выбираем параметр для автоматического переопределения активного сервера или оставляем в положении «Нет».
Powershell
Для смены активного сервера базы из группы DAG вводим:
Move-ActiveMailboxDatabase DB5 -ActivateOnServer SERVER15 -MountDialOverride:None -Confirm:$false
* где ActivateOnServer указываем на целевой сервер, на котором должна быть активирована копия базы; MountDialOverride — параметр для автоматического подключения базы (возможны варианты: None, Lossless, GoodAvailability, BestAvailability, BestEffort); Confirm — требование от администратора вводить подтверждение перемещения активной копии (необходимо отключать для скриптов). В данном примере мы перемещаем активную копию базы DB5 на сервер SERVER15 без переопределения автоматического переноса сервера; консоль не потребует подтвердить наши намерения.
Отключение или включение ведения циклического журнала
Графический интерфейс
Конфигурация организации - Почтовый ящик - вкладка Управление базой данных - кликаем правой кнопкой по нужной базе - Свойства:
На вкладке Обслуживание снимаем галочку Включить циклическое ведение журнала (или ставим, если нужно его включить):
Powershell
Отключить:
Set-MailboxDatabase -CircularLoggingEnabled $false -Identity 'Base1'
Включить:
Set-MailboxDatabase -CircularLoggingEnabled $true -Identity 'Base1'
Ручное удаление файлов журанала
Данное действием может понадобиться для освобождения дискового пространства, которое занимается журналами.
Запускаем Exchange Management Shell. Переходим в каталог хранения базы данных, например:
cd C:\Program Files\Microsoft\Exchange Server\V14\Mailbox\Base1
* в данном примере подразумевается, что база находится в каталоге C:\Program Files\Microsoft\Exchange Server\V14\Mailbox\Base1.
Находим файл, в котором находится информация из контрольной точки фиксации журналов:
ls E*.chk
Результат будет, примерно, следующим:
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
При использовании DAG
Смотрим, у какой копии базы произошел сбой индекса:
Get-MailboxDatabaseCopyStatus -Identity DAG01 | Format-List Name, ContentIndexState
Пример ответа:
Name : DAG01\Server1
ContentIndexState : Failed
Name : DAG01\Server2
ContentIndexState : 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 ivanov@test.local -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
Источник <https://www.dmosk.ru/miniinstruktions.p … hange-base>