在人们问我的大多数关于Exchange的问题当中,有这么一个问题:为什么当管理员删除了一些没用的旧邮箱或者公用目录以后,数据库的大小并没有改变呢?不幸的是,这个问题的答案并不那么简单。实际上数据库的大小的确是改变了,但是数据库文件的大小却没有改变。
当您删除了邮箱或者公用目录之后,您实际上是把这些记录从数据中移除了,这样的确是释放了数据库内部的空间并减小了数据库的大小,但对于数据库文件的体积大小来说,这样做并不起作用。您只能通过使用文件碎片整理来改变数据库文件的大小。
您很可能比较熟悉碎片整理,因为这是和文件系统相关联的。当您在硬盘上创建或者删除文件时,硬盘就会逐渐产生文件碎片。这样一来,磁盘的读写性能就会降低,因为Windows在写入、创建或者修改一个文件的同时,是不能再进行其他的哪怕是单一的读、写操作的。实际上,在硬盘进行读、写操作的时候,硬盘磁头不得不跳过盘片上某些间隙或者未使用的空间来读取分散的文件碎片或者写入数据。
只是您可能还未注意到这一点,那就是文件碎片在数据库中也是存在的。当创建邮箱或者删除邮箱时,数据库本身会产生碎片,这一点和在文件系统中产生碎片的情况很类似。而且正如文件系统中性能的降低一样,充满碎片的数据库性能也会降低。
自动碎片整理
微软在Exchange2000和Exchange2003中都分别提供了自动整理碎片的功能以促进数据库性能的提高。这个功能会在每天凌晨1点到5点之间自动对各种Exchange数据库进行碎片整理操作。
自动碎片整理功能有一些很实用的特性。第一,您不必亲自动手做数据库的碎片整理工作了(不过您还是得自己对文件系统进行碎片整理)。第二,在进行碎片整理时数据库仍处于在线状态,这样您还是可以照常访问您的邮件。第三,如果这个自动碎片整理的功能和其他一些操作存在冲突,您还可以重新为它制订执行计划。
如果您想改变自动碎片整理的时间计划,只要打开Exchange系统管理工具,在要进行操作的数据库上单击右键,然后在弹出的快捷菜单中选择属性即可。这时您会看到该数据库的属性列表,请切换到数据库选项卡并单击维护间隔部分的自定义按钮。然后您就可以自定义您的自动碎片整理计划了。要注意一点,您需要为您的每个数据库都都设置一下,您的自定义时间计划才会在该数据库上有效。
在碎片整理之前和之后进行备份
现在我已经解释了自动碎片整理是如何工作的了。那让我们回到最开始的问题,为什么您的Exchange数据库在进行了碎片整理之后,数据库文件的体积还是没改变呢?
原来,数据库文件大小不改变的问题出在数据库本身。在数据库的头部,明确的指定了一定的空间大小分配给数据库文件所使用。而碎片整理只移除了数据库内部的无效记录以提升数据库的性能,却并没有压缩数据库。所以数据库文件还是占用了一些无必要的空间。
而找回这些丢失的空间的唯一方法就是手动执行一次脱机碎片整理。必需手动的原因就是脱机碎片整理要在数据库处于脱机状态下才能运行,这样的话在进行碎片整理期间就不能访问邮件了。
不过在我解释脱机碎片整理是如何工作之前,我必须提醒您一些值得注意的地方。您应该在执行脱机碎片整理之前和之后都对您的数据库进行一次完全备份的操作。在脱机碎片整理之前进行完全备份是非常重要的,因为碎片整理这个过程会重写数据库,有可能会发生一些错误。所以您需要一次完全备份以便能够在数据库发生一些重大错误之后恢复到正常的状态。而在进行碎片整理之后进行完全备份的原因是,脱机碎片整理之后的增量备份或者差异备份都会无效。如果您尝试在脱机碎片整理之后对数据库进行增量备份或者差异备份的话,备份程序会尝试备份那些已经被移除的记录而最终导致备份无效。
如何进行脱机碎片整理
要进行脱机碎片整理的话只需要将数据库置于脱机状态并执行ESEUTIL命令,并且加上参数\D即可。在Exchange2000中,ESEUTIL程序在Exchange 2000的安装光盘的\SUPPORT\UTILS目录下。而在Exchange 2003中,安装程序会自动将ESEUTIL安装至服务器硬盘的\Program Files\EXCHSRVR\BIN 目录下。
关于使用ESEUTIL进行碎片整理,您还必须知道的一点是,默认情况下ESEUTIL实际上是创建了一个全新的空数据库,并将您想要整理的数据库中必要的数据拷贝过去之后将旧数据库删除。这样可以节约磁盘空间,不过也意味着如果出现什么错误的话您将不能恢复至原有数据库的状态了。
我推荐您将参数\P和参数\D一起使用。参数\P可以令ESEUTIL保留原有的数据库。这样您就可以在确认新的数据库工作正常之后再手动删除旧的数据库。所以请在您进行脱机碎片整理之前确保您的服务器有足够的硬盘空间来存储这两个数据库。
欲查询更多关于脱机碎片整理的信息,请查看微软的知识库文章,编号192185(http://support.microsoft.com/?kbid=192185)
,