Unfortunately in Exchange 2003 the only way to shrink that database is by performing an offline defrag, bringing your mail users offline for the time it takes to perform the operation. An alternative is to create a second mailbox database and move all the mailboxes to this database allowing you, once completed, to delete the original database file. Whilst this is a viable option for enterprise editions the Exchange 2003 standard edition is limited to 1 mailbox database. Not very handy…
A work around for this is to use a dial tone recovery database to allow your users to keep receiving and sending email while you perform an offline defrag. Downside of this is that any user who is in online mode will not have access to their older emails. A dialtone database is, in essence, a temporary database you can use when the original edb file is corrupted and you do not want to have your users go offline during your attempts to save the original edb file. Using this method does bring in a bit of administrative overhead as you need to perform a recovery storage group merge later on, the need to go ahead with this operation relies solely on the situation…
In Exchange 2007 and 2010 a powershell commandlet has been introduced allowing one to clean up this whitespace whilst the database is still online. It runs against one or all databases at a time and might take some time to complete.
To run it against one database:
Clean-mailboxdatabase –identity “Database name”
To run it against all databases:
Get-mailboxdatabase | clean-mailboxdatabase