我花了几个小时弄清楚如何从 Exchange 2010 中特定日期范围内的邮箱中删除消息。但我仍然无法找到正确的 PowerShell 脚本来执行此操作。
因此我删除了所有带有 cmdlet 的消息Get-Mailbox | Search-Mailbox -DeleteContent
。
虽然应该删除 5GB(统计数据显示所需的邮箱现在为空),但它并没有释放包含我的 Exchange 数据库的硬盘空间。
我是否需要执行任何类似 SQL 的操作来“提交”删除事务?
答案1
你正在寻找的是离线碎片整理。该命令eseutil /d
将为您提供所需的信息。请参阅链接的 Microsoft KB。
请注意当执行此操作时,您需要将临时数据库放在具有与当前交换数据库相同数量可用空间的不同分区上。
答案2
回答您的实际问题,Nixphoe 的离线碎片整理功能给出了正确的答案。不过需要注意的是,在碎片整理期间(可能长达数小时),您正在整理的数据库中的所有邮箱都将处于离线状态。
然而,如果您认真考虑执行像脱机碎片整理这样的重大操作来回收 5GB 的磁盘空间,那么您需要紧急升级您的存储空间(当磁盘写满时,Exchange 就会出现不好的情况)。
如果您确实想这样做,那么一个更好更简单的替代方法是创建一个新的邮箱数据库,并将您的邮箱从旧数据库移动到这个新数据库。这还有一个非常吸引人的好处,那就是只将当前正在传输的邮箱脱机,这意味着您的用户的停机时间比脱机碎片整理要少得多。不过,这种方法的缺点是,在将邮箱在两个数据库之间移动时,您需要足够的存储空间来容纳现有数据库和新数据库。
.edb 文件(实际的 Exchange 数据库)没有变小的原因是 Exchange 的性能特性,除非您有真的有充分理由,我永远不会建议您对生产数据库进行脱机碎片整理。恕我直言,您问这个问题意味着您不理解 ESE 数据库引擎为什么以这种方式工作,因此可能没有充分的理由进行脱机碎片整理。