Categories: Шпаргалки

Работа с базой данных Exchange

Тематические термины: Exchange , Powershell .

Данная статья представляет из себя шпаргалку по работе с почтовой базой Exchange на примере версий 2010, 2013 и 2016.

Работа с почтовой базой несет в себе потенциальную опасность потери всей информации. Прежде, чем начать работу, стоит убедиться в наличии актуальной резервной копии.

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

1. Посмотреть список баз:

Get-MailboxDatabase

Полезным будет посмотреть базы и пути до директорий, где находятся их файлы:

Get-MailboxDatabase | fl Name,EdbFilePath,LogFolderPath

2. Список элементов базы можно увидеть командой в Powershell:

Get-MailboxStatistics -Database «Base1»

* где Base1 — имя базы данных, содержимое которой необходимо посмотреть.

Важно отметить, что это могут быть уже перенесенные элементы.

3. Список действующих ящиков, находящихся в базе:

Get-Mailbox | Where {$_.Database -eq «Base1»}

4. Размер почтовых ящиков в базе:

Get-Mailbox -Database Base1 | Get-MailboxStatistics | sort TotalItemSize -descending | ft DisplayName, TotalItemSize, ItemCount

5. Список всех элементов в базе и занимаемый ими размер:

Get-MailboxStatistics -Database Archive | Sort TotalItemSize -descending | ft DisplayName, TotalItemSize

6. Посмотреть системные почтовые ящики:

Get-Mailbox -Arbitration | FL Name, DisplayName, ServerName, Database, AdminDisplayVersion

7. Установленные квоты

На все базы данных:

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 FilesMicrosoftExchange ServerV14MailboxBase1

Выполняем команду для отмонтирования базы:

Dismount-Database Base1

* напомним, что это приведет к отключению базы и приостановки обслуживания.

Запускаем дефрагментацию:

eseutil /d Base1.edb /t \sharebase1_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:DatabaseNewPathEdbFileName.edb -LogFolderPath D:DatabaseNewPath

* где:

  • 55e0595f-9b48-4285-b12a-faeb8efa7278 — идентификатор перемещаемой базы;
  • D:DatabaseNewPath — каталог, куда будет перемещена база (если не создан, система создаст автоматически).
  • EdbFileName.edb — имя конечного файла базы данных.

На вопросы консоли отвечаем утвердительно — 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 Base1Server1 -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 FilesMicrosoftExchange ServerV14MailboxBase1

* в данном примере подразумевается, что база находится в каталоге C:Program FilesMicrosoftExchange ServerV14MailboxBase1 .

Находим файл, в котором находится информация из контрольной точки фиксации журналов:

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: (0x 561299 ,8,16)
FullBackup: (0x0,0,0)

* в данном примере для нас важно значение 561299 .

… теперь, когда мы получили значение Checkpoint, мы знаем имя файла, который был последним зафиксирован (его информация уже в базе данных). Находим в проводнике файл, в названии которого есть наше значение Checkpoint:

Теперь можно удалять все файлы журналов (их название начинается с E<номер> и это txt-файлы), которые старше найденного нами файла.

Переиндексация базы (восстановление поиска или репликации)

Данную процедуру необходимо выполнять, если наблюдаются проблемы с поиском в почте или репликации DAG-копии. Выполняется в Exchange Management Shell.

Одна копия базы

Переходим в каталог Exchange:

cd «program filesmicrosoftexchange serverv14scripts»

Запускаем переиндексацию:

.ResetSearchIndex.ps1 BASE1

При использовании DAG

Смотрим, у какой копии базы произошел сбой индекса:

Get-MailboxDatabaseCopyStatus -Identity DAG01 | Format-List Name, ContentIndexState

Пример ответа:

Name : DAG01Server1
ContentIndexState : Failed

Name : DAG01Server2
ContentIndexState : Healthy

Активируем копию базы на сервере с исправным индексом:

Move-ActiveMailboxDatabase DAG01 -ActivateOnServer Server2 -MountDialOverride:None

Запускаем копирование каталога с исправного сервера:

Update-MailboxDatabaseCopy -Identity «DAG01Server1» -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

admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

2 месяца ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

2 месяца ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

2 месяца ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

2 месяца ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

2 месяца ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

2 месяца ago