删除数据库内容后,MS Access(.mdb)文件大小不会减小吗?
我正在使用JDBC-ODBC驱动程序将数据插入MS Access数据库。空白的mdb文件为2KB。填充此数据库后,大小增加到155MB。然后我删除了数据。但是我发现mdb的大小仍然与155MB相同。我没有任何错误。但是这样正常吗?我希望文件大小会减少。如果以这种方式设计,其背后的想法是什么?谢谢
解决方案
MS Access不会释放记录所使用的空间,即使它们已被删除。我们可以在需要时手动释放空间,或者在每次关闭应用程序时自动释放空间。
要手动执行此操作,请使用"压缩和修复"实用程序:
- 备份数据库,因为Access 2007中存在一个错误,该错误可能会在压缩过程中删除数据库。
- 如果要压缩服务器或者共享文件夹上的多用户(共享)数据库,请确保没有其他人打开它。
- 在工具菜单上,指向数据库实用工具,然后单击压缩和修复数据库。
要在关闭应用程序时自动执行此操作:
- 打开我们要MS Access自动压缩的数据库。
- 在工具菜单上,单击选项,然后选择常规选项卡。
- 选择关闭时紧凑复选框。
删除数据并压缩数据库后,如果它仍然大于100 KB,请不要感到惊讶。首次添加数据后,有一定数量的开销无法消除。
另外,请注意,自动编号字段值的行为与压缩过程之后公布的行为不同:根据MS Access 2000文档,如果我们从具有自动编号字段的表的末尾删除记录,则压缩数据库将重置自动编号值。因此,我们添加的下一条记录的AutoNumber值将比表中最后一个未删除记录的AutoNumber值大一个。
我没有发现这种情况:如果我们有100条自动编号的记录并删除最后50条,则下一条自动编号记录(根据文档)应编号为" 51"。但是根据我的经验,它的编号为" 101"。
在压缩数据库之前,MS Access不会回收记录的空间。
作为常规维护的一部分,我们应该对访问数据库执行此操作,否则最终会遇到一些非常痛苦的问题。
我们可以通过MS Access UI来压缩数据库(工具->数据库实用程序->
压缩和修复数据库),我们可以使用以下命令提示符:
msaccess.exe "target database.accdb" /compact
N.B. / Compact开关必须位于目标数据库之后
如上所述,第一站应该尝试压缩/修复数据库。但是,通过创建新数据库并从旧数据库导入所有对象,还可以节省一些空间。除此之外,将其转换为MDE还可以使我们获益匪浅。与往常一样,不要随意处理生产副本。另外,如果使用MDE,请确保已首先正确分割了数据库。 (当然,如果将来需要进行修改,请保留源MDB的副本。)
我们可以使用JRO从代码压缩数据库。请参阅:http://support.microsoft.com/kb/230501