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

时间:2020-03-05 18:56:32  来源:igfitidea点击:

我们分发使用MS Access .mdb文件的应用程序。有人注意到,在MS Access中打开文件后,文件大小会缩小很多。这表明该文件是压缩的理想选择,但是我们没有为用户提供执行压缩的手段。

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

解决方案

回答

如果我们没有为用户提供解压缩的方式,并且原始大小不是开始的问题,那就不要打扰。

回答

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

回答

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

回答

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

但是,这并非完全没有风险-Access 2007中的错误有时会在此过程中删除数据库。

因此,通常这是一件好事,但请将其与良好的备份例程配对。有了适当的备份,我们还可以从任何"不可恢复的"压缩和修复问题中恢复,而数据丢失最少。

回答

压缩Access数据库(也称为MS JET数据库)有点像对硬盘驱动器进行碎片整理。访问(或者更准确地说是MS JET数据库引擎)在重新使用空间方面不是很好,因此当记录被更新,插入或者删除时,并不总是回收该空间,而是在末尾添加了新空间数据库文件的名称,并改为使用。

一般的经验法则是,如果将[Access]数据库写入(更新,更改或者添加)到数据库中,则应允许进行压缩,否则它将增加大小(不仅仅是添加的数据,也)。

因此,回答问题:

  • 是的,这很重要(除非数据库是只读的)。
  • 我们应该在意(除非我们不在乎用户的磁盘空间)。
  • 如果我们不压缩Access数据库,则随着时间的推移,它将比其内部建议的数据大得多,大得多,大得多,从而降低性能并增加错误和损坏的可能性。 (作为基于文件的数据库,Access数据库文件因损坏而臭名昭著,尤其是在通过网络访问时。)

如果我们决定将此功能添加到应用程序,则有关如何通过ADO压缩Microsoft Access数据库的本文将为我们提供一个很好的起点。

回答

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

Application.SetOption("自动压缩"),1

回答

我也强烈建议我们为应用程序查看VistaDB(http://www.vistadb.net/)或者SQL Compact(http://www.microsoft.com/sql/editions/compact/)。这些可能不适合应用程序...但是值得一看。

回答

回显Nate:
在旧版本中,我的数据库已损坏,因此良好的备份机制至关重要。我不会在应用程序中编写任何代码来自动执行此操作。但是,如果客户发现他们的数据库运行非常缓慢,那么技术支持人员可以根据需要与他们进行交谈(当然需要适当的备份)。

如果他们的数据库变得如此之大以至于开始需要进行压缩,那么也许是时候迁移到MS-SQL了。

回答

确保定期压缩和修复数据库,尤其是在数据库应用程序频繁记录更新,删除和插入的情况下。这样不仅可以将数据库文件的大小减小到最小,这也将有助于加快数据库操作和执行数据库内务处理的网络通信,这对数据的稳定性有更大的好处。但是在压缩数据库之前,请确保对文件进行备份,以防万一压缩出现问题。

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

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

如果需要,Access 2000、2002、2003和2007会将压缩与修复操作结合在一起。修复过程:

1清理未完成的交易

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

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

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

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

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

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