我们分发使用MS Access .mdb文件的应用程序。 有人注意到在MS Access中打开文件后文件大小缩小了很多。 这表明该文件是压缩的良好候选者,但我们没有为我们的用户提供这样做的手段。
所以,我的问题是,这有关系吗? 我们关心吗? 如果我们的用户从不压缩数据库会发生什么坏事?
我们分发使用MS Access .mdb文件的应用程序。 有人注意到在MS Access中打开文件后文件大小缩小了很多。 这表明该文件是压缩的良好候选者,但我们没有为我们的用户提供这样做的手段。
所以,我的问题是,这有关系吗? 我们关心吗? 如果我们的用户从不压缩数据库会发生什么坏事?
除了使数据库更小外,它还将重新计算表上的索引并对表进行碎片整理,从而加快访问速度。 它还会发现数据库中永远不会发生的任何不一致,但可能由于Access中的错误或崩溃而发生。
但它并非完全没有风险 - Access 2007中的一个错误偶尔会在此过程中删除您的数据库。
所以这通常是一件好事,但要配合一个好的备份程序。 备份到位后,您还可以从任何“不可恢复的”压缩恢复,并以最少的数据丢失修复问题。
确保定期压缩和修复数据库,尤其是在数据库应用程序经常更新,删除和插入时。 这不仅可以将数据库文件的大小降至最低 - 这将有助于加速数据库操作和网络通信 - 它还可以执行数据库管理,这对数据的稳定性更有利。 但在压缩数据库之前,请确保对文件进行备份,以防万一压缩出现问题。
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 - 修复表单,报表和模块中的简单对象结构错误
如果用户从不压缩/修复数据库,可能会发生的坏事是它会因膨胀而变慢,并且可能会变得不稳定 - 意味着损坏。
压缩Access数据库(也称为MS JET数据库)有点像对硬盘进行碎片整理。 访问(或者更准确地说,MS JET数据库引擎)在重用空间方面不是很好 - 所以当更新,插入或删除记录时,空间并不总是被回收 - 相反,新空间被添加到数据库文件的结尾而是用来代替。
一般的经验法则是,如果你的[交通]数据库将被写入(更新,更改或添加到),你应该允许压缩-否则会在大小(不仅仅是你添加的数据更加壮大,也)。
所以,回答你的问题:
如果您决定将此功能添加到您的应用程序,那么如何通过ADO压缩Microsoft Access数据库这篇文章将为您提供一个良好的起点。
我会为用户提供一种压缩数据库的方法。 我看到数据库增长到600多兆字节,当压缩将减少到60-80。
回应Nate:在旧版本中,我已经有了腐败的数据库 - 所以一个好的备份机制是必不可少的。 我不会在你的应用程序中编写任何代码来自动执行此操作。 但是,如果客户发现他们的数据库运行速度非常慢,那么您的技术支持人员可以根据需要通过它进行讨论(当然还有适当的备份)。
如果他们的数据库变得如此之大以至于压缩开始变得必不可少,那么也许是时候转向MS-SQL了。
如果您没有为用户提供解压缩的方法,并且原始大小不是一个问题,那么请不要打扰。
我发现Access数据库文件几乎总是会随着时间的推移而损坏。 压缩和修复它们有助于保持一段时间。
那真的很重要! 每次操作数据时,mdb文件的大小都会不断增加,直到达到无法忍受的大小。 但是您不必通过界面提供压缩方法。 您可以在mdb文件中添加以下代码,以便在每次关闭文件时将其压缩:
Application.SetOption(“Auto Compact”),1
我还强烈建议您查看VistaDB( http://www.vistadb.net/ )或SQL Compact( http://www.microsoft.com/sql/editions/compact/ )以获取您的应用程序。 这些可能不适合您的应用......但是值得一看。