Speed up mailbox migration to Exchange 2013 – They’re too slow!

Moving mailboxes from Exchange 2007 or 2010 to Exchange 2013 can often go very slowly, even when the network and server resources are fast and abundant!  The Exchange Mailbox Replication Service (MRS) has extensive resource throttling enabled by default in order to prevent mailbox moves from choking out the rest of the users.  Because of this you may see mailboxes with a status of RelinquishedWlmStall and if you look at the details of the Get-MoveRequestStatistics report you will see mailboxes have a lot of time sitting idle under the TotalStalledDueToWriteThrottle counter. Microsoft tech support suggests making changes to the “MSExchangeMailboxReplication.exe.config” file located at “C:\Program Files\Microsoft\Exchange Server\V15\Bin”.  The values to look at, along with their default settings are: MaxActiveMovesPerSourceMDB=”20″ MaxActiveMovesPerTargetMDB=”20″ MaxActiveMovesPerSourceServer=”100″ MaxActiveMovesPerTargetServer=”100″ MaxTotalRequestsPerMRS=”100″ ExportBufferSizeKB=”512″ We typically like to set these values so that about 10 mailboxes can be moved simultaneously.  The ExportBufferSizeKB we’ve used in the past is “10240”.  The Exchange Mailbox Replication Service should be restarted after these changes. The other suggestion Microsoft has made is to disable content indexing on the target database so that the search index scanner isn’t overwhelmed by all the new messages needing to be indexed.  You’ll want to set it back once the migration is complete. Set-MailboxDatabase “DB1” -IndexEnabled:$False In our experience however, these first two suggestions do NOT have tremendous impact on the overall speed.  The following two options have proven to be the most effective for us. Use the “-priority emergency” parameter on the mailbox moves.  This will give the move the highest priority in the MRS queue.  For example: New-MoveRequest -Identity “user@domain.com” -TargetDatabase “DB1” -Priority emergency If the priority flag and the MRS config editing doesn’t make the moves fast enough for you, then disable MRS throttling altogether!  To...

Exchange 2013 DAG: Can’t add a database copy – “Seeding operation failed”

We had an issue when attempting to add a database copy for any mailbox databases in a new DAG.  We received one of the following errors every time, regardless of the source or destination server. The seeding operation failed. Error: An error occurred while running prerequisite checks. Error: The specified database isn’t configured for replication and therefore cannot be used to perform seed operations. The seeding operation failed. Error: An error occurred while performing the seed operation. Error: An error occurred while processing a request on server ‘MailboxServerName’. Error: Database ‘6060c9ac-363a-4e52-a02e-ba749625e8ea’ was not active on source server ‘MailboxServerName’. [Database: Test3, Server: MailboxServerName.domain.com] After closing out the dialog box we found that the database showed multiple copies, but that the copy was in a failed and/or suspended state. We troubleshot this and found that the client’s several domain controllers were not replicating information as quickly as we were used to.  To help with this, we set the preferred domain controller to a global catalog DC residing in the same network using the following command:  Set-ADServerSettings -PreferredServer server.domain.com This seemed to help some other minor ECP errors where we felt like IIS was thinking faster than AD could keep up, but this did not remove the errors we saw when creating a database copy. The solution was to walk away and wait for about 30 minutes and on return we found that some of the mailboxes cleaned up on their own and went to a healthy state.  For the majority that didn’t resolve themselves we fixed them in ECP by selecting the database and on the right pane click “Update” under the database copy that failed. In the dialog box that followed we did not specify a source server, continued, and the mailbox replicated...

Exchange 2013 – Can’t access ECP, 500 Unexpected Error

We had an issue with a client migrating from Exchange 2007 to 2013 where we couldn’t access ECP on any of the new 2013 CAS servers.  Instead we received the following: 500 Unexpected error  : (  An error occurred and your request couldn’t be completed. Please try again. We also noticed that although the Exchange Management Shell would successfully open and operate, on first opening it we received an error that contained the following message: Unable to determine the installed file version from the registry key ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine’.  After much troubleshooting (reinstalling CAS servers, deleting/recreating ECP folders, checking permissions, etc.) we found that we needed to install the “Windows PowerShell 2.0 Engine” feature from Server Manager (this also installed .NET 3.5).  These features needed to be installed on ALL of the new 2013 Exchange servers and not just the CAS servers. Although these features aren’t a prerequisite for a 2007 to 2013 migration, there must’ve been something in the existing AD/Exchange environment that required it.  Hope this helps someone...

Barracuda ADC Load Balancer with 2012 Remote Desktop Services

We had a problem with a group of Remote Desktop Servers sitting behind a Barracuda ADC Load Balancer.  The client either couldn’t connect, or they would connect to a different server even when they had a session open already on another server.  There was a group policy change that fixed our problems.  Go to the following path on your RDS GPO. Computer Configuration -> Policies -> Admin Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> RD Connection Broker Change these two settings: Use IP Address Redirection - Disabled Use RD Connection Broker load balancing - Disabled...

Backups failing with Event ID 904

One of our clients was having an issue with backing up Exchange 2007 using Ahsay Online Backup Manager.  The backups were failing nightly and Ahsay was returning the error CExBackup::backupService:HrESEBackupSetup: Error Number 0xc7fe1f45: Instance not found.  A search of this error revealed that this error originated in Exchange and passed through to Ahsay.  Checking the Application event log showed that for every failed backup there was an error with Event ID 904. The source is ESE Backup and the error text is Information Store (3396) Callback function call ErrESECBPrepareInstanceForBackup ended with error 0xC7FE1F45 Instance not found. Researching this error online mostly pointed to this Microsoft Knowledge Base article, http://support.microsoft.com/kb/924204.  However the article says this error occurs when the drive containing the transaction logs is full and I knew that this did not apply to the issue our client was having as they had nearly 245GB free on the drive where the transaction logs were stored. I continued to search for answers and came across this posting from 2006; http://forums.msexchange.org/m_1800413118/mpage_1/key_/tm.htm#1800413118.  In this forum thread the user Joseph Finnie reported that he observed this error when attempting to backup Exchange 2007 while a Recovery Storage Group was present on the server. I checked the Exchange server for the presence of a RSG by opening the Exchange Management Console, selecting Toolbox and then selecting Database Recovery Management.  This opens the Microsoft Exchange Troubleshooting Assistant.  After the TA connects to Active Directory you will come to a page that says “Select one of the following tasks” and the section you want to look under is “Manage Recovery Storage Group.”  If there is an RSG present, click the link...

Registry editing through GPO

By Thomas Manier - Posted Feb 24, 2012 5:30PM I wanted to give a quick tutorial on how to change registry keys through group policy. This is actually documented several times on the internet but very few give a clear understanding of the steps you need to take in order to achieve a quick solution. As a note, this will permanently add registry keys to computers. You can modify the values through group policy but it will require extra work in order to remove any key created in this manner. Also, I’m not going to cover everything you can do with this feature of group policy (technically, it’s an entire scripting language) but just how to push out registry keys to the HKEY_User directory. 1 - You will need to create an .adm file in Notepad with the following format: CLASS USER CATEGORY !!Name POLICY !!Name EXPLAIN !!Explanation KEYNAME "Key directory" VALUENAME "Key name" VALUEON "key value when active" VALUEOFF "key value when inactive" END POLICY END CATEGORY[strings] Name="Custom name" Explanation="Custom Explanation" If you want to adhere to standards the name should be all lower case and saved in the %SystemRoot%inf directory. The “key directory” will be the directory in HKEY_CURRENT_USER that will be used. The “key name” will be the actual key that will be modified and the two values will be the DWORD or String that will be stored in the key when the group policy is on or off. The “Custom name” and “Custom Explanation” are strings that can be modified to show in GPEDIT what is actually happening in this group policy. Below is an...