Applies to: Exchange Server 2010 SP3

Topic Last Modified: 2012-10-25

The .edb file of a database may grow too large for its volume in Microsoft Exchange Server 2010. If this occurs, you must take the following actions:

As an optional third step, you can re-create the original database, and then restore some of the mailboxes to it.

To resolve this issue, follow these steps.

Important:
Contact Microsoft Customer Service and Support for help to complete this procedure. For more information, see the Contact us website.

Prerequisites

  • Verify that all copies of the database are in a healthy state. To do this, run the following command:

    • Get-MailboxDatabaseCopyStatus (Get-MailboxDatabase | ? {$_.EdbFilePath -eq $pathToEDBdatabaseFile})

    For more information, see Monitoring High Availability and Site Resilience.

  • In Exchange Management Shell, run the following commands to determine whether mailboxes exist on the databases:

    • Set-ADServerSettings -ViewEntireForest $True

    • Get-Mailbox -Database "<Database_ID>"

    If the mailboxes do exist, see the Create a Local Move Request topic to move the mailboxes to databases that have more space.

Warning:
This process can permanently delete data. Make sure that there no mailboxes exist on the affected database before you go to the next step.

Use the shell to reclaim space when the edb file size has grown too large

You need to be assigned permissions before you can perform this procedure. To see what permissions you need, see the "Mailbox databases" entry in the Mailbox Permissions topic.

  1. Open Exchange Management Shell.

  2. Note the configured properties of the affected database and database copies. See the Configure Mailbox Database Copy Properties topic for the properties that will have to be reset when the database copies are re-created.

  3. Follow the instructions in the Remove a Mailbox Database Copy topic to remove all passive copies of the database.

    Note:
    As mentioned in the “Remove a Mailbox Database Copy” topic, circular logging must be disabled when you remove the last passive database copy. If circular logging is enabled, run the following cmdlet to disable it for the database: Set-MailboxDatabase "<Database_Identity>" –CircularLoggingEnabled $false
  4. Run the following cmdlet to unmount the database: Dismount-Database "<Database_Identity>"When you are prompted, type a to confirm the action.

  5. Run the following cmdlet to remove the mailbox database: Remove-MailboxDatabase "<Database_Identity>"When you are prompted, type a to confirm the action.

  6. Manually delete the .edb file and log files of this database from all servers that contained database copies. Also, manually delete the .edb file and log files from all servers that contain a copy of the database that you are removing.

  7. Follow the instructions in the Create a Mailbox Database topic to re-create this database.

  8. Run the following cmdlet to mount the empty database: Remove-MailboxDatabase "<Database_Identity>".

  9. Manually delete the edb and log files of this database from all servers that contained database copies.

  10. Follow the instructions in the Create a Mailbox Database topic to re-create this database.

  11. Run the following cmdlet to mount the empty database: Mount-Database "<Database_Identity>" -Force

  12. Follow the instructions in the Add a Mailbox Database Copy topic to re-create all the database copies you removed in step 2. Use the properties that you noted in step 2.

  13. If Circular Logging was disabled in step 3, run the following cmdlet to enable Circular Logging: Set-MailboxDatabase "<Database_Identity>" -CircularLoggingEnabled $true. For more information about circular logging, see the "Circular Logging" entry in the Understanding the Exchange 2010 Store topic.

  14. Move some mailboxes back to this database.

Validation

To validate the database, follow these steps.

  1. Run the following cmdlet to verify the health of all copies of this database: Get-MailboxDatabaseCopyStatus "<Database_Identity>"

  2. Run the following cmdlet to verify that the database can replicate changes to all servers that contain database copies: Test-ReplicationHealth <Each_Server_With_A_Copy_Of_The_Database>

  3. Run the following cmdlet to verify the health of all servers that contain database copies: Test-MAPIConnectivity <Server_With_The_Mounted_Copy_Of _The_Database>

For More Information