我们分发使用MS Access .mdb文件的应用程序。有人注意到在MS Access中打开文件后文件大小缩小了很多。这表明该文件是压缩的良好候选者,但我们没有为用户提供这样做的手段。
所以,我的问题是,这有关系吗?我们关心吗?如果我们的用户从不压缩数据库会发生什么坏事?
答案 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]数据库将被写入(更新,更改或添加到),您应该允许压缩 - 否则将增大(不仅仅是你添加的数据)。
所以,回答你的问题:
如果您决定将此功能添加到您的应用中,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/)。这些可能不适合您的应用...但是值得一看。