Migrating to Exchange 2016 – Part 2

After creating in the previous article a new two-node DAG (DAG2016) with the two Exchange 2016 Server computers  let’s create the new database (TestCompany2016) on Exch11:3839 40 41

If we try to add the empty database to the DAG we won’t find the corresponding option on the More drop-down list:42

…so let’s first move all mailboxes from the TestCompany database to the TestCompany2016:



In a production environment it’s highly recommended to check the “Manual Complete…” option because it allows an administrator to choose the time when users get disconnected briefly before redirecting to the new database:

Clicking on the View details allows to see the detailed information on the migration process:

When the migration is completed at 95% the “Complete this migration batch” link gets available on the right pane:
After some time the migration batch is completed:
54 5556


Here’s the email notification sent to Administrator’s mailbox:

Using this command I can make sure the users’ mailboxes have really  migrated to the new database:

Get-MailboxDatabase |where {$._.Name -eq ‘TestCompany2016’} |Get-Mailbox

The next step is to move the special mailboxes that still reside in the TestCompany database – I moved them to TestCompany from the Exch1\DefaultDB right after creation of TestCompany database (please see Deploying Exchange 2013SP1 – Part1 for details). We can see what mailboxes remain in the old database using the following commands:

Get-MailboxDatabase |where {$._.Name -eq ‘TestCompany’} |Get-Mailbox

Get-MailboxDatabase |where {$._.Name -eq ‘TestCompany’} |Get-Mailbox -Arbitration

Get-MailboxDatabase |where {$._.Name -eq ‘TestCompany’} |Get-Mailbox -Monitoring


I won’t migrate monitoring mailboxes because Exchange itself creates the health mailbox(-es)  (but not arbitration ones!) in each database on a server, active or passive:
More details on health mailboxes:  http://blogs.technet.com/b/admoore/archive/2015/03/11/exchange-2013-health-mailboxes.aspx

So let’s move arbitration and Discovery mailboxes to TestCompany2016:

Get-MailboxDatabase |where {$_.Name -eq ‘TestCompany’} |Get-Mailbox -Arbitration |New-MoveRequest -TargetDatabase ‘TestCompany2016’

Get-MailboxDatabase |where {$_.Name -eq ‘TestCompany’} |Get-Mailbox  |New-MoveRequest -TargetDatabase ‘TestCompany2016’68

After checking the status of the move requests we can safely delete them:

Now let’s make sure all mailboxes have migrated successfully:

Get-MailboxDatabase |where {$_.Name -eq ‘TestCompany’} |Get-Mailbox -Arbitration

Get-MailboxDatabase |where {$_.Name -eq ‘TestCompany’} |Get-Mailbox

My Exchange organization contains a public mailbox named Public,


so the final step will be to migrate that public mailbox – the process is exactly the same as migrating the user mailboxes:

New-MoveRequest -Identity ‘Public’-TargetDatabase ‘TestCompany2016’ -SuspendWhenReadyToComplete

Get-MoveRequest -Identity ‘Public’

Resume-MoveRequest -Identity ‘Public’

Get-MoveRequest -Identity ‘Public’

Get-MoveRequest -Identity ‘Public’ | Remove-MoveRequest
71-PublicDONEPlease pay attention to the -SuspendWhenReadyToComplete parameter: it allows to complete the migration (followed by the disconnection from the old database and the reconnection to the new one) during non-business hours.


Now let’s test the new database by sending an email message and creating a new post in the public folder:



And the final step: we add TestCompany2016  to the DAG2016:

– this time Add Database Copy option is available because the database is not empty.

84 8385Migration of mailboxes is completed. In the next part we will reconfigure client access so that only Exchange 2016 servers be servicing client requests.

%d bloggers like this: