EN 
30.11.2025 Ondřej WELCOME IN MY WORLD

This website is originally written in the Czech language. Most content is machine (AI) translated into English. The translation may not be exact and may contain errors.

Tento článek si můžete zobrazit v originální české verzi. You can view this article in the original Czech version.
Exchange Server 2016 přesun poštovních schránek a OAB

Exchange Server 2016 moving mailboxes and OAB

| Petr Bouška - Samuraj |
When migrating an Exchange server from an older version, one of the essential steps is to move (or migrate) mailboxes from the original server to the new one. We must have services running on both the original and the new Exchange server that are members of the same organization. Then we can move the mailbox group to the database on the new server.
displayed: 13 400x (10 237 CZ, 3 163 EN) | Comments [0]

This article is part of a series based on my notes during the migration of an Exchange organization from version 2010 to 2016. It is not a complete procedure, but a description of the main points and areas. The examples relate to a specific design, but can generally be generalized. Similarly, although it is a description of a migration, the information is also suitable for a new installation or administration.

Official documentation: Exchange Server 2016.

Setting Limits

Before moving the first mailbox, it's a good idea to set the limits on mailbox size within the database (if we didn't do it when creating the DB) and the maximum size of messages sent on the Receive Connectors (if we didn't set it when creating the connector), and possibly also on the organization and Send Connectors.

Mailbox Limits

Documentation: Manage mailbox databases in Exchange Server, Configure storage quotas for a mailbox.

We set the limits on the Mailbox DB, or we can adjust them for an individual mailbox.

Using the Exchange Management Shell, we can list the settings of all databases in summary.

[PS] C:\>Get-MailboxDatabase -IncludePreExchange2013 | FT Name, Server, IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota

DBold MAILOLD   1 GB (1,073,741,824 bytes) 1.5 GB (1,610,612,736 bytes) 1.602 GB (1,719,664,640 bytes)
DBnew MAIL1   1.5 GB (1,610,612,736 bytes)   2 GB (2,147,483,648 bytes)   2.2 GB (2,362,232,832 bytes)

And then set the new databases according to the requirements.

Set-MailboxDatabase -Identity DBnew -IssueWarningQuota "1,5 GB" -ProhibitSendQuota "2 GB" -ProhibitSendReceiveQuota "2,2 GB"

Settings can also be done using the Exchange Admin Center.

  • EAC - Servers - Databases - choose DB - Edit - Limits

Limits on Sending and Receiving Mail

Documentation: Message size limits in Exchange Server.

We can set limits for the entire organization, on the transport connectors, partially on the server, or for an individual mailbox. We set the maximum size of a sent or received message and the maximum number of recipients per message.

Checking the organization settings using the Exchange Management Shell.

[PS] C:\>Get-TransportConfig | FL MaxReceiveSize, MaxSendSize, MaxRecipientEnvelopeLimit

MaxReceiveSize            : 50 MB (52,428,800 bytes)
MaxSendSize               : 50 MB (52,428,800 bytes)
MaxRecipientEnvelopeLimit : 1000

Configuration in the Exchange Admin Center.

  • EAC - Mail flow - Receive connectors - three dot icon (More) - Organization transport settings - Limits

Checking the settings on the connectors using the Exchange Management Shell.

Get-ReceiveConnector | FT Server, Name, MaxMessageSize, MaxRecipientsPerMessage
Get-SendConnector | FT Name, MaxMessageSize

Example of setting the connectors using the Exchange Management Shell.

Set-SendConnector Internet -MaxMessageSize "49 MB"
Get-ReceiveConnector -Server mail1 | Set-ReceiveConnector -MaxMessageSize "49 MB" -MaxRecipientsPerMessage 1000 -MaxHeaderSize "256 kB"

Checking the settings on the mailbox using the Exchange Management Shell.

[PS] C:\>Get-Mailbox bouska | FL MaxReceiveSize, MaxSendSize, RecipientLimits

MaxReceiveSize  : Unlimited
MaxSendSize     : Unlimited
RecipientLimits : Unlimited

Moving System Mailboxes

The first step is to move the system mailboxes (Arbitration Mailboxes) from the old servers to the new database.

[PS] C:\>Get-Mailbox -Arbitration -Server mailold | New-MoveRequest -TargetDatabase DBnew

DisplayName                           StatusDetail        TotalMailboxSize        TotalArchiveSize PercentComplete
-----------                           ------------        ----------------        ---------------- ---------------
Microsoft Exchange Approval Assistant WaitingForJobPickup 75.64  KB (77,452 bytes)                 0
Microsoft Exchange Federation Mailbox WaitingForJobPickup 73.12  KB (74,873 bytes)                 0
Microsoft Exchange                    WaitingForJobPickup 2.253  MB (2,362,565 ...                 0

Mailbox Moves - Mailbox Move

Documentation: Manage on-premises mailbox moves in Exchange Server, Mailbox moves in Exchange Server.

We can move a single mailbox using a Move Request or multiple mailboxes using a Migration Batch. Using the EAC, a batch is always created, even if we're moving only one mailbox (perhaps by selecting the mailbox and clicking the right-hand option Move Mailbox To another database).

On Exchange 2010, when a mailbox migration - Move Request - was completed, you had to run Clear or Remove Move Requests afterwards. This removed the InTransit flag on the mailbox, until then a new migration couldn't be performed.

For Exchange 2016, the Remove-MoveRequest documentation states that this step, necessary on Exchange 2010, is no longer required on newer versions, and this cmdlet is used to cancel an existing move request. Nevertheless, in practice, once a mailbox move (either Move Request or Migration Batch) has been performed, a new move cannot be performed until the appropriate Move Request is deleted.

[PS] C:\>New-MoveRequest bouska -TargetDatabase DBnew
Mailbox 'Bouška Petr' has a completed move request associated with it. Before you create a new move request for the mailbox,
 run the Remove-MoveRequest cmdlet to clear the completed move request.

It is also mentioned that to remove Exchange 2010 Move Requests, we must use the Remove-MoveRequest cmdlet on Exchange 2010, not on the newer version.

Preparation for the Move

Before we start moving mailboxes, we can save certain basic information (we can redirect the output of the commands to a text file or save it to CSV), which we will use for migration planning and subsequent checks. We can list the information for selected mailboxes, databases, or for all of them.

Example commands:

Get-Mailbox | FT Alias, Name, Database, ServerName -AutoSize
Get-Mailbox bouska | FT Alias, Name, Database, ServerName
Get-MailboxStatistics bouska | FT DisplayName, Database, TotalItemSize
Get-MailboxStatistics -database DBold | FT DisplayName, Database, TotalItemSize -AutoSize
Get-Mailbox -Database DBold | FT Alias, Name -AutoSize

Number of Mailboxes in the Database and Database Size

Before and during the move, it can be helpful to list the number of mailboxes in the individual databases. This can help us plan the moves and monitor the release of the databases.

[PS] C:\>Get-Mailbox -resultsize unlimited | Group-Object -Property:Database | Select-Object Name, Count |
 Sort-Object Name | Format-Table -Auto
Name      Count
----      -----
DBPFProxy     1
DBold       175
DBnew        19

Similarly, we may be interested in the size of the individual databases.

[PS] C:\>Get-MailboxDatabase -Status -IncludePreExchange2013 | Select-Object Name, DatabaseSize, AvailableNewMailboxSpace |
 Sort-Object Name | FT -AutoSize

Name      DatabaseSize                     AvailableNewMailboxSpace
----      ------------                     ------------------------
DBPF      247.9 MB (259,981,312 bytes)     87.97 MB (92,241,920 bytes)
DBPFProxy 8.063 MB (8,454,144 bytes)       2.375 MB (2,490,368 bytes)
DBold     115 GB (123,498,725,376 bytes)     595 MB (623,935,488 bytes)
DBnew     13.38 GB  (14,361,296,896 bytes) 879.2 MB (921,927,680 bytes)

Deleting Deleted Items

In some cases, the following command may be helpful. If we want to clean up the mailbox before the move and delete a large content, it will still be copied during the move, as deleted items are normally retained for 14 days. We can view how much space the items occupy and delete them.

[PS] C:\>Get-Mailbox bouska | Get-MailboxStatistics | FL *delete*

DeletedItemCount     : 514
TotalDeletedItemSize : 11.04 MB (11,581,031 bytes)

[PS] C:\>Search-Mailbox bouska -SearchDumpsterOnly -DeleteContent

Moving via the Exchange Management Shell

We can use the New-MigrationBatch cmdlet, where the input is a CSV file. Or the New-MoveRequest cmdlet to move a single mailbox or create a batch for multiple mailboxes. Detailed information is in the official documentation.

Let's perform a simple move of a single mailbox.

New-MoveRequest bouska -TargetDatabase DBnew

The EMS has an advantage over the EAC in that we can use switches like CompleteAfter or StartAfter to control when the migration will take place.

We also have a number of cmdlets that display information. We can view the existing Move Request for all the mailboxes being moved (these are created even from a batch for each mailbox), as well as the Migration Batch and list the users, summary statistics (takes only existing (non-deleted) migrations), and statistics for individual mailboxes.

Get-MoveRequest
Get-MigrationBatch
Get-MigrationUser
Get-MigrationStatistics
Get-MigrationUserStatistics

Deleting Old Move Requests

As we mentioned, if we want to perform a new mailbox move, we need to delete the old request. We can delete all the completed ones, for example.

Get-MoveRequest -MoveStatus Completed | Remove-MoveRequest -Confirm:$false

Note: If we delete a Migration Batch, for example in the EAC, all associated Move Request will also be deleted.

Moving Using the Exchange Admin Center

The EAC always performs a batch move using a Migration Batch, where we can easily define the parameters and either manually select the mailboxes or use a CSV file.

  • EAC - Exchange Admin Center
  • Recipients - Migration
  • click the + (New) - Move to a different database
  • add the mailboxes you want to move
  • in the next step, name the batch and choose the DB to move the mailboxes to
  • in the last step, choose the address to which the completion report will be sent, we can leave the automatic start and end of the batch or set it manually

Note: The mailbox move is performed as a standard transport, so transaction logs are created for the entire content. Therefore, during migration, you need to make sure the disk for these logs does not get full.

If the entire batch does not complete, for example, if there is an error on some mailbox, we can resume the incomplete mailboxes. We can view the statistics for individual mailboxes by selecting the batch and clicking View Details in the Mailbox status section on the right. Here we can remove a mailbox from the batch, but unfortunately, we cannot add a new one.

Moving the Discovery Search Mailbox

After moving all the system and user mailboxes, the DiscoverySearchMailbox remained in one of the old databases. Most migration guides do not mention this. It is a mailbox for storing the results of In-Place eDiscovery searches. I found various information that it is either not necessary for Exchange 2016 or vice versa is required, and it should either be migrated or recreated from scratch (Delete and re-create the default discovery mailbox in Exchange). I preferred to migrate it. Some additional information Discovery Mailbox In Exchange 2010, Migrate Discovery Search Mailbox from Exchange 2010 to Exchange 2013?.

[PS] C:\>Get-Mailbox -RecipientTypeDetails DiscoveryMailbox | FT Name, Database

Name                                                          Database
----                                                          --------
DiscoverySearchMailbox {D919BA05-46A6-415f-80AD-7E09334BB852} DBold

[PS] C:\>New-MoveRequest DiscoverySearchMailbox* -TargetDatabase DBnew

DisplayName               StatusDetail        TotalMailboxSize        TotalArchiveSize PercentComplete
-----------               ------------        ----------------        ---------------- ---------------
Discovery Search Mailbox  WaitingForJobPickup 76.48 KB (78,319 bytes)                  0

Mailbox Move Process - How to Proceed with the Migration

In general, the mailbox move can be performed during normal operation. At the moment it is completed, the user is notified that they need to restart Outlook. Then they need to download Autodiscover with the new information. In many cases, this happened automatically without any problems, but not always. According to the information, it depends on the AD DS replication and Autodiscover caching. It is probably better to complete the mailbox migration outside of working hours.

For the problem where Autodiscover does not return the correct information, I found information in the article Troubleshooting connection issues from users migrated from Exchange 2010 to Exchange 2013/2016 that it is possible to restart the application pool on IIS (on all Exchange servers). This immediately solved the problem of the user accessing the moved mailbox.

Restart-WebAppPool MSExchangeAutodiscoverAppPool

Offline Address Books (OAB)

Documentation: Email addresses and address books in Exchange Server, Offline address books in Exchange Server.

  • Global Address List (GAL) - the main list of all recipients in the organization, usually the Default Global Address List
  • Address List - a dynamic subset of the GAL that contains a group of recipients, such as all distribution groups
  • Offline Address Book (OAB) - a group of Address Lists that users can download and use when offline, usually containing the Default Global Address List

OAB was improved in Exchange 2013, so only version 4 is supported, with web-based distribution, and generation taking place in a designated Arbitration mailbox, not a designated server. Therefore, the OAB generation may not need to be moved to another server during the migration to Exchange 2016. Only the Organization Mailbox SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c} will be moved.

Configuring OAB

When installing the first Exchange 2016, a new OAB is created (with "Ex2013" in the name, even though it's version 2016) version 4. We can list all the OABs in the organization.

[PS] C:\>Get-OfflineAddressBook

Name                                  Versions   AddressLists
----                                  --------   ------------
Default Offline Address List          {Version4} {\Default Global Address List}
Default Offline Address List (Ex2013) {Version4} {\Default Global Address List}

We can assign an OAB to individual mailbox databases that the mailboxes in it will use. If we don't have an OAB assigned, the latest version will be used. If we have a large organization and have created special OABs that don't contain everything, it is recommended to set the required OAB on the new DBs before migrating the mailboxes. In general, it is recommended to have the OAB set so that it is clear which OAB will be used.

[PS] C:\>Get-MailboxDatabase -IncludePreExchange2013 | FT Name, OfflineAddressBook

Name   OfflineAddressBook
----   ------------------
DBold  \Default Offline Address List
DBnew

In a typical company, the new OAB may contain the same as the old one, and we can immediately set the use of the new OAB. Either on individual DBs or on all (in the example only on the new server DBs).

Set-MailboxDatabase DBnew -OfflineAddressBook "Default Offline Address List (Ex2013)"
Get-MailboxDatabase | Set-MailboxDatabase -OfflineAddressBook "Default Offline Address List (Ex2013)"

We can, of course, also list the existing GALs and Address Lists.

Get-GlobalAddressList
Get-AddressList

Generating OAB

The OAB generation is managed by the Mailbox Assistant named OABGeneratorAssistant, which runs under the Microsoft Exchange Mailbox Assistants service. It takes place in a designated Arbitration Mailbox that has the PersistedCapability property set to OrganizationCapabilityOABGen. By default, OAB generation occurs every 8 hours. The Outlook client downloads the OAB by default every 24 hours or we can manually initiate it.

We can change the scheduled OAB generation according to the procedure Change the offline address book generation schedule in Exchange Server. We can manually trigger the OAB generation (update) using the Update-OfflineAddressBook cmdlet, Use the Exchange Management Shell to update offline address books. OAB files are stored on the Exchange server in the folder %ExchangeInstallPath%ClientAccess\OAB\<OAB GUID>.

Author:

Related articles:

Migrating Exchange organization 2010 to 2016

I was migrating an organization from Exchange Server 2010 to Exchange Server 2016. The whole process was quite demanding and long (it took me 4 months even with my studies). In the process, I came across a number of problems, errors and shortcomings (even in the official documentation). I am creating this series from my notes. This is not a complete guide to the transition, but highlights and mentions of issues I encountered. Individual articles describe different areas of Exchange Server 2016, so it is not only a transition from an older version, but also suitable for a new installation or administration.

Microsoft Exchange

Almost since the beginning of my practice, I have been involved in the administration of the Microsoft mail server, i.e. Exchange Server. I started with the 2003 version and worked my way up to Exchange Online. The articles cover many areas of management. Most since the migration to Exchange Server 2016 and its complete configuration. But also Exchange Hybrid and e-mail security.

If you want write something about this article use comments.

Comments

There are no comments yet.

Add comment

Insert tag: strong em link

Help:
  • maximum length of comment is 2000 characters
  • HTML tags are not allowed (they will be removed), you can use only the special tags listed above the input field
  • new line (ENTER) ends paragraph and start new one
  • when you respond to a comment, put the original comment number in squar brackets at the beginning of the paragraph (line)