我为什么要关心压缩MS Access .mdb文件?

时间:2008-09-16 16:53:41

标签: ms-access

我们分发使用MS Access .mdb文件的应用程序。有人注意到在MS Access中打开文件后文件大小缩小了很多。这表明该文件是压缩的良好候选者,但我们没有为用户提供这样做的手段。

所以,我的问题是,这有关系吗?我们关心吗?如果我们的用户从不压缩数据库会发生什么坏事?

9 个答案:

答案 0 :(得分:11)

除了缩小数据库之外,它还会重新计算表上的索引并对表进行碎片整理,从而加快访问速度。它还会发现数据库中永远不会发生的任何不一致,但可能由于Access中的错误或崩溃而发生。

但并非完全没有风险 - bug in Access 2007偶尔会在此过程中删除您的数据库。

所以这通常是一件好事,但要配合一个好的备份程序。备份到位后,您还可以从任何“不可恢复的”压缩恢复,并以最少的数据丢失修复问题。

答案 1 :(得分:4)

确保定期压缩和修复数据库,尤其是在数据库应用程序经常更新,删除和插入时。这不仅可以将数据库文件的大小降至最低 - 这将有助于加速数据库操作和网络通信 - 它还可以执行数据库管理,这对数据的稳定性更有利。但在压缩数据库之前,请确保对文件进行备份,以防万一压缩出现问题。

Jet压缩数据库以重新组织文件中的内容,以便为数据,表或索引分配的每个4 KB“页面”(2 KB用于Access 95/97)位于连续区域中。 Jet从标记为已删除的记录中恢复空间,并以主键顺序重写每个表中的记录,如聚簇索引。这将使您的db的读/写操作更快。

Jet还会在压缩过程中更新表统计信息。这包括识别每个表中的记录数,这将允许Jet使用最佳方法来扫描记录,方法是使用索引或在记录很少时使用全表扫描。压缩后,运行每个存储的查询,以便Jet使用这些更新的表统计信息重新优化它,这可以提高查询性能。

Access 2000,2002,2003和2007将压缩与修复操作结合起来,如果需要的话。修复过程:

1 - 清理未完成的交易

2 - 将系统表中的数据与实际表,查询和索引中的数据进行比较并修复错误

3 - 修复非常简单的数据结构错误,例如丢失指向多页记录的指针(这并不总是成功的,这就是“修复”并不总是能够保存损坏的Access数据库的原因)

4 - 替换有关VBA项目结构的缺失信息

5 - 替换打开表单,报告和模块所需的缺失信息

6 - 修复表单,报告和模块中的简单对象结构错误

如果用户从不压缩/修复数据库,可能会发生的坏事是它会因膨胀而变慢,并且可能会变得不稳定 - 意味着已损坏。

答案 2 :(得分:3)

压缩Access数据库(也称为MS JET数据库)有点像对硬盘进行碎片整理。访问(或者更准确地说,MS JET数据库引擎)在重用空间方面不是很好 - 所以当更新,插入或删除记录时,空间并不总是被回收 - 相反,新空间被添加到数据库文件的结尾而是用来代替。

一般的经验法则是,如果您的[Access]数据库将被写入(更新,更改或添加到),您应该允许压缩 - 否则增大(不仅仅是你添加的数据)。

所以,回答你的问题:

  • 是的,它确实很重要(除非您的数据库是只读的)。
  • 你应该关心(除非你关心你的用户的磁盘空间)。
  • 如果你没有压缩Access数据库,随着时间的推移,它会比它内部建议的数据增长得更多,更多,更大,从而降低性能并增加错误和损坏的可能性。 (作为基于文件的数据库,Access数据库文件因腐败而臭名昭着,尤其是在通过网络访问时。)

如果您决定将此功能添加到您的应用中,How to Compact Microsoft Access Database Through ADO上的这篇文章将为您提供一个良好的起点。

答案 3 :(得分:1)

我会为用户提供一种压缩数据库的方法。我已经看到,当压缩将减少到60-80时,数据库会增长到600多兆字节。

答案 4 :(得分:1)

回应Nate: 在旧版本中,我已经有了腐败的数据库 - 所以一个好的备份机制是必不可少的。我不会在你的应用程序中编写任何代码来自动执行此操作。但是,如果客户发现他们的数据库运行速度很慢,那么您的技术支持人员可以根据需要通过它进行讨论(当然还有适当的备份)。

如果他们的数据库变得如此之大以至于压缩开始变得必不可少,那么可能是时候转向MS-SQL了。

答案 5 :(得分:0)

如果您没有为用户提供解压缩的方法,并且原始尺寸不是问题,那么请不要打扰。

答案 6 :(得分:0)

我发现Access数据库文件几乎总是会随着时间的推移而损坏。压缩和修复它们有助于暂时关闭它。

答案 7 :(得分:0)

这真的很重要!每次操作数据时,mdb文件的大小都会不断增加,直到达到无法忍受的大小。但是您不必通过界面提供压缩方法。您可以在mdb文件中添加以下代码,以便在每次关闭文件时将其压缩:

Application.SetOption(“Auto Compact”),1

答案 8 :(得分:0)

我也高度建议您为自己的应用程序查找VistaDB(http://www.vistadb.net/)或SQL Compact(http://www.microsoft.com/sql/editions/compact/)。这些可能不适合您的应用...但是值得一看。