When you move a Mailbox from one server to another, you can use the Exchange Management Console to issue a New MoveRequest command. Under the hood this is translated to a Management Shell command which in turn is executed.
You can also use the Exchange Management Shell directly to issue the command by entering the following cmdlet:
New-MoveRequest -Mailbox <> -TargetDatabase <>
This will initiate a move request and the mailbox will be moved. When the move is at approximately 95% then the mailbox will be frozen, the last bits will be moved to the new Database, the Active Directory properties are changed and the mailbox is released again. When online, the user gets a popup message that the administrator made significant changes and that Outlook needs to be restarted.
To avoid this, you can use the SuspendWhenReadyToComplete parameter:
New-MoveRequest -Mailbox <> -TargetDatabase <> -SuspendWhenReadyToComplete
Now, when the mailbox reaches approximately 95% the actual move will stop, but the Mailbox Replication Service (which is responsible for moving the actual mailbox) will keep the two mailboxes in sync. When you check the status of the Move Request, you'll a status of "AutoSuspended".
The Mailbox Replication Service will keep the two mailboxes in sync for 30 days. After 30 days the 'new' mailbox will be automatically deleted.
You can complete the MoveRequest at a later point in time, for example during off-business hours by entering the following command:
Resume-MoveRequest -Identity <>
Please not that if you're move the mailbox to a database in a DAG, the replication needs to be healthy. If replication fails for more than 30 minutes, the MoveRequest will fail as well.