Облачное хранилище
Exchange Server базы данных и перенос почтовых ящиков
Инфографика о работе с базами Exchange Server и переносе почтовых ящиков

Данная памятка — шпаргалка по работе с почтовыми базами Microsoft Exchange (версии 2010, 2013, 2016). В ней собраны команды PowerShell и инструкции по основным задачам: перемещение базы, дефрагментация, управление копиями в DAG и др.

⚠️ Важно: любая операция с базой может привести к потере данных. Обязательно наличие актуальной резервной копии перед началом.

Содержание

Просмотр содержимого базы

Get-MailboxDatabase — список всех баз данных.

Get-MailboxDatabase | fl Name, EdbFilePath, LogFolderPath — пути к файлам базы и журналов.

Get-MailboxStatistics -Database "Base1" — статистика по базе “Base1”.

Get-Mailbox | Where {$_.Database -eq "Base1"} — список ящиков в “Base1”.

Get-Mailbox -Database Base1 | Get-MailboxStatistics | sort TotalItemSize -descending | ft DisplayName, TotalItemSize, ItemCount — сортировка ящиков по размеру.

Get-MailboxStatistics -Database Archive | Sort TotalItemSize -descending | ft DisplayName, TotalItemSize — общий отчет.

Get-Mailbox -Arbitration | FL Name, DisplayName, ServerName, Database, AdminDisplayVersion — системные ящики.

Дефрагментация

Get-MailboxDatabase -Status | ft Name, DatabaseSize, AvailableNewMailboxSpace — размер базы и свободное место.

Офлайн дефрагментация:

Dismount-Database Base1
eseutil /d Base1.edb /t \\share\base1_tmp.edb
Mount-Database Base1

Перемещение файла базы

Get-MailboxDatabase Base1 | fl Name, Guid
Move-DatabasePath -Identity <GUID> -EdbFilePath D:\NewPath\EdbName.edb -LogFolderPath D:\NewPath\Logs

Перемещение почтовых ящиков

Все ящики из базы:

Get-Mailbox -Database "Base1" | New-MoveRequest -TargetDatabase "Base2"
Get-Mailbox -Database "Base1" -Arbitration | New-MoveRequest -TargetDatabase "Base2"

Один ящик:

New-MoveRequest -Identity 'user' -TargetDatabase Base7

Освобождение места:

Get-MailboxDatabase | Select Name, MailboxRetention
Set-MailboxDatabase -MailboxRetention '0.00:00:00' -Identity 'Base1'

Удаление копии базы в DAG

Remove-MailboxDatabaseCopy -Identity Base1\Server1 -Confirm:$False

Активация активной копии базы в DAG

Move-ActiveMailboxDatabase DB5 -ActivateOnServer SERVER15 -MountDialOverride:None -Confirm:$false

Ведение циклического журнала

Set-MailboxDatabase -CircularLoggingEnabled $true -Identity 'Base1'
Set-MailboxDatabase -CircularLoggingEnabled $false -Identity 'Base1'

Ручное удаление файлов журнала

cd "C:\...\Mailbox\Base1"
ls E*.chk
eseutil /mk .\E05.chk

Переиндексация базы

Одна копия:

cd "\Program Files\Microsoft\Exchange Server\V14\Scripts"
.\ResetSearchIndex.ps1 BASE1

В DAG:

Get-MailboxDatabaseCopyStatus -Identity DAG01 | Format-List Name, ContentIndexState
Move-ActiveMailboxDatabase DAG01 -ActivateOnServer Server2 -MountDialOverride:None
Update-MailboxDatabaseCopy -Identity "DAG01\Server1" -SourceServer Server2 -CatalogOnly
Move-ActiveMailboxDatabase DAG01 -ActivateOnServer Server1 -MountDialOverride:None

Перенос отключённых почтовых ящиков

Get-MailboxDatabase -Identity "OldBase" | Get-MailboxStatistics | Where {$_.DisconnectReason} | ft DisplayName,Identity,DisconnectReason
Connect-Mailbox -Identity "<GUID>" -Database "OldBase" -User "User Name"
Disable-Mailbox -Identity "User Name"
New-MoveRequest -Identity user@test.local -TargetDatabase "NewBase" -ArchiveTargetDatabase "NewBase" -BadItemLimit 10
New-MigrationBatch -Local -AutoStart -AutoComplete -Name "Migration task" -CSVData ([System.IO.File]::ReadAllBytes("C:\User_list.csv")) -TargetDatabases "NewBase" -BadItemLimit 10

FAQ — Часто задаваемые вопросы

1. Можно ли выполнять дефрагментацию базы без отключения?
Нет, дефрагментация выполняется только офлайн, поэтому база должна быть отключена.

2. Что делать, если база не монтируется после перемещения?
Проверьте правильность путей к файлам EDB и журналам, а также наличие прав у службы Exchange.

3. Сколько времени занимает перенос почтовых ящиков?
Зависит от размера ящиков и скорости дисковой подсистемы. Маленькие ящики переносятся за минуты, крупные — часами.

4. Нужно ли удалять старые журналы вручную?
При правильно настроенном резервном копировании журналы удаляются автоматически. Ручное удаление требуется только в аварийных случаях.

5. Что означает Circular Logging?
Это режим, когда новые журналы перезаписывают старые. Экономит место, но уменьшает возможности восстановления данных.

Полезные ссылки