Exchange 2013 fun with Information Store
I've been working with the Exchange Team on some additions to the Exchange 2013 Role Requirements calculator scripts lately and I picked up an interesting issue with the Information Store service on Exchange 2013 while testing my changes to the scripts.
I wanted to share this experience to increase visibility to our customers in case someone encounters the same problem as it took me a while to figure out what the root cause of the problem was.
As you probably already know the Exchange 2013 Role Requirements calculator scripts creates the databases, the DAG and the mailbox database copies depending on the input you provide to the calculator. This makes deployment way easier and allows you to deploy servers exactly the same way, because the PowerShell scripting engine does all the work for you.
So here’s the lowdown:
- Run the mailbox database creation script.
- Run the Database Availability Group script.
- Run the mailbox database copy creation script.
- Everything looks good and scripts are all green….life is good….or is it?
Once I reboot the server or restart the Information Store service, the service will just fail to start with the errors seen below.
Event log error: -2147221233
Event log error: No databases found on this server.
So on to troubleshooting:
- First we need to know what 0x8004010f and -2147221233 means.
- Luckily I already know 0x8004010f refers to an object that could not be found.
- And in Exchange Server 2013 “-2147221233” error code refers to “NotFound”
- Ok, so obviously the Information Store service isn't finding some stuff to get the wheels turning.
- Now at this stage I’m thinking it might be looking for a database or email address policy somewhere that it cannot find, but after checking everything is looking good.
- Then I move on to see if permissions are looking good on my database objects as well as my servers.
With the above all good, I then take a look at the logic that the Managed Information Store service code uses to start the service and I find a piece of code that refers to maximum active databases in the start-up process.
I get that “aha” moment and check my MaximumActiveDatabase parameter on the Exchange Server.
Get-mailboxserver UCLABZ-EX15-01|select MaximumActiveDatabases
Low and behold it’s 0, I change the value to 1 to test
Get-mailboxserver UCLABZ-EX15-01|set-mailboxserver –maximumactivedatabases 1
Test the service and it starts successfully.
Now why on earth is it 0?
After double checking the PowerShell code and the input files I find a small issue which results in the Maximum Active Databases value to always be 0.
I fix the code and life is good again…for real this time. :-)
So, would you ever want to set MaximumActiveDatabases to 0 on an Exchange Server?
The simple answer is NO. We have better means of limiting database activations on servers – think about DatabaseCopyActivationDisabledAndMoveNow and DatabaseCopyAutoActivationPolicy
You want to use MaximumActiveDatabases to limit the amount of active databases at a time on the server, but you don’t want to use this parameter to disable activations of mailbox database copies.
I hope the above helps someone out there, because it took me a while to find the root cause of this very interesting issue.
PS: A bug has been filed for the above, but we’ll have to wait and see if it will make the “cut”.
Until next time,