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

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

===============>>#1 票数:11 已采纳

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

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

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

===============>>#2 票数: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 - 修复表单,报表和模块中的简单对象结构错误

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

===============>>#3 票数:3

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

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

所以,回答你的问题:

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

如果您决定将此功能添加到您的应用程序,那么如何通过ADO压缩Microsoft Access数据库这篇文章将为您提供一个良好的起点。

===============>>#4 票数:1

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

===============>>#5 票数:1

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

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

===============>>#6 票数:0

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

===============>>#7 票数:0

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

===============>>#8 票数:0

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

Application.SetOption(“Auto Compact”),1

===============>>#9 票数:0

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

  ask by Corey Trager translate from so

未解决问题?本站智能推荐:

1回复

从MS Access访问.mdb文件中的后端表

我的组织使用了用户友好的供体数据库软件,该软件将其数据存储在安装文件夹中的.mdb表中。 该程序本身使用了我不熟悉的专有查询方法。 我对SQL有点熟悉,并且想访问软件外部的表以使用SQL进行查询。 该软件允许我们使用SQL代码,但是我们必须为此功能付出更多的钱。 因此,我希望自己打开数据
1回复

MS Access MDB文件不断损坏

我们遇到了Microsoft Access .mdb文件的问题。 在多用户环境中使用.mdb文件一段时间后,该文件已损坏,必须修复。 修复后,花更少的时间再次损坏。 在多次执行重复操作后的某个时刻,该文件不再可用。 从MS Access Runtime 2010更改为MS Acces
2回复

将MS Project 2010导出到MS Access .mdb文件

我已经编写了一个与MS Project 2003导出的.mdb一起使用的C#应用​​程序。现在,我的公司已升级到MS Project 2010,我找不到将整个数据导出到.mdb文件的机会。 您能帮我导出所有数据还是有其他解决方案? 对于任何解决方法,我将非常感谢! 这些是我无条件需
1回复

pyodbc + MS Access(*。mdb)+ UnicodeDecodeError

我通过pyodbc连接到MS Access数据库(mdb文件)。 此数据库中的某些数据具有波兰字符,例如(łóźćśę等)。 当我获取一些数据时,波兰字符被奇怪的字符(³,ê)取代。 我尝试将其解码为utf8,cp1250,cp1252,latin1,latin2,但它不能解决我的问题
11回复

MS Access(MDB)并发

对于一个小型项目,我需要使用一个非常简单的数据库:少量表,总共不超过数千条记录,只有2个或3个用户。 我在.NET环境中工作。 由于在这种情况下,数据库服务器(甚至包括那些Express版本)似乎是一个过大的矫over过正,因此非常简单的MDB数据库可以满足大多数需求。 但是,我担心并
1回复

我可以用Delphi在CD上打开MS access mdb文件

由于MS Access数据库文件在.mdb文件打开时生成.ldb锁定文件,我在CD上运行Delphi应用程序时遇到错误,其中数据库文件也在CD上。 这个问题有什么解决方案吗?
1回复

如何检查(甚至设置)MDB(MS Access)文件中的排序规则?

我成功地将Access DB迁移到MySQL DB。 一切似乎都很好,但是我需要更具体的MySQL DB行为。 选择选项“从A到Z”后,我需要与Access DB中的查询结果完全相同的排序。 我在Java应用程序中使用此结果。 MySQL表为UTF-8,排序规则设置为utf8_g
3回复

在Delphi中读取MS Access mdb文件(免费)? [关闭]

我正在寻找一个Delphi组件/库来打开和读取mdb(MS Access)数据库。 我不会写入数据库或显示数据; 只需要使用sql Access支持读取数据库。 这是一个个人的项目(编程不是我付出的工作),所以我需要一个免费或非常便宜的解决方案,适用于任何Delphi 6,Delphi
6回复

如何使用C#连接到MS Access文件(mdb)?

我正在尝试连接到mdb文件,并且我知道我需要Microsoft.OLEDB.JET.4.0数据提供程序。 不幸的是,我没有在(大学)机器上安装它。 由于他们不提供该提供程序,因此我认为应该有办法解决。 在没有Microsoft.OLEDB.JET.4.0的情况下如何连接文件,或者有其他
3回复

Mac OS X(或Mono)中的MS Access .mdb文件

什么是在Mac OS上写入MS Access(.mdb)数据库的最佳方法? 我有一个项目,我想(快速)移植到Mac OS,我正在考虑使用跨平台的东西,如Mono。 任何人都可以推荐一个好的起点吗? 我是否真的要废弃我的.mdb文件并导出到其他东西? 我非常喜欢Windows上的.